ホームページ > バックエンド開発 > PHPチュートリアル > PHP を使用して、無限ループやエントリの重複を避けて、ディレクトリ内のすべてのファイルとフォルダーを再帰的に一覧表示するにはどうすればよいですか?

PHP を使用して、無限ループやエントリの重複を避けて、ディレクトリ内のすべてのファイルとフォルダーを再帰的に一覧表示するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-02 10:05:15
オリジナル
882 人が閲覧しました

How Can I Recursively List All Files and Folders in a Directory Using PHP, Avoiding Infinite Loops and Duplicate Entries?

再帰的な PHP 関数を利用したディレクトリ内のファイルとフォルダーの決定

この説明では、ディレクトリのファイルとサブディレクトリを再帰的に走査する方法について調査します。 🎜>

提供されるコード:

function getDirContents($dir){
    $results = array();
    $files = scandir($dir);
    foreach($files as $key => $value){
        if(!is_dir($dir. DIRECTORY_SEPARATOR .$value)){
            $results[] = $value;
        } else if(is_dir($dir. DIRECTORY_SEPARATOR .$value)) {
            $results[] = $value;
            getDirContents($dir. DIRECTORY_SEPARATOR .$value);
        }
    }
}
print_r(getDirContents('/xampp/htdocs/WORK'));
ログイン後にコピー

ジレンマ:指定されたコードには、ディレクトリとファイルを探索するための再帰関数があります。ただし、「.」は無視できません。および「..」が含まれるため、無限ループが発生する可能性があります。さらに、各ファイルとディレクトリは結果で重複します。

答え:この問題に対処するには、次のように関数を変更できます:

function getDirContents($dir, &$results = array()) {
    $files = scandir($dir);
    foreach ($files as $key => $value) {
        $path = realpath($dir . DIRECTORY_SEPARATOR . $value);
        if (!is_dir($path)) {
            $results[] = $path;
        } else if ($value != "." && $value != "..") {
            getDirContents($path, $results);
            $results[] = $path;
        }
    }
    return $results;
}
ログイン後にコピー
このコード:

    realpath() 関数を呼び出して、各ファイルとディレクトリの実際のパスを取得します。潜在的なトラバーサルの問題を排除します。
  • 「.」で示されるディレクトリを無視します。または '..' を使用すると、無限ループが発生する可能性があります。
  • 結果を参照渡しの配列 (&$results) に保存することで、結果内の重複エントリを回避します。

以上がPHP を使用して、無限ループやエントリの重複を避けて、ディレクトリ内のすべてのファイルとフォルダーを再帰的に一覧表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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