遍歷全站檔案php,PHP遍歷檔案的4種方法
【常規遍歷方法】
常規遍歷方法是指從PHP4開始就可以使用的方法,它是結合使用opendir()函式和readdir()函式,通過開啟目錄,讀取目錄和關閉目錄,逐一判斷列出所有的檔案。簡單實現程式碼如下:
/**
* 獲取當前目錄及子目錄下的所有檔案
* @param string $dir 路徑名
* @return array 所有檔案的路徑陣列
*/
function get_files1($dir) {undefined
$files = array();
if(!is_dir($dir)) {undefined
return $files;
}
$handle = opendir($dir);
if($handle) {undefined
while(false !== ($file = readdir($handle))) {undefined
if ($file != '.' && $file != '..') {undefined
$filename = $dir . "/" . $file;
if(is_file($filename)) {undefined
$files[] = $filename;
}else {undefined
$files = array_merge($files, get_files($filename));
}
}
} // end while
closedir($handle);
}
return $files;
} // end function
【使用glob】
glob() 函式依照 libc glob() 函式使用的規則尋找所有與 pattern 匹配的檔案路徑,類似於一般 shells 所用的規則一樣。不進行縮寫擴充套件或引數替代。
返回一個包含有匹配檔案/目錄的陣列。如果出錯返回 FALSE。
此函式不能作用於遠端檔案,被檢查的檔案必須通過伺服器的檔案系統訪問。
/**
* 獲取當前目錄下的所有檔案
* @param string $dir 路徑名
* @return array 所有檔案的路徑陣列
*/
function get_files($dir) {undefined
$dir = realpath($dir) . "/";
$files = array();
if (!is_dir($dir)) {undefined
return $files;
}
$pattern = $dir . "*";
$file_arr = glob($pattern);
foreach ($file_arr as $file) {undefined
if (is_dir($file)) {undefined
$temp = get_files($file);
if (is_array($temp)) {undefined
$files = array_merge($files, $temp);
}
}else {undefined
$files[] = $file;
} // end if
}
return $files;
} // end function
?>
【使用directory 類】
這是個仿冒面向物件的機制來讀取一個目錄。
dir() 函式開啟一個目錄控制代碼,並返回一個物件。這個物件包含三個方法:read() , rewind() 以及 close()。並且有兩個屬性可用。handle 屬性可以用在其它目錄函式例如 readdir(),rewinddir() 和 closedir() 中。path 屬性被設為被開啟的目錄路徑。
若成功,則該函式返回一個目錄流,否則返回 false 以及一個 error。可以通過在函式名前加上 “@” 來隱藏 error 的輸出。
注意: read 方法返回的目錄項的順序依賴於系統。
注意: 本函式定義了內部類 Directory,意味著不能再用同樣的名字定義使用者自己的類。
/**
* 遞迴顯示當前指定目錄下所有檔案
* 使用dir函式
* @param string $dir 目錄地址
* @return array $files 檔案列表
*/
function get_files($dir) {undefined
$files = array();
if (!is_dir($dir)) {undefined
return $files;
}
$d = dir($dir);
while (false !== ($file = $d->read())) {undefined
if ($file != '.' && $file != '..') {undefined
$filename = $dir . "/" . $file;
if(is_file($filename)) {undefined
$files[] = $filename;
}else {undefined
$files = array_merge($files, get_files($filename));
}
}
}
$d->close();
return $files;
}
【RecursiveDirectoryIterator類】
此方法自PHP 5.0有效
/**
* 使用RecursiveDirectoryIterator遍歷檔案,列出所有檔案路徑
* @param RecursiveDirectoryIterator $dir 指定了目錄的RecursiveDirectoryIterator例項
* @return array $files 檔案列表
*/
function get_files($dir) {undefined
$files = array();
for (; $dir->valid(); $dir->next()) {undefined
if ($dir->isDir() && !$dir->isDot()) {undefined
if ($dir->haschildren()) {undefined
$files = array_merge($files, get_files($dir->getChildren()));
};
}else if($dir->isFile()){undefined
$files[] = $dir->getPathName();
}
}
return $files;
}
$path = "/var/www";
$dir = new RecursiveDirectoryIterator($path);
print_r(get_files($dir));