ホームページ  >  記事  >  バックエンド開発  >  PHP5 の DirectoryIterators_PHP チュートリアルを使用してディレクトリを再帰的にスキャンする

PHP5 の DirectoryIterators_PHP チュートリアルを使用してディレクトリを再帰的にスキャンする

WBOY
WBOYオリジナル
2016-07-13 17:36:35879ブラウズ

Iterator が PHP5 に追加されました。これは、階層データ構造の移動と処理に役立つ既製のインターフェイスのセットです。これは、PHP5 の最も興味深い新機能の 1 つです。

これらのイテレーターにより、XML ドキュメント ツリーまたはファイルのコレクションの処理に必要なコードが大幅に削減されます。 PHP5 では、ArrayIterator、CachingIterator、LimitIterator、RecursiveIterator、SimpleXMLIterator、DirectoryIterator など、多数のイテレータが使用されます。

DirectoryIterator を使用すると、ディレクトリ内のファイルを迅速かつ効率的に処理できます。コーディング プロセスにもう少し創造性を加えると、DirectoryIterator を使用して、ネストされたディレクトリ ツリーを再帰的に処理することもできます。どちらのタスクも、わずか数行のコードを使用して実行でき、「標準」アプローチに比べて大幅に改善されています。

単一レベルのディレクトリの処理
まず、単一レベルのディレクトリを処理するという単純なタスクから始めます。次のコード (リスト A) を入力 (またはコピー) し、ローカル構成を反映するようにディレクトリ パスを変更します。

リストA

isDot()) {echo $file . "n";} }?>このコードの出力をブラウザで表示すると、指定したディレクトリ内のファイルのリストが表示されます。どうしてそうなった? DirectoryIterator は、ディレクトリの内容を再記述するための所定のインターフェイスを提供します。ターゲット ディレクトリの場所がサンプリングされると、各要素がディレクトリ内のファイルを表す標準的な PHP 配列として扱うことができます。 isDot () メソッドを使用して「.」ディレクトリと「..」ディレクトリをそれぞれ除外することに注意してください。

ネストされたディレクトリ ツリーの処理

ネストされたディレクトリ ツリーを再帰的に処理することも、ほぼ同じくらい簡単です。この場合、DirectoryIterator は、単一レベルのディレクトリ内で見つかったすべてのオブジェクトをチェックして、それがファイルであるかディレクトリであるかを判断する必要があります。ディレクトリの場合は、さらに深く進んで次のレベルの内容を確認します。これは非常に複雑に聞こえるかもしれませんが、以前は通常 15 行を超えるコードが必要でした。

ただし、PHP5 では、上記の機能をすべて組み合わせた RecursiveIterator と RecursiveIteratorIterator という 2 つの新しいイテレーターのみが必要です。リスト B を参照:

リストB

このとき、入力結果は開始ディレクトリの下にあるすべてのファイルとディレクトリがリストされます。言うまでもなく、この再帰的な組み込みインターフェイスは、特定のディレクトリ レベルにあるすべてのファイルを処理する必要がある場合に非常に便利です。たとえば、ディレクトリ ツリーを再帰的に圧縮したり、一連のネストされたファイルのグループ/所有者権限を変更したりする場合です。

実際のアプリケーション: ディレクトリ ツリーの印刷

グラフィカルなディレクトリ ツリーの印刷は、ディレクトリ再帰の一般的なアプリケーションです。 Iterator クラスのドキュメントには、このアプリケーション専用に作成されたインスタンス クラスが含まれているため、Iterator を使用してこのタスクを処理するのは非常に簡単です。 DirectoryTreeIterator (Marcus Boerger のおかげ) は、前述した RecursiveIteratorIterator にその他の改良点を提供します。特に、ツリー構造内の深さと位置を表す ASCII タグが挙げられます。

リスト C は、DirectoryTreeIterator の使用法を示しています。

リストC

以下は表示される出力の一部です。 :

|-ch01| |-example02.php|これらの DirectoryIterators の値をよりよく理解するには、標準のファイル関数とディレクトリ関数を使用して、このチュートリアルで説明されている 3 つのアプリケーションをコーディングしてみてください。

http://www.bkjia.com/PHPjc/486632.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/486632.html技術記事 PHP5 には、階層データ構造の移動と処理に役立つ既製のインターフェイスのセットである Iterator が追加されています。これは、PHP5 の最も興味深い新機能の 1 つです。 これらのイテレータにより、XML ドキュメント ツリーの処理が大幅に削減されます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。