比较许多大文件时,PHP is_dir函数太慢了

我有一个包含600多个mp4文件的目录和一些目录。 我试图循环文件,并确定该文件是否是一个目录,并获取文件大小。 问题是当获取大文件(> 2GB)的此信息时,is_dir和filesize需要花费很长时间。 有没有一种有效的方法来做到这一点? 在我的示例代码中,我已经注释掉了filesize和is_dir,然后我在几秒钟内恢复了数组。 否则它需要永远。</ p>

  $ files = array(); 
$ directory = opendir($ dir);
while($ file = readdir($ directory)) {
if($ file!=“。”&amp;&amp; $ file!=“..”&amp;&amp; $ file!='$ RECYCLE.BIN'){
$ rec = array(
' afile'=&gt;“{$ dir} / {$ file}”,
'name'=&gt; $ file
);
// if(is_dir($ rec ['afile'])){$ rec ['type'] ='dir';}
// else {$ rec ['type'] ='file';}
// $ rec ['size'] = filesize($ rec ['afile ']);
$ files [] = $ rec;
}
}
closedir($ directory);
</ code> </ pre>
</ div>

展开原文

原文

I have a directory with over 600 mp4 files in it and a few directories. I am trying to loop through the files and determine if the file is a directory or not and get the filesize. The problem is that is_dir and filesize take WAY to long when getting this info for large files (>2GB). Is there an efficient way to do this? in my example code I have commented out filesize and is_dir and then I get the array back in a few seconds. Otherwise it takes forever.

    $files=array();
    $directory=opendir($dir);
    while ($file = readdir($directory)) {
        if($file != "." && $file != ".." && $file != '$RECYCLE.BIN'){
                $rec=array(
                    'afile'=>"{$dir}/{$file}",
                    'name'=>$file
                );
                //if(is_dir($rec['afile'])){$rec['type']='dir';}
                //else{$rec['type']='file';}
                //$rec['size']=filesize($rec['afile']);
                $files[]=$rec;
            }
        }
    closedir($directory);

duanke0178
duanke0178 更多的测试表明问题一定是我的覆盆子Pi3B上运行的raspbianOS的问题。我从来没有猜到操作系统会成为罪魁祸首。
2 年多之前 回复
drtsd7864
drtsd7864 例如,在ext4上以递归方式运行ls-lR超过60GB的音乐和数千个文件几乎是即时的,仅受终端打印速度的限制。〜150个视频杂项视频文件,每个大约2GB,同样是瞬时的。
2 年多之前 回复
doushi4956
doushi4956 嗯,如果ls-l也很慢(也可以从命令行尝试?)那么你的问题可能会比PHP更深入。它是什么类型的文件系统?它是通过NFS挂载的吗?USB?
2 年多之前 回复
douyi2107
douyi2107 我试过ls-l,它有同样的问题。工作得很好。
2 年多之前 回复
dongsha2792
dongsha2792 这不是“这将解决您的问题”,但我喜欢php.net/manual/en/class.directoryiterator.php中用于处理文件系统的东西。
2 年多之前 回复
dtqf81594
dtqf81594 我可能不会自己这样做,但如果性能是一个严重的问题,你可以考虑从php到ls-l进行shell调用,并解析输出的目录和文件大小。
2 年多之前 回复
dtoka218420
dtoka218420 您使用或可以使用数据库吗?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐