Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kopiere ich ein ganzes Verzeichnis rekursiv mit PHP?

Wie kopiere ich ein ganzes Verzeichnis rekursiv mit PHP?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-30 19:31:03264Durchsuche

How to Recursively Copy an Entire Directory Using PHP?

So kopieren Sie ein gesamtes Verzeichnis rekursiv mit PHP

Das Kopieren des gesamten Inhalts eines Verzeichnisses an einen anderen Ort kann eine häufige Aufgabe in PHP sein Programmierung. Während die Kopierfunktion für eine flache Verzeichnisstruktur verwendet werden kann, kann es beim Umgang mit mehreren Verzeichnisebenen zu Einschränkungen kommen.

Dave fragte, wie man den Inhalt eines Verzeichnisses mit copy ("old_location/*. *","new_location/"), aber der bereitgestellte Code gibt einen Fehler aus, der besagt, dass der Stream nicht gefunden werden kann und *.* nicht gefunden wird.

Eine Lösung, die dieses Problem behebt, ist die Verwendung einer rekursiven Funktion wie die folgende:

<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);
}</code>

Durch die Verwendung von Rekursion kann diese Funktion die Verzeichnisstruktur durchlaufen und bei Bedarf untergeordnete Verzeichnisse erstellen. Es überprüft den Dateityp für jedes Element im Verzeichnis und ruft sich rekursiv auf, um nach Bedarf Dateien zu kopieren oder Verzeichnisse zu erstellen.

Das obige ist der detaillierte Inhalt vonWie kopiere ich ein ganzes Verzeichnis rekursiv mit PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn