ホームページ >バックエンド開発 >PHPチュートリアル >PHP でディレクトリの内容を再帰的にコピーするにはどうすればよいですか?

PHP でディレクトリの内容を再帰的にコピーするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-31 12:35:02857ブラウズ

How to Recursively Copy Directory Contents in PHP?

PHP を使用したディレクトリの内容のコピー

PHP でディレクトリの内容全体を別の場所にコピーするのは簡単な作業ですが、次のような問題が発生します。ストリームが見つからないエラーなどの問題はイライラする可能性があります。これを回避するには、より明示的なアプローチが必要です。

copy() 関数でのワイルドカード使用の制限を克服するには、 recurseCopy() という再帰関数を使用できます。この関数により、マルチレベルのディレクトリ構造とその内容のレプリケーションが可能になります。

recurseCopy() 関数は 3 つのパラメータを取ります:

  • $sourceDirectory: コピーされるソース ディレクトリ
  • $destinationDirectory: コピーされたコンテンツを保持する宛先ディレクトリ
  • $childFolder (オプション): コピーされたファイルを整理するための $destinationDirectory の下のフォルダー名 (再帰中に使用されます)

この関数は、ソース ディレクトリのファイルとサブディレクトリを反復処理します。ファイルが見つかった場合は、宛先ディレクトリに直接コピーされます。サブディレクトリが見つかった場合、関数はそれ自体を再帰的に呼び出して、その内容を宛先ディレクトリの下の対応するサブディレクトリにコピーします。

recurseCopy() 関数を使用するサンプル PHP コードを次に示します。

<code class="php">function recurseCopy(string $sourceDirectory, string $destinationDirectory, string $childFolder = ''): void {
    $directory = opendir($sourceDirectory);

    if (is_dir($destinationDirectory) === false) {
        mkdir($destinationDirectory);
    }

    if ($childFolder !== '') {
        if (is_dir("$destinationDirectory/$childFolder") === false) {
            mkdir("$destinationDirectory/$childFolder");
        }

        while (($file = readdir($directory)) !== false) {
            if ($file === '.' || $file === '..') {
                continue;
            }

            if (is_dir("$sourceDirectory/$file") === true) {
                recurseCopy("$sourceDirectory/$file", "$destinationDirectory/$childFolder/$file");
            } else {
                copy("$sourceDirectory/$file", "$destinationDirectory/$childFolder/$file");
            }
        }

        closedir($directory);

        return;
    }

    while (($file = readdir($directory)) !== false) {
        if ($file === '.' || $file === '..') {
            continue;
        }

        if (is_dir("$sourceDirectory/$file") === true) {
            recurseCopy("$sourceDirectory/$file", "$destinationDirectory/$file");
        }
        else {
            copy("$sourceDirectory/$file", "$destinationDirectory/$file");
        }
    }

    closedir($directory);
}

$sourceDirectory = 'my_source_dir';
$destinationDirectory = 'my_destination_dir';

recurseCopy($sourceDirectory, $destinationDirectory);</code>

このコードは、my_source_dir ディレクトリの内容を my_destination_dir ディレクトリに再帰的にコピーし、ディレクトリ構造とファイルの内容を保持します。

以上がPHP でディレクトリの内容を再帰的にコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。