ホームページ > バックエンド開発 > PHPチュートリアル > PHPマスター| PHPのファイルとディレクトリをリストします

PHPマスター| PHPのファイルとディレクトリをリストします

Joseph Gordon-Levitt
リリース: 2025-02-25 18:23:17
オリジナル
198 人が閲覧しました

PHP Master | List Files and Directories with PHP

この記事では、PHPアプリケーション開発における一般的なタスクについて説明します。ファイルとディレクトリのリスト。いくつかの基本的および高度なソリューションを紹介し、それらの長所と短所を分析します。まず、基本的なPHP関数を使用する3つの方法を紹介し、次にSPLイテレーターを活用するためのより強力な方法に徐々に移行します。議論のために、ディレクトリ構造は次のとおりであると想定しています。

キーポイント
<code>---manager
|
---user
|   ---document.txt
|   ---data.dat
|   ---style.css
|---article.txt
|---master.dat
|---script.php
|---test.dat
|---text.txt</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

PHPは、
  • glob()opendir()readdir()closedir()などのファイルとディレクトリをリストするための複数の関数を提供します。これらの機能の柔軟性はさまざまであり、一部はフィルタリング後に必要です。 scandir()
  • 標準のPHPライブラリ(SPL)は、
  • FilesystemIteratorRecursiveDirectoryIteratorを含むファイルとディレクトリをリストするためのオブジェクト指向ソリューションを提供します。これらのイテレーターは、特定のニーズをよりよく満たすために拡張できます。 GlobIterator
  • 関数は、フィルタリングを可能にする1行のソリューションですが、柔軟性がありません。代わりに、glob()opendir()、およびreaddir()はより大きな柔軟性を提供しますが、より冗長なコードとポストフィルタリングが必要です。 closedir()
  • 関数にはポストフィルタリングも必要ですが、ファイルハンドルの管理は必要ありません。オブジェクト指向の方法では、SPLライブラリを使用する必要があります。 scandir()で事前にフィルタリングすることを許可しますが、他の繰り返しはGlobIteratorを使用して同じ機能を実現できます。 RegexIterator
基本的なソリューション

メソッドの最初のセットは、

関数の使用、glob()opendir()readdir()関数の組み合わせ、およびclosedir()関数の使用を示しています。 scandir()

使用法

glob()

最初に議論される関数は

です。これにより、最も有名なシェルに似たワイルドカードを使用してパス名を検索できます。この関数には、2つのパラメーターがあります glob()

    (必須):検索モード
  • $pattern
  • (オプション):公式ドキュメントにリストされている1つ以上のフラグ
  • $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()最後に、

関数を紹介したいと思います。必要なパラメーターは1つだけです。読み取りパスです。返品値は、パスに含まれるファイルとディレクトリの配列です。最後のソリューションと同様に、ファイルとディレクトリのサブセットを取得するには、ポストフィルターを自分で行う必要があります。一方、以下のコードからわかるように、このソリューションはよりシンプルで、ファイルハンドルの管理を必要としません。この例は、文字列「TE」から始まるファイルとディレクトリを取得する方法を示しています:

<code>---manager
|
---user
|   ---document.txt
|   ---data.dat
|   ---style.css
|---article.txt
|---master.dat
|---script.php
|---test.dat
|---text.txt</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

spl iteratorを使用してみましょう

次に、いくつかのspl iteratorについて話しましょう。しかし、それらの使用に飛び込む前に、それらとSPLライブラリを紹介させてください。 SPLは、さまざまなオブジェクト指向のデータ構造、イテレーター、ファイルハンドラー、およびその他のクラスを提供します。利点の1つは、イテレーターがクラスであることです。そのため、ニーズに合わせてそれらを拡張できることです。別の利点は、あなたが直面するかもしれない多くの一般的なタスクであなたを助けることができる非常に有用なネイティブ方法を持っていることであり、あなたはそれらを1か所で見つけることができることです。たとえば、readdir()inFilesystemIteratorを使用すると、両方ともループで使用されますが、readdir()を使用する場合は、エントリは文字列にすぎません。または、ディレクトリには大量の情報(サイズ、所有者、許可など)があります。もちろん、PHPはFilesystemIteratorfilesize()などの関数を使用して同じ情報を提供できますが、PHP5はそのアプローチをOOPに変えました。だから、全体として、私のアドバイスは、ここで言語の新しいベストプラクティスに従うことです。 SPLイテレーターに関するより一般的な情報が必要な場合は、SPL Iteratorを使用して確認してください。紹介で述べたように、fileowner()FilesystemIteratorRecursiveDirectoryIteratorの使用を示します。最初はGlobIteratorから継承し、他の人はDirectoryIteratorから継承します。それらはすべて同じコンストラクターを持っていますが、これには2つのパラメーターしかありません。 FilesystemIterator

    (必須):ファイルシステムのパスプロジェクトを繰り返します
  • $path
  • (オプション):公式ドキュメントにリストされている1つ以上のフラグ
  • $flags
  • これらの反復因子間の実際の違いは、特定のパスをナビゲートする方法です。

FilesystemIterator

の使用は非常に簡単です。それがどのように実用的であるかを示すために、2つの例を示します。最初の例では、文字列「TE」から始まるすべてのファイルとディレクトリを検索しますが、2番目の例では別のイテレーターを使用して、すべての「t.dat」または「t。ファイルとディレクトリを検索しますphp」。

正規表現に基づいて別のイテレーターをフィルタリングするために使用されます。 FilesystemIterator RegexIterator RegexIterator上記のコードを使用すると、結果は前の例と同じです。

を使用する2番目の例は:
<?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()
  • OOPメソッドを使用する場合は、SPLライブラリを使用する必要があります。さらに、ニーズに合わせてクラスを拡張できます。
  • scandir()
  • は事前にフィルタリングすることができますが、他のイテレーターは
  • を使用して快適な方法で同じ機能を実現できます。
  • GlobIteratorこれを達成する他の方法を知っていますか?はい、そしてあなたが私たちと共有したい場合は、続けてください。クリエイティブ共有は常に人気があります。 Fotoliaの写真RegexIterator を使用したファイルとディレクトリのリストについて
FAQ(FAQ)

PHPでファイルとディレクトリを並べ替える方法は?

を使用して、PHPのファイルとディレクトリを並べ替えることができます。

関数を使用してファイルとディレクトリを取得した後、

関数を適用して昇順で配置できます。それらを降順で並べ替えたい場合は、

関数を使用できます。これらの機能のパラメーターとしてファイルとディレクトリの配列を渡すことを忘れないでください。

PHPのファイルやディレクトリをリストする際に特定のファイルまたはディレクトリを除外する方法は? sort() 特定のファイルまたはディレクトリを除外するには、scandir()関数と組み合わせてsort()関数を使用できます。 rsort()関数は、アレイに値が存在するかどうかをチェックします。ファイルまたはディレクトリの配列を作成して、関数を除外および使用して、配列にファイルまたはディレクトリが存在するかどうかを確認できます。存在する場合は、スキップできます。

ファイルではなくPHPでのみディレクトリをリストする方法は?

ファイルの代わりにディレクトリのみをリストするには、is_dir()関数を使用できます。この関数は、パスがディレクトリであるかどうかをチェックします。これを使用して、scandir()関数と組み合わせて、配列内の各アイテムがscandir()によって返されるかどうかを確認できます。その場合は、リストに含めることができます。

PHPのファイルとディレクトリを再帰的にリストする方法は?

ファイルとディレクトリを再帰的にリストするには、scandir()関数を使用してファイルとディレクトリを取得する再帰関数を作成し、それが見つける各ディレクトリにそれ自体を呼び出すことができます。これにより、ディレクトリツリー全体を通過できます。

ファイルをリストするときにPHPで各ファイルのサイズを取得するにはどうすればよいですか?

各ファイルのサイズを取得するには、filesize()関数を使用できます。この関数は、ファイルサイズをバイト単位で返します。これを使用して、scandir()関数と組み合わせて、各ファイルをリストするときに各ファイルのサイズを取得できます。

ファイルをリストするときに、PHPで各ファイルの最後の変更された日付を取得するにはどうすればよいですか?

各ファイルの最後の変更日を取得するには、filemtime()関数を使用できます。この関数は、ファイルの最後の変更時間をUNIXタイムスタンプとして返​​します。これを使用して、scandir()関数と組み合わせて、リストするときに各ファイルの最後の変更された日付を取得できます。

PHPでファイルをリストするときにファイルを拡張してフィルタリングする方法は?

拡張によりファイルをフィルタリングするには、pathinfo()関数を使用できます。この関数は、拡張機能を含むファイルパスに関する情報を返します。これを使用して、scandir()関数と組み合わせて、リストするときにファイルを拡張してフィルタリングできます。

PHPのリモートディレクトリにファイルとディレクトリをリストする方法は?

リモートディレクトリにファイルとディレクトリをリストするには、ftp_nlist()関数を使用できます。この関数は、FTPサーバーの指定されたディレクトリのファイルとディレクトリのリストを返します。 ftp_nlist()を使用する前に、ftp_connect()およびftp_login()関数を使用してFTP接続を確立する必要があります。

PHPのファイルとディレクトリをリストするときにエラーを処理する方法は?

エラーを処理するには、ファイルとディレクトリをリストするときに、error_reporting()およびset_error_handler()関数を使用できます。これらの機能により、エラー報告レベルを設定し、エラーが発生したときに呼び出されるカスタムエラーハンドラー関数を定義できます。

ZIPアーカイブのファイルとディレクトリをPHPでリストする方法は?

zipアーカイブにファイルとディレクトリをリストするには、ZipArchiveクラスを使用できます。このクラスは、アーカイブ内のファイルのコンテンツを取得できるgetFromName()メソッドを含むZIPアーカイブを処理する方法を提供します。

以上がPHPマスター| PHPのファイルとディレクトリをリストしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート