在想解決這個問題的時候,我也查找了很多資料。推薦給大家我個人覺得比較好的一篇:PHP遍歷文件目錄
文中第四個算法可以遍歷出文件夾下的所有文件,代碼如下:
$dir = 'E:\phpStudy\PHPTutorial\WWW';
echo '<pre>';
function listDir($dir)
{
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if ((is_dir($dir . "/" . $file)) && $file != "." && $file != "..") {
echo "文件名:", "$file\n";
listDir($dir . "/" . $file . "/");
} else {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
}
closedir($dh);
}
}
}
listDir($dir);
左圖:這是我設定的文件目錄E:\phpStudy\PHPTutorial\WWW;
右圖:爲頁面打印出來的部分信息,檢測5次後,得出的耗時平均時間爲:3754.5224189758毫秒。
算法優化:
雖然這個算法可以很好的遍歷出目中的所有文件,但是PHP有個更好的函數可以利用:scandir()和glob();對於優化算法較上述算法有以下兩點優化:
1. 打印出的內容有目錄,展現更加明確;
2. 時間略有減少,速度提升。
算法一、scandir()方法優化代碼如下:
$dir = 'E:\phpStudy\PHPTutorial\WWW';
echo '<pre>';
function getDir1($dir)
{
$arr = scandir($dir);
foreach ($arr as $file) {
if ($file != '.' && $file != '..') {
$path = $dir . '/' . $file;
if (is_dir($path)) {
getDir1($path);
} else {
echo "$path\n";
}
}
}
}
getDir1($dir);
檢測5次後,得出的耗時平均時間爲:3527.3191928864毫秒。
算法二、glob()方法優化代碼如下:
$dir = 'E:\phpStudy\PHPTutorial\WWW';
function getDir2($dir)
{
foreach (glob($dir . '\*') as $file) {
if (is_dir($file)) {
getDir2($file);
} else {
echo "$file\n";
}
}
}
getDir2($dir);
檢測5次後,得出的耗時平均時間爲:3330.0499916077毫秒。
下圖是打印出的部分文件格式:
總結:
由上可以看出:算法二 > 算法一 > 引用算法
在實際應用中,我們需要指定擴展名的列舉目錄內所有文件的話,還是推薦如下:
foreach (glob('*.文件後綴') as $filename) {
echo $filename;
}
歡迎補充!
千而の大獅子!