繁体   English   中英

数组大小在PHP scandir()中受到限制

[英]Array size getting limited in PHP scandir()

我正在使用递归函数返回特定目录中所有图像文件的列表。 该函数可以正常工作,直到实现返回数组的特定大小为止(我认为是问题所在)。 我还有什么其他方法可以解决该问题,或者可以在不执行大量更改代码的情况下在此处实施替代方法? 这是我的递归函数。

function scanDirectories($rootDir, $allowext, $allData=array()) {
        $dirContent = scandir($rootDir);
            foreach($dirContent as $key => $content) {
                $path = $rootDir.'/'.$content;
                $ext = substr($content, strrpos($content, '.') + 1);

                if(in_array($ext, $allowext)) {
                    if(is_file($path) && is_readable($path)) {
                        $allData[] = $path;
                    }elseif(is_dir($path) && is_readable($path)) {
                        // recursive callback to open new directory
                        $allData = scanDirectories($path, $allData);
                    }
                }
            }
            return $allData;
        }

例如,我有一个包含83个图像文件的目录,但是我只能返回其中28个图像的列表。 在互联网上搜索时,我发现这可能是memory_limit的结果,可以使用ini_set('memory_limit', '1024M');来增加它ini_set('memory_limit', '1024M'); 在我的脚本中,这将内存限制为1GB,但我无法解决问题。

scandir正在返回. .. (当前目录和上一级目录)作为目录列表。 可能会导致您的脚本以无限递归永久运行。

尝试更换线

}elseif(is_dir($path) && is_readable($path)) {

}elseif(is_dir($path) && is_readable($path) && $content!='.' && $content!='..' ) {

可能会解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM