【发布时间】:2014-11-29 10:41:02
【问题描述】:
我的网站变慢了,我发现了问题:
这部分在这里加载大约需要 2/2.5 somtimes 3 秒:
$root = 'assets/img/fotogalerij';
$iter = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($root, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST,
RecursiveIteratorIterator::CATCH_GET_CHILD // Ignore "Permission denied"
);
$paths = array($root);
unset($paths[0]);
foreach ($iter as $path => $dir) {
if ($dir->isDir()) {
$paths[] = str_replace($root, '', $path);
}
}
我在这个目录中有大约 2200 个文件 if ($dir->isDir()) 部分是瓶颈。
检查 isDir 2200 次有点费钱
有没有更有效的方法只显示文件夹和子文件夹名称?
我不关心文件,我只想要文件夹和子文件夹名
我是这个领域的新手,我发现的关于这个问题的信息是关于仅显示当前文件夹名称或列出文件名(如 opendir、readdir、scandir、glob 等)
【问题讨论】:
-
应用
iterator_to_array/array_map("is_dir")将避免中断的循环内 isDir 探测;但不太可能显着提高性能。鉴于文件夹结构相当大,使用find . -type d避开 PHP 虚拟机可能值得一试。
标签: php performance