Heim >Backend-Entwicklung >PHP-Tutorial >Wie kopiere ich Verzeichnisinhalte rekursiv in PHP?

Wie kopiere ich Verzeichnisinhalte rekursiv in PHP?

Linda Hamilton
Linda HamiltonOriginal
2024-10-31 12:35:02897Durchsuche

How to Recursively Copy Directory Contents in PHP?

Kopieren von Verzeichnisinhalten mit PHP

Das Kopieren des gesamten Inhalts eines Verzeichnisses an einen anderen Ort in PHP kann eine unkomplizierte Aufgabe sein, die jedoch mit Problemen verbunden ist Probleme wie der Fehler „Stream nicht gefunden“ können frustrierend sein. Um dies zu vermeiden, ist ein expliziterer Ansatz erforderlich.

Um die Einschränkungen der Verwendung von Platzhaltern in der Funktion copy() zu überwinden, kann eine rekursive Funktion namens recurseCopy() verwendet werden. Diese Funktion ermöglicht die Replikation von mehrstufigen Verzeichnisstrukturen und deren Inhalten.

Die Funktion recurseCopy() benötigt drei Parameter:

  • $sourceDirectory: Das zu kopierende Quellverzeichnis
  • $destinationDirectory: Das Zielverzeichnis, in dem die kopierten Inhalte gespeichert werden sollen
  • $childFolder (optional): Ein Ordnername unter das $destinationDirectory zum Organisieren der kopierten Dateien (wird während der Rekursion verwendet)

Die Funktion durchläuft die Dateien und Unterverzeichnisse des Quellverzeichnisses. Wenn eine Datei gefunden wird, wird sie direkt in das Zielverzeichnis kopiert. Wenn ein Unterverzeichnis gefunden wird, ruft sich die Funktion rekursiv auf, um dessen Inhalt in das entsprechende Unterverzeichnis unter dem Zielverzeichnis zu kopieren.

Hier ist ein Beispiel-PHP-Code, der die Funktion recurseCopy() verwendet:

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

Dieser Code kopiert rekursiv den Inhalt des Verzeichnisses „my_source_dir“ in das Verzeichnis „my_destination_dir“, wobei das Verzeichnis erhalten bleibt Struktur und Dateiinhalt.

Das obige ist der detaillierte Inhalt vonWie kopiere ich Verzeichnisinhalte rekursiv in 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