ホームページ  >  記事  >  バックエンド開発  >  共有: 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. $files = array();

  8. if (!is_dir($dir)) {

  9. return $files;
  10. }

  11. $handle = opendir($dir);

  12. if($handle) {
  13. while(false !== ( $file = readdir($handle))) {
  14. if ($file != '.' && $file != '..') {
  15. $filename = $dir . $file;
  16. if(is_file) ($filename)) {
  17. $files[] = $filename;
  18. }else {
  19. $files = array_merge($files, get_files($filename));
  20. }
  21. }
  22. } // 終了 while
  23. closedir($handle) );
  24. }
  25. return $files;
  26. } // 関数を終了

コードをコピー

方法 2、glob を使用 glob() 関数は、通常のシェルで使用される規則と同様に、libc glob() 関数で使用される規則に従って、パターンに一致するすべてのファイル パスを検索します。 略語展開やパラメータ置換は行われません。 一致するファイル/ディレクトリを含む配列を返します。エラーが発生した場合は FALSE を返します。 この機能はリモート ファイルでは機能しません。チェックされるファイルにはサーバーのファイル システムを通じてアクセスする必要があります。 この機能は、特定のディレクトリ内のファイルを検索するために使用され、アーティファクトと呼ぶことができます。

例:

  1. /**
  2. * 現在のディレクトリ内のすべてのファイルを取得します
  3. * @param string $dir パス名
  4. * @return array すべてのファイルのパス配列
  5. */
  6. function get_files($dir) {
  7. $dir = realpath($dir) . array();

  8. if (!is_dir($dir)) {

  9. return $files;
  10. }

  11. $pattern = $dir . ;

  12. $file_arr = glob($pattern);

  13. foreach ($file_arr as $file) {

  14. if (is_dir($file)) {
  15. $temp = get_files($file);

  16. if (is_array($temp)) {

  17. $files = array_merge($files, $temp);
  18. }
  19. }else {
  20. $files[] = $file;
  21. } / / end if
  22. }
  23. return $files;
  24. } // end function
  25. ?>

コードをコピー
方法 3、ディレクトリ クラスを使用 ディレクトリを読み取るための偽のオブジェクト指向メカニズム。 dir() 関数は、ディレクトリ ハンドルを開き、オブジェクトを返します。このオブジェクトには、read()、rewind()、close() の 3 つのメソッドが含まれています。そして、2つの物件が用意されています。 handle 属性は、readdir()、rewinddir()、closedir() などの他のディレクトリ関数で使用できます。 path 属性は、開かれているディレクトリのパスに設定されます。 成功した場合、関数はディレクトリ ストリームを返し、そうでない場合は false とエラーを返します。関数名の前に「@」を追加すると、エラー出力を非表示にできます。 注: read メソッドによって返されるディレクトリ エントリの順序はシステムに依存します。 注: この関数は内部クラス Directory を定義します。つまり、ユーザー独自のクラスを同じ名前で定義することはできません。

例:

  1. /**
  2. * 現在指定されているディレクトリ内のすべてのファイルを再帰的に表示します
  3. * dir 関数を使用します
  4. * @param string $dir ディレクトリアドレス
  5. * @return array $files ファイルリスト
  6. * @site bbs.it-home.org
  7. */
  8. function get_files($dir) {
  9. $files = array();

  10. if (!is_dir($dir)) {

  11. return $files;
  12. }

  13. $d = dir($dir);

  14. while (false !== ($file = $d- >read())) {
  15. if ($file != '.' && $file != '..') {
  16. $filename = "/" . $file;

  17. < ;p>if(is_file($filename)) {
  18. $files[] = $filename;
  19. }else {
  20. $files = array_merge($files, get_files($filename));
  21. }
  22. }
  23. }
  24. $d ->close();
  25. return $files;
  26. }

コードをコピー

方法 4、RecursiveDirectoryIterator クラスを使用する このメソッドは PHP 5.0 以降で有効です

例:

  1. /**
  2. * RecursiveDirectoryIterator を使用してファイルを走査し、すべてのファイル パスをリストします
  3. * @param RecursiveDirectoryIterator $dir はディレクトリの RecursiveDirectoryIterator インスタンスを指定します
  4. * @return array $files ファイル リスト
  5. */
  6. function get_files($dir) {
  7. $files = array();

  8. for (; $dir->valid(); $dir->next()) {

  9. if ($dir->isDir() && !$dir->isDot()) {
  10. if ($dir->isDir() ->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 までご連絡ください。