Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP scandir()中的数组大小受到限制_Php_Arrays_Recursion_Out Of Memory - Fatal编程技术网

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

PHP scandir()中的数组大小受到限制,php,arrays,recursion,out-of-memory,Php,Arrays,Recursion,Out Of Memory,我使用递归函数返回特定目录中所有图像文件的列表。函数可以正常工作,直到返回的数组达到特定的大小(我认为这是问题所在)。我还可以做些什么来解决这个问题,或者在应用程序运行时,在这里实现一个替代方案,而无需对代码进行太多更改?这是我的递归函数 function scanDirectories($rootDir, $allowext, $allData=array()) { $dirContent = scandir($rootDir); foreach($di

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

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个文件的列表。在互联网上搜索时,我发现这可能是
内存限制的结果,我可以使用
ini\u集(“内存限制”,“1024M”)来增加内存限制在我的脚本中,这使内存限制为1GB,但我无法解决此问题。

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

试着换一条线

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


可能会解决您的问题。

php返回什么错误?请您发布一下,当我将它放入
try catch
块时,没有抛出错误。我不认为,这与您所说的不同,因为返回的数组在列表中只有所需的文件,并且没有上层或当前目录。但是它返回的内容远远少于它实际应该返回的内容。那么应该是关于文件的权限或者过滤它们的
allowext
。我不认为1GB(甚至16MB)的内存不足以扫描83个文件:/是的,我同意1GB的内存太多了,但这并没有解决问题。现在关于权限,对于所有图片,其设置为
Read
,因此这也不应该是问题。
}elseif(is_dir($path) && is_readable($path) && $content!='.' && $content!='..' ) {