キーポイント
<code>---manager | ---user | ---document.txt | ---data.dat | ---style.css |---article.txt |---master.dat |---script.php |---test.dat |---text.txt</code>
glob()
、opendir()
、readdir()
、closedir()
などのファイルとディレクトリをリストするための複数の関数を提供します。これらの機能の柔軟性はさまざまであり、一部はフィルタリング後に必要です。 scandir()
FilesystemIterator
、RecursiveDirectoryIterator
を含むファイルとディレクトリをリストするためのオブジェクト指向ソリューションを提供します。これらのイテレーターは、特定のニーズをよりよく満たすために拡張できます。 GlobIterator
glob()
、opendir()
、およびreaddir()
はより大きな柔軟性を提供しますが、より冗長なコードとポストフィルタリングが必要です。 closedir()
scandir()
で事前にフィルタリングすることを許可しますが、他の繰り返しはGlobIterator
を使用して同じ機能を実現できます。 RegexIterator
関数の使用、glob()
、opendir()
、readdir()
関数の組み合わせ、およびclosedir()
関数の使用を示しています。 scandir()
glob()
です。これにより、最も有名なシェルに似たワイルドカードを使用してパス名を検索できます。この関数には、2つのパラメーターがあります
glob()
$pattern
$flags
*.txt
<?php $filelist = glob("*.txt");
「TE」から始まるファイルとディレクトリのリストが必要な場合、書きたいコードは次のとおりです。
$filelist
<code>array ( 0 => 'article.txt', 1 => 'text.txt' )</code>
「ma」を含むディレクトリのリストのみを取得するには、コードは次のとおりです。
<?php $filelist = glob("te*");
<code>---manager | ---user | ---document.txt | ---data.dat | ---style.css |---article.txt |---master.dat |---script.php |---test.dat |---text.txt</code>
最後の例では、オプションの2番目のパラメーターとしてGLOB_ONLYDIR
定数を使用していることに注意してください。ご覧のとおり、master.dat
という名前のファイルは除外されます。 glob()
関数は使いやすいですが、場合によっては柔軟ではありません。たとえば、指定されたパターン(ディレクトリではなく)に一致するファイルのみを取得するフラグはありません。
opendir()
およびreaddir()
私が議論したいファイルとディレクトリの読み取りの2番目の方法には、opendir()
、readdir()
、closedir()
関数が含まれます。 opendir()
ディレクトリを開き、接続ハンドルに戻ります。ハンドルが取得された後、readdir()
を使用できます。この関数が呼び出されるたびに、[オープンディレクトリ内の次のファイル]またはディレクトリの名前が表示されます。すべての名前が取得された後、関数はfalse
を返します。ハンドルを閉じるには、closedir()
を使用できます。 glob()
とは異なり、このアプローチは、返されたファイルとディレクトリをフィルタリングするのに役立つパラメーターがないため、もう少し複雑です。あなたはあなたが望むものを手に入れるために自分自身を投稿してやらなければなりません。 glob()
関数と並行するために、次の例では、「TE」から始まるすべてのファイルとディレクトリのリストを取得します。
<?php $filelist = glob("*.txt");
の値を出力すると、奇妙なエントリが含まれることがあります。これらは、ファイルシステムの各ディレクトリにある2つの仮想ディレクトリです。それらは、それぞれ現在のディレクトリと親ディレクトリ(以前のフォルダー)を表します。 2番目の例は、特定のパスに含まれるファイルのみを取得する方法を示しています。 $entry
<code>array ( 0 => 'article.txt', 1 => 'text.txt' )</code>
使用法
<?php $filelist = glob("te*");
scandir()
最後に、<code>---manager | ---user | ---document.txt | ---data.dat | ---style.css |---article.txt |---master.dat |---script.php |---test.dat |---text.txt</code>
次に、いくつかのspl iteratorについて話しましょう。しかし、それらの使用に飛び込む前に、それらとSPLライブラリを紹介させてください。 SPLは、さまざまなオブジェクト指向のデータ構造、イテレーター、ファイルハンドラー、およびその他のクラスを提供します。利点の1つは、イテレーターがクラスであることです。そのため、ニーズに合わせてそれらを拡張できることです。別の利点は、あなたが直面するかもしれない多くの一般的なタスクであなたを助けることができる非常に有用なネイティブ方法を持っていることであり、あなたはそれらを1か所で見つけることができることです。たとえば、readdir()
inFilesystemIterator
を使用すると、両方ともループで使用されますが、readdir()
を使用する場合は、エントリは文字列にすぎません。または、ディレクトリには大量の情報(サイズ、所有者、許可など)があります。もちろん、PHPはFilesystemIterator
やfilesize()
などの関数を使用して同じ情報を提供できますが、PHP5はそのアプローチをOOPに変えました。だから、全体として、私のアドバイスは、ここで言語の新しいベストプラクティスに従うことです。 SPLイテレーターに関するより一般的な情報が必要な場合は、SPL Iteratorを使用して確認してください。紹介で述べたように、fileowner()
、FilesystemIterator
、RecursiveDirectoryIterator
の使用を示します。最初はGlobIterator
から継承し、他の人はDirectoryIterator
から継承します。それらはすべて同じコンストラクターを持っていますが、これには2つのパラメーターしかありません。
FilesystemIterator
$path
$flags
FilesystemIterator
正規表現に基づいて別のイテレーターをフィルタリングするために使用されます。 FilesystemIterator
RegexIterator
RegexIterator
上記のコードを使用すると、結果は前の例と同じです。
<?php $filelist = glob("*.txt");
RegexIterator
この場合、出力は次のとおりです
<code>---manager | ---user | ---document.txt | ---data.dat | ---style.css |---article.txt |---master.dat |---script.php |---test.dat |---text.txt</code>
RecursiveDirectoryIterator
RecursiveDirectoryIterator
ファイルシステムディレクトリを再帰的に反復するためのインターフェイスを提供します。ターゲットのため、現在のエントリ(ディレクトリの場合)のイテレーターを返し、現在のエントリがディレクトリであるかどうかなど、getChildren()
やhasChildren()
などのいくつかの便利な方法があります。同じ結果を得るために、最後の例を書き直します。 RecursiveDirectoryIterator
getChildren()
<?php $filelist = glob("*.txt");
GlobIterator
関数と同様に繰り返します。したがって、最初のパラメーターにはワイルドカードが含まれている場合があります。次のコードは、GlobIterator
を使用する一般的な例を示しています。 glob()
GlobIterator
<code>array ( 0 => 'article.txt', 1 => 'text.txt' )</code>
関数は、フィルタリングを可能にする1行のソリューションですが、あまり柔軟ではありません。
glob()
、opendir()
readdir()
関数にはフィルタリング後も必要ですが、管理ハンドルは必要ありません。 closedir()
scandir()
GlobIterator
これを達成する他の方法を知っていますか?はい、そしてあなたが私たちと共有したい場合は、続けてください。クリエイティブ共有は常に人気があります。 Fotoliaの写真RegexIterator
を使用したファイルとディレクトリのリストについてPHPでファイルとディレクトリを並べ替える方法は?
を使用して、PHPのファイルとディレクトリを並べ替えることができます。 PHPのファイルやディレクトリをリストする際に特定のファイルまたはディレクトリを除外する方法は? sort()
特定のファイルまたはディレクトリを除外するには、scandir()
関数と組み合わせてsort()
関数を使用できます。 rsort()
関数は、アレイに値が存在するかどうかをチェックします。ファイルまたはディレクトリの配列を作成して、
ファイルの代わりにディレクトリのみをリストするには、is_dir()
関数を使用できます。この関数は、パスがディレクトリであるかどうかをチェックします。これを使用して、scandir()
関数と組み合わせて、配列内の各アイテムがscandir()
によって返されるかどうかを確認できます。その場合は、リストに含めることができます。
ファイルとディレクトリを再帰的にリストするには、scandir()
関数を使用してファイルとディレクトリを取得する再帰関数を作成し、それが見つける各ディレクトリにそれ自体を呼び出すことができます。これにより、ディレクトリツリー全体を通過できます。
各ファイルのサイズを取得するには、filesize()
関数を使用できます。この関数は、ファイルサイズをバイト単位で返します。これを使用して、scandir()
関数と組み合わせて、各ファイルをリストするときに各ファイルのサイズを取得できます。
各ファイルの最後の変更日を取得するには、filemtime()
関数を使用できます。この関数は、ファイルの最後の変更時間をUNIXタイムスタンプとして返します。これを使用して、scandir()
関数と組み合わせて、リストするときに各ファイルの最後の変更された日付を取得できます。
拡張によりファイルをフィルタリングするには、pathinfo()
関数を使用できます。この関数は、拡張機能を含むファイルパスに関する情報を返します。これを使用して、scandir()
関数と組み合わせて、リストするときにファイルを拡張してフィルタリングできます。
リモートディレクトリにファイルとディレクトリをリストするには、ftp_nlist()
関数を使用できます。この関数は、FTPサーバーの指定されたディレクトリのファイルとディレクトリのリストを返します。 ftp_nlist()
を使用する前に、ftp_connect()
およびftp_login()
関数を使用してFTP接続を確立する必要があります。
エラーを処理するには、ファイルとディレクトリをリストするときに、error_reporting()
およびset_error_handler()
関数を使用できます。これらの機能により、エラー報告レベルを設定し、エラーが発生したときに呼び出されるカスタムエラーハンドラー関数を定義できます。
zipアーカイブにファイルとディレクトリをリストするには、ZipArchive
クラスを使用できます。このクラスは、アーカイブ内のファイルのコンテンツを取得できるgetFromName()
メソッドを含むZIPアーカイブを処理する方法を提供します。
以上がPHPマスター| PHPのファイルとディレクトリをリストしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。