h1

PHP-Funktion zum Kopieren des Verzeichnisinhalts

Juli 17, 2008

Ein komplettes Verzeichnis ist mit der in PHP implementierten Funktion copy() schnell kopiert. Wer aber häufig mit Verzeichnissen arbeitet wird vielleicht auf ein Problem stoßen: Man will nur den Inhalt eines Verzeichnisses kopieren, nicht aber das Verzeichnis selbst!

Ich habe dieses Problem mit der in PHP implementierten Klasse dir gelöst, die Funktion muss aufgrund der Unterverzeichnisse natürlich rekursiv arbeiten!

<?php
function copy_base($source, $target)
{
    if (is_dir($source )) 
        #prüfen, ob es sich um ein verzeichnis handelt
    {
        @mkdir($target); 
                # Zielverzeichnis erstellen, falls es nicht existiert

        $d = dir($source); 
                # Verzeichnis in die php-klasse dir einlesen
        #(die “dir-Klassse” ist eine in php-vorinstallierte Klasse, 
        #welche nicht importiert werden muss ACHTUNG nur in PHP 5)

        while (FALSE !== ($entry = $d->read())) 
                # Schleife zum einlesen der einzelnen Dateien
        {
            if ($entry == '.' || $entry == '..') 
                        #überspringen der Einträge . und .. 
            {
                continue;
            }

            $Entry = $source . '/' . $entry; 
                        # Jede eingelesene Datei 
            #wird mit vollständigem Pfad in $Entry gespeichert
            
                        if (is_dir($Entry)) 
                        # prüfen, ob eine Datei ein Verzeichnis ist
            {
                copy_base($Entry, $target . '/' . $entry); 
                # falls ja, 
                #rekursiver Funktionsaufruf zum Einlesen der
                #Dateien im Unterverzeichnis, danach fortfahren
                continue;
            }
            copy($Entry, $target . '/' . $entry); 
                        # Alle eingelesenen Dateien kopieren
        }

        $d->close(); 
                #mit php-klasse dir dasVerzeichnis schließen veralssen
    }
    else
    {
        copy($source, $target); 
                # Datei kopieren 
        #falls es sich bei source nicht um ein Verzeichnis handelt
    }
}
?>

Ich habe die Funktion mit Kommentaren versehen, um deren Arbeitsweise zu erklären.

Bei Rückfragen einfach die Kommentarfunktion nutzen.

Hier nochmal ein Bild in Ordentlicher Form, weil man ohne Einrückung leider nicht so viel erkennt ;-)!

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: