Unlöschbare Dateien auf dem Server bzw. Webspace

Sie können Dateien oder Ordner auf ihrem Webspace nicht löschen, weder per FTP noch über die Administrationsoberfläche ihres Webhosters? Das liegt daran weil sie nicht die entsprechenden Rechte bzw. Zugriffsrechte haben, denn die nicht löschbaren Dateien und Ordner wurden von dem Server selbst angelegt. Auch ein Versuch die entsprechenden Rechte per CHMOD zu ändern schlägt fehl.

Deleteme

Normalerweise benötigen Sie in einem solchen Fall direkten, physikalischen Zugriff auf den Server, bzw. müssen sich mit Root-Rechten als Benutzer anmelden können. Bei den meisten Webspace Hosting Paketen ist dies aber nicht möglich. Wie können Sie also trotzdem wieder Zugriff auf die Dateien und Ordner in ihrem eigenen Webspace bekommen?

Lösung

Die Lösung ist ein PHP-Script per FTP auf den Server hochzuladen das die Rechte der entsprechenden Ordner und Script umstellt und anschliessend löscht. Ein solches Script können Sie mit einem Texteditor selbst ganz einfach herstellen und anschliessend per FTP auf ihren Webspace hochladen. Anschliessend rufen Sie die hochgeladene Datei über ihren Webbrowser auf und das Script erledigt dann die Arbeit.

Nehmen wir an ihre Website liegt auf der Domain www.meinewebseite.de und ihr neues PHP-Script hat den Namen deleteme.php bekommen, das sie in das Hauptverzeichnis (Root-Ordner) ihres Webspace gespeichert haben, dann rufen Sie das Script auf indem Sie in ihrem Webbrowser http://www.meinewebseite.de/deleteme.php eingeben. Das PHP-Script zeigt in der Ausgabe dann was es gemacht hat. Hier also nun zu dem Script:

PHP-Script

Kopieren Sie den Inhalt dieses Scripts in eine neue Textdatei, die Sie beispielsweise deleteme.php benennen. Dieses Script passen Sie ihren persönlichen Bedürfnissen an, indem Sie im Script eingeben was Sie löschen möchten. Die entsprechende Stelle am Ende des Scripts ist kommentiert. Achten Sie dabei darauf den korrekten Pfad zu dem Ordner oder der Datei anzugeben die Sie löschen möchten. Anschliessend laden Sie die Datei per FTP auf ihren Webspace hoch und geben der Datei alle ausführenden Rechte. Vergessen Sie nicht nach der Aktion die Datei selbst auch wieder zu löschen.

<?php

// Ein Ordner bzw. Verzeichnis rekursiv loeschen
// Rueckgabewerte:
// 0  - alles ok
// -1 - kein Verzeichnis
// -2 - Fehler beim Loeschen
// -3 - Ein Eintrag eines Verzeichnisses war keine Datei und kein Verzeichnis und kein Link
function rec_rmdir ($path) {
    // schaue nach ob das ueberhaupt ein Verzeichnis ist
    if (!is_dir ($path)) {
        return -1;
    }
    // oeffne das Verzeichnis
    $dir = @opendir ($path);
    
    // Fehler?
    if (!$dir) {
        return -2;
    }
    
    // gehe durch das Verzeichnis
    while ($entry = @readdir($dir)) {
        // wenn der Eintrag das aktuelle Verzeichnis oder das Elternverzeichnis ist ignoriere es
        if ($entry == '.' || $entry == '..') continue;
        // wenn der Eintrag ein Verzeichnis ist, dann 
        if (is_dir ($path.'/'.$entry)) {
            // rufe mich selbst auf
            $res rec_rmdir ($path.'/'.$entry);
            // wenn ein Fehler aufgetreten ist
            if ($res == -1) { // dies duerfte gar nicht passieren
                @closedir ($dir); // Verzeichnis schliessen
                return -2// normalen Fehler melden
            } else if ($res == -2) { // Fehler?
                @closedir ($dir); // Verzeichnis schliessen
                return -2// Fehler weitergeben
            } else if ($res == -3) { // nicht unterstuetzer Dateityp?
                @closedir ($dir); // Verzeichnis schliessen
                return -3// Fehler weitergeben
            } else if ($res != 0) { // das duerfe auch nicht passieren...
                @closedir ($dir); // Verzeichnis schliessen
                return -2// Fehler zurueck
            }
        } else if (is_file ($path.'/'.$entry) || is_link ($path.'/'.$entry)) {
            // ansonsten loesche diese Datei / diesen Link
            $res = @unlink ($path.'/'.$entry);
            // Fehler?
            if (!$res) {
                @closedir ($dir); // Verzeichnis schliessen
                return -2// melde ihn
            }
        } else {
            // ein nicht unterstuetzer Dateityp
            @closedir ($dir); // Verzeichnis schliessen
            return -3// tut mir schrecklich leid
        }
    }
    
    // schliesse nun das Verzeichnis
    @closedir ($dir);
    
    // versuche nun das Verzeichnis zu loeschen
    $res = @rmdir ($path);
    
    // gab's einen Fehler?
    if (!$res) {
        return -2// melde ihn
    }
    
    // alles ok
    return 0;
}

    // loesche das Verzeichnis /deleteme
    $res rec_rmdir ('/deleteme');
    switch ($res) {
      case 0:
        echo'Das Verzeichnis wurde korrekt geloescht';
        break;
      case -1:
        echo'Das war kein Verzeichnis';
        break;
      case -2:
        echo'Ein Fehler ist aufgetreten';
        break;
      case -3:
        echo'Die Funktion ist ueber einen Dateityp gestolpert den sie nicht kennt';
        break;
      default:
        echo'Die Funktion hat irgendetwas zurueckgegeben was sie eigentlich nicht sollte';
        break;
    }
?>

Wer es gerne sehr kurz haben möchte und auf die im Script enthaltene Dokumentation verzichten kann was das Script macht, kann auch dieses ultrakurze Script verwenden. Wichtig ist aber nach dem Upload der Datei dieser alle ausführbaren Rechte zu geben!

<?php
exec('rm ./deleteme -R');
?>