[英]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.