Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyalin Kandungan Direktori secara Rekursif dalam PHP?

Bagaimana untuk Menyalin Kandungan Direktori secara Rekursif dalam PHP?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 12:35:02808semak imbas

How to Recursively Copy Directory Contents in PHP?

Menyalin Kandungan Direktori dengan PHP

Menyalin keseluruhan kandungan direktori ke lokasi lain dalam PHP boleh menjadi tugas yang mudah, tetapi berjalan ke isu seperti ralat strim tidak ditemui boleh mengecewakan. Untuk mengelakkan ini, pendekatan yang lebih jelas diperlukan.

Untuk mengatasi had penggunaan kad bebas dalam fungsi copy(), fungsi rekursif bernama recurseCopy() boleh digunakan. Fungsi ini membenarkan replikasi struktur direktori berbilang peringkat dan kandungannya.

Fungsi recurseCopy() mengambil tiga parameter:

  • $sourceDirectory: Direktori sumber untuk disalin
  • $destinationDirectory: Direktori destinasi untuk menyimpan kandungan yang disalin
  • $childFolder (pilihan): Nama folder di bawah $destinationDirectory untuk menyusun fail yang disalin (digunakan semasa rekursi)

Fungsi ini berulang melalui fail dan subdirektori direktori sumber. Jika fail ditemui, ia terus disalin ke direktori destinasi. Jika subdirektori ditemui, fungsi itu secara rekursif memanggil dirinya sendiri untuk menyalin kandungannya ke dalam subdirektori yang sepadan di bawah direktori destinasi.

Berikut ialah contoh kod PHP yang menggunakan fungsi recurseCopy():

<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>

Kod ini akan menyalin secara rekursif kandungan direktori my_source_dir ke direktori my_destination_dir, mengekalkan struktur direktori dan kandungan fail.

Atas ialah kandungan terperinci Bagaimana untuk Menyalin Kandungan Direktori secara Rekursif dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn