首頁  >  文章  >  後端開發  >  分享:PHP遍歷文件的4種方法

分享:PHP遍歷文件的4種方法

WBOY
WBOY原創
2016-07-25 08:57:37793瀏覽
  1. /**

  2. * 取得目前目錄及子目錄下的所有檔案
  3. * @param string $dir 路徑名稱
  4. * @return array 所有檔案的路徑陣列
  5. */
  6. function get_files1($dir) {
  7. $
  8. files = array();
  9. if(!is_dir($dir)) {

  10. return $files;
  11. }
  12. $handle = opendir ($dir);

  13. if($handle) {
  14. while(false !== ($file = readdir($handle))) {
  15. if ($file != '.' && $file != '..') {
  16. $filename = $dir . "/" . $file;
  17. if(is_file($filename)) {
  18. $files[] = $filename;
  19. }else {
  20. $files = array_merge($files, get_files($filename));
  21. }
  22. }
  23. } // end while
  24. closedir($handle);
  25. } // end while
  26. closedir($handle);
  27. } // end while
closedir($handle);
} // end whileclosedir($handle);} // end while
closedir($handle);

} // end while

closedir($handle);

} // end while

closedir($handle);
} //end
return $files;
    } // end function
  1. 複製程式碼
  2. 方法2,使用glob glob() 函數依照 libc glob() 函數所使用的規則尋找所有與 pattern 相符的檔案路徑,類似於一般 shells 所使用的規則一樣。 不進行縮寫擴充或參數替代。 傳回一個包含有符合檔案/目錄的陣列。如果出錯則回傳 FALSE。 此函數不能作用於遠端文件,被檢查的文件必須透過伺服器的文件系統存取。 這個函數用來搜尋某個目錄下的文件,堪稱神器。
  3. 例:
  4. /**

  5. * 取得目前目錄下的所有檔案
  6. * @param string $dir 路徑名稱
  7. * @return array 所有檔案的路徑陣列
  8. */
  9. function get_files($dir) {
  10. $dir = realpath($dir) . "/";
  11. $files = array();
  12. if (!is_dir($dir)) {

  13. return $files ;
  14. }
  15. $pattern = $dir . "*";

  16. $file_arr = glob($pattern);
  17. 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
    ?>
  1. 複製代碼
  2. 方法3,使用directory 類 仿冒物件導向的機制來讀取一個目錄。 dir() 函數開啟一個目錄句柄,並傳回一個物件。這個物件包含三個方法:read() , rewind() 以及 close()。並且有兩個屬性可用。 handle 屬性可以用在其它目錄函數例如 readdir(),rewinddir() 和 closedir() 中。 path 屬性被設為已開啟的目錄路徑。 若成功,則函數傳回目錄流,否則傳回 false 以及一個 error。可以透過在函數名稱前加上 “@” 來隱藏 error 的輸出。 注意: read 方法傳回的目錄項目的順序依賴於系統。 注意: 本函數定義了內部類別 Directory,表示不能再用同樣的名字定義使用者自己的類別。
  3. 例:
  4. /**

  5. * 遞歸顯示目前指定目錄下所有檔案
  6. * 使用dir函數
  7. * @param string $dir 目錄位址
  8. * @return array $files 檔案清單
  9. * @site bbs.it -home.org
  10. */
  11. function get_files($dir) {*/
  12. function get_files($dir) {$files = array();
  13. if (!is_dir($dir)) {

  14. return $files;
  15. }
  16. $ d = dir($dir);

  17. 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有效

例:

  1. /**

  2. * 使用RecursiveDirectoryIterator遍歷文件,列出所有文件路徑
  3. * @param RecursiveDirectoryIterator $dir 指定了目錄的RecursiveDirectoryIterator實例
  4. * @return array $files 文件列表
  5. */
  6. function get_files($dir) {*/
  7. function get_files($dir) {$files = array();
  8. for (; $dir->valid(); $dir->next()) {

  9. if ($dir->isDir() && !$dir->isDot()) {
  10. if ($dir->haschildren()) {
  11. $files = array_merge($files, get_files($dir->getChildren()));
  12. };
  13. }else if($dir->isFile()){
  14. $files[] = $dir->getPathName();
  15. }
  16. }
  17. return $files;
  18. }
  19. $path = "/var/www";

  20. $dir = new RecursiveDirectoryIterator($path);
  21. print_r(get_files($dir));
複製程式碼


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn