-
-
/**
- * 取得目前目錄及子目錄下的所有檔案
- * @param string $dir 路徑名稱
- * @return array 所有檔案的路徑陣列
- */
- function get_files1($dir) {
- $
- files = array();
if(!is_dir($dir)) {
- return $files;
- }
$handle = opendir ($dir);
- if($handle) {
- while(false !== ($file = readdir($handle))) {
- if ($file != '.' && $file != '..') {
- $filename = $dir . "/" . $file;
- if(is_file($filename)) {
- $files[] = $filename;
- }else {
- $files = array_merge($files, get_files($filename));
- }
- }
- } // end while
- closedir($handle);
- } // end while
- closedir($handle);
- } // end while
closedir($handle); } // end while closedir($handle);} // end while closedir($handle);} // end while closedir($handle);} // end while closedir($handle);} //end return $files; } // end function-
-
-
- 複製程式碼
-
-
- 方法2,使用glob
glob() 函數依照 libc glob() 函數所使用的規則尋找所有與 pattern 相符的檔案路徑,類似於一般 shells 所使用的規則一樣。
不進行縮寫擴充或參數替代。
傳回一個包含有符合檔案/目錄的陣列。如果出錯則回傳 FALSE。
此函數不能作用於遠端文件,被檢查的文件必須透過伺服器的文件系統存取。
這個函數用來搜尋某個目錄下的文件,堪稱神器。
-
- 例:
-
-
-
-
-
-
/**
- * 取得目前目錄下的所有檔案
- * @param string $dir 路徑名稱
- * @return array 所有檔案的路徑陣列
- */
- function get_files($dir) {
- $dir = realpath($dir) . "/";
- $files = array();
if (!is_dir($dir)) {
- return $files ;
- }
$pattern = $dir . "*";
- $file_arr = glob($pattern);
foreach ($ file_arr as $file) {
if (is_dir($file)) { $temp = get_files($file); if (is_array($temp)) { $files = array_merge($files, $temp); }}else { $files[] = $file;} // end if } return $files; } // end function ?>-
-
-
- 複製代碼
-
-
- 方法3,使用directory 類
仿冒物件導向的機制來讀取一個目錄。
dir() 函數開啟一個目錄句柄,並傳回一個物件。這個物件包含三個方法:read() , rewind() 以及 close()。並且有兩個屬性可用。 handle 屬性可以用在其它目錄函數例如 readdir(),rewinddir() 和 closedir() 中。 path 屬性被設為已開啟的目錄路徑。
若成功,則函數傳回目錄流,否則傳回 false 以及一個 error。可以透過在函數名稱前加上 “@” 來隱藏 error 的輸出。
注意: read 方法傳回的目錄項目的順序依賴於系統。
注意: 本函數定義了內部類別 Directory,表示不能再用同樣的名字定義使用者自己的類別。
-
- 例:
-
-
-
-
-
-
/**
- * 遞歸顯示目前指定目錄下所有檔案
- * 使用dir函數
- * @param string $dir 目錄位址
- * @return array $files 檔案清單
- * @site bbs.it -home.org
- */
- function get_files($dir) {*/
- function get_files($dir) {$files = array();
if (!is_dir($dir)) {
- return $files;
- }
$ d = dir($dir);
- while (false !== ($file = $d->read())) {
if ($file != '.' && $file != '. .') { $filename = $dir . "/" . $file; if(is_file($filename)) { $files[] = $filename; }else {$files = array_merge($files, get_files($filename));}}}$d->close(); return $files;}複製程式碼方法4,使用RecursiveDirectoryIterator類
此方法自PHP 5.0有效
例:
-
-
/**
- * 使用RecursiveDirectoryIterator遍歷文件,列出所有文件路徑
- * @param RecursiveDirectoryIterator $dir 指定了目錄的RecursiveDirectoryIterator實例
- * @return array $files 文件列表
- */
- function get_files($dir) {*/
- function get_files($dir) {$files = array();
for (; $dir->valid(); $dir->next()) {
- if ($dir->isDir() && !$dir->isDot()) {
- if ($dir->haschildren()) {
- $files = array_merge($files, get_files($dir->getChildren()));
- };
- }else if($dir->isFile()){
- $files[] = $dir->getPathName();
- }
- }
- return $files;
- }
$path = "/var/www";
- $dir = new RecursiveDirectoryIterator($path);
- print_r(get_files($dir));
-
複製程式碼
|