PHP scandir()中的数组大小受限

时间:2014-11-07 06:08:26

标签: php arrays recursion out-of-memory

我使用递归函数返回特定目录中所有图像文件的列表。该函数正常工作,直到达到返回数组的特定大小(我认为是问题)。还有什么我可以做的来解决这个问题,或者可以在这里实现的替代方案,而不需要在应用程序生效时更改代码吗?这是我的递归函数。

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');增加,这会使内存限制为 1GB 但是我我无法解决问题。

1 个答案:

答案 0 :(得分:0)

scandir返回...(当前和上层目录)作为目录列表。并且它可能会导致您的脚本永远以无限递归运行。

尝试替换

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

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

可以解决您的问题。