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

问题描述 投票:0回答:1

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

    $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);
php function filesize
1个回答
0
投票

我和你有同样的需求,并通过解决方法解决了它。

我没有检查 $file 是否是目录,而是检查文件 $file.'\..' 是否存在(注意双斜杠)。

第二种方法要快得多(至少是经验测试)。

所以你的代码可以这样重写:

$files = array();
$directory = opendir($dir);
while ($file = readdir($directory))
{
    if($file != "." && $file != ".." && $file != '$RECYCLE.BIN' && file_exists($directory.'\\'.$file.'\\..') )
    {
        // do things...
    }
}
closedir($directory);
© www.soinside.com 2019 - 2024. All rights reserved.