Похоже, что scandir () вызывает проблемы здесь, и если бы я мог установить предел глубины, он мог бы работать лучше, но я не слишком уверен.
На моем сайте есть большой каталог изображений (25 ГБ), который очень хорошо организован. Я использую tinyMCE с файловым менеджером Roxy Fileman. Когда я пытаюсь загрузить корневую папку «images», она просто продолжает загружаться и в итоге вылетает. Если я жестко запрограммировал его, чтобы открыть «картинки / посты», он нормально загружается. Я проверил исходный код, и похоже, что эта функция выполняет чтение каталогов.
function listDirectory($path){
$ret = @scandir($path);
if($ret === false){
$ret = array();
$d = opendir($path);
if($d){
while(($f = readdir($d)) !== false){
$ret[] = $f;
}
closedir($d);
}
}
return $ret;
}
В частности, один каталог содержит около 99% изображений, и мне не нужно обращаться к нему с помощью файлового менеджера, но я также не могу переместить каталог. «изображения / игры» является причиной. Есть ли способ для меня, чтобы игнорировать этот каталог или только сканирование до определенной глубины.
Если есть способ читать каталоги самостоятельно, вы можете сделать это и создать список с игнорируемыми каталогами. Вы сказали, что каталог games
содержит около 99% изображений, но вам не нужно было получить к нему доступ. Это может быть идеальным кандидатом для игнорируемого каталога.
Если это возможно, я бы написал что-то вроде следующего:
function read_directory_files($path, array $ignored = []) {
/*
* Check if the provided path is readable and is a directory.
*/
if(!is_readable($path) || is_file($path)) {
throw new \LogicException('The provided path must be a readable directory.');
}
$files. = [];
$directories = scandir($path);
/*
* Remove current (.) and parent (..) directory references.
*/
unset($directories[0], $directories[1]);
/*
* Check if the directory is empty after the current and parent
* directory references has been removed.
*/
if(empty($directories)) {
return null;
}
foreach($directories as $directory) {
if(!is_file($directory) && in_array($directory, $ignored)) {
continue;
}
if(!is_file($directory)) {
$key = basename($directory);
$files[$key] = read_directory_files($directory);
}else{
$files[] = $directory;
}
}
return $files;
}
Этот код не проверен поэтому может произойти ошибка, но это должно позволить вам выбрать, из каких каталогов вы хотите читать файлы. Использование будет:
$ignored = [
'games'
];
$files = read_directory_files('path/to/images', $ignored);
Если вы не можете использовать свой собственный механизм для чтения каталогов, вы можете попробовать заменить существующий код чем-то вроде того, что я написал, но сделайте это на свой страх и риск и не забудьте сделать резервную копию своего кода.
Надеюсь, что это может быть полезным, счастливого кодирования!
Других решений пока нет …