ホームページ  >  記事  >  バックエンド開発  >  PHPでディレクトリのすべてのコンテンツを取得する方法

PHPでディレクトリのすべてのコンテンツを取得する方法

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-06-01 17:23:122190ブラウズ

この記事では、PHP でディレクトリ内のすべてのコンテンツを取得する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

PHPでディレクトリのすべてのコンテンツを取得する方法

今回はSPLライブラリのディレクトリイテレータを紹介します その機能は実はとてもシンプルで、名前からもわかるように全ての項目を取得するものです指定されたディレクトリ内のコンテンツ。以前は、ディレクトリとそのディレクトリ内のすべてのファイルを取得するには、ディレクトリを走査する必要があり、通常は再帰的な走査が必要でしたが、正直、このコードを自分で書くのはかなり面倒だったので、PHP がこの組み込みのセットを用意しました。指定したディレクトリに入ると、そのディレクトリ内のすべてのサブディレクトリとファイルの内容を直接返します。もちろんツリー状ではないので順番は定かではありませんが、ツリー状にまとめたい場合は自分で加工する必要があります。

早速、コードを直接見てみましょう。

$path = $argv[1];

// 获取目录下所有内容
$dirs = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);

foreach($dirs as $k=>$d){
    echo 'key:'. $k, PHP_EOL;
    if($d->isDir()){
        echo $d->getPathname(), PHP_EOL;
    }else{
        echo $d->getFilename(), PHP_EOL;
    }
}

//执行 php PHP获取目录中的全部内容RecursiveDirectoryIterator.php ../

// key:../.
// ../.
// key:../..
// ../..
// key:../source
// ../source
// key:../source/.
// ../source/.
// key:../source/..
// ../source/..
// key:../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php
// PHP获取目录中的全部内容RecursiveDirectoryIterator.php
// key:../source/PHP大文件读取操作.php
// PHP大文件读取操作.php
// key:../PHP大文件读取操作.md
// PHP大文件读取操作.md
// key:../PHP获取目录中的全部内容RecursiveDirectoryIterator.md
// PHP获取目录中的全部内容RecursiveDirectoryIterator.md

これは実際には 1 行のコードで、直接ループしてイテレータを出力します。結果から、最初にソース ディレクトリに入り、次に外部ファイルの内容を走査し、ディレクトリ内のすべての内容をディレクトリとファイル名の順序で取得していることがわかります。自分で再帰関数を書くよりもはるかに便利ではないでしょうか?

ディレクトリ内のすべての PHP ファイルを取得し、それらの合計ファイル サイズを計算したい場合はどうすればよいでしょうか?この一連のイテレータ操作を使用することも非常に簡単に完了できます。前のイテレータの内容をフィルタリングするために通常のイテレータを追加するだけです:

// 获取所有php文件
$regIts = new RegexIterator($dirs, '/^.+\.php$/i');
$fileSize = 0;
foreach($regIts as $k=>$p){
    echo $p->getSize() . ' ' .  $k, PHP_EOL;
    $fileSize += $p->getSize();
}
echo 'Total ', $fileSize, PHP_EOL;

// 622 ../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php
// 869 ../source/PHP大文件读取操作.php
// Total 1491

これは ls -l と同じように感じられます。ディレクトリの下で関連する操作を実行します。このクラスの使用法をここで簡単に紹介します。SPL ライブラリには、探索する価値のある機能が多数あります。ゆっくりと学習し、ゆっくりと練習して、エレガントなプログラミングの能力を継続的に向上させてください。

テスト コード:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/PHP%E8%8E%B7%E5%8F%96%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%85%A8%E9%83%A8%E5%86%85%E5%AE%B9RecursiveDirectoryIterator.php

推奨学習: php ビデオ チュートリアル

以上がPHPでディレクトリのすべてのコンテンツを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。