看起来scandir()在这里引起了问题,如果我可以设置深度限制,它可能会更好,但我不太确定。
我的网站有一个非常有条理的大型图像目录(25gb)。我使用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%的图像,我不需要使用文件管理器访问它,但我也无法移动目录。 "影像/游戏"是原因。有没有办法让我忽略这个目录或者只扫描到某个深度。
答案 0 :(得分:0)
如果有办法自己读取目录,可以这样做并创建一个包含忽略目录的列表。您说目录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);
如果您不能使用自己的机制来读取目录,可以尝试用我编写的内容替换现有代码,但这样做会冒风险,并记得备份代码。
希望这可以有用,编码愉快!