我有以下内容,速度相当慢。我怎样才能加快速度?
(它扫描目录,从文件夹中制作标题,从中检索pdf文件并将其添加到列表中)
$directories= array_diff(scandir("../pdfArchive/subfolder", 0), array('..', '.'));
foreach ($directories as $v) {
echo "<h3>".$v."</h3>";
$current = array_diff(scandir("../pdfArchive/subfolder/".$v, 0), array('..', '.'));
echo "<ul style='"list-style-image: url(/images/pdf.gif); margin-left: 20px;'">";
foreach ($current as $vone) {
echo "<li><a target='"blank'" href='"../pdfArchive/subfolder/".$vone."'">".str_replace(".pdf", "", $vone)."</a>";
echo "</li><br>";
}
echo "</ul>";
}
不要使用array_diff()来过滤当前目录和父目录,使用DirectoryTerator或glob()之类的东西,然后测试它是否是。或通过if语句
glob()有一个标志,允许您只检索循环的目录
评测您的代码,查看哪些行/函数执行缓慢
我不确定数组很大时array_diff()的速度有多快,简单地添加一个单独的检查并确保"不是更快吗?'和".."不是返回的名称吗?
除此之外,我看不出有什么真正的错误。
你测试了什么,认为目前的方法很慢?
这是我从php.net改编而来的一段代码。它非常基本,可以遍历给定的目录并列出其中包含的文件。
// The @ suppresses any errors, $dir is the directory path
if (($handle = @opendir($dir)) != FALSE) {
// Loop over directory contents
while (($file = readdir($handle)) !== FALSE) {
// We don't want the current directory (.) or parent (..)
if ($file != "." && $file != "..") {
var_dump($file);
if (!is_dir($dir . $file)) {
// $file is really a file
} else {
// $file is a directory
}
}
}
closedir($handle);
} else {
// Deal with it
}
您可以通过使用is_dir
来识别文件夹,从而进一步调整它以在子目录上递归,如我上面所示。