Размер массива ограничен в 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'); в моем сценарии, который делает ограничение памяти 1GB но я не могу решить проблему.

0

Решение

scandir возвращается . а также .. (текущий и верхний каталог) в виде списка каталогов. и это может привести к тому, что ваш скрипт будет работать вечно с бесконечной рекурсией.

Попробуйте заменить строку

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

с

}elseif(is_dir($path) && is_readable($path) && $content!='.' && $content!='..' ) {

может решить вашу проблему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]