1. 程式人生 > 其它 >遍歷全站檔案php,PHP遍歷檔案的4種方法

遍歷全站檔案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));