Я использую рекурсивную функцию, чтобы вернуть список всех файлов изображений в определенном каталоге. Функция работает нормально, пока не будет достигнут определенный размер возвращаемого массива (что, как я полагаю, является проблемой). Есть ли что-нибудь еще, что я могу сделать, чтобы решить проблему, или альтернатива, которая может быть реализована здесь без значительного изменения кода, пока приложение работает? Вот моя рекурсивная функция.
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 но я не могу решить проблему.
scandir
возвращается .
а также ..
(текущий и верхний каталог) в виде списка каталогов. и это может привести к тому, что ваш скрипт будет работать вечно с бесконечной рекурсией.
Попробуйте заменить строку
}elseif(is_dir($path) && is_readable($path)) {
с
}elseif(is_dir($path) && is_readable($path) && $content!='.' && $content!='..' ) {
может решить вашу проблему.
Других решений пока нет …