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!='..' ) {