我使用递归函数返回特定目录中所有图像文件的列表。该函数正常工作,直到达到返回数组的特定大小(我认为是问题)。还有什么我可以做的来解决这个问题,或者可以在这里实现的替代方案,而不需要在应用程序生效时更改代码吗?这是我的递归函数。
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 但是我我无法解决问题。
答案 0 :(得分:0)
scandir
返回.
和..
(当前和上层目录)作为目录列表。并且它可能会导致您的脚本永远以无限递归运行。
尝试替换
行}elseif(is_dir($path) && is_readable($path)) {
带
}elseif(is_dir($path) && is_readable($path) && $content!='.' && $content!='..' ) {
可以解决您的问题。