Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Rekursives Löschen macht Rundumschlag

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Rekursives Löschen macht Rundumschlag

    Ich wünsche Euch einen frohen 4.Advent,

    Zur Einleitung, ich arbeite an einem Projekt und erstelle mir gerade ein kleines CMS.
    Ein User kann sich anmelden -> nach erfolgreicher Anmeldung hat dieser User die Möglichkeit sich im Backend eine Seite zu erstellen.
    Ich nenne so eine Seite zur verdeutlichung hier mal "TEST".

    Bei der Erstellung der Seite wird im Root-Verzeichnis ein Ordner mit dem Namen "TEST" erstellt, incl. aller benötigten Dateien und Ordner wie zum Beispiel den benötigten Templateordner, CSS-Ordner usw.

    Weiterhin wird ein Ordner "TEST" im Ordner "images" und "file" erstellt,
    /images/TEST
    /file/TEST.

    Das CMS bietet momentan die bekanntesten Funktionen, wie Gästebuch, Bilder und Dateiupload, Bildergalerie, Kontaktformular, News, Artikel und Kategorien...

    Nun soll der User auch die Möglichkeit haben, sich vollständig ab zu melden und seine Seite zu löschen, wenn er das tut, soll im Root-Verzeichnis der komplette Ordner "TEST" sowie die Ordner "TEST" unter "images" und "file" gelöscht werden.

    Zur Identifizierung des Benutzers und dessen Seite nutze ich Sessions, in der $_SESSION['mandant'] steht "TEST".
    Ich habe mir dazu folgende Klasse geschrieben:
    PHP-Code:
    <?php
    class DELETESITE{
        private 
    $obj_smarty     null;
        private 
    $obj_db         null;
        
        public function 
    __construct($obj_db$obj_smarty)
        {
            
    $this->obj_db         $obj_db;
            
    $this->obj_smarty     $obj_smarty;
        }
        
          public function 
    removeRekursiv($dir)
          { 
            
    $dp opendir($dir); 

            while(
    $file readdir($dp))
            { 
                  
    $name $dir "/" $file;

                  if (
    $file != "." && $file != "..")
                  {
                    if (
    is_dir($name))
                          
    $this->removeRekursiv ($name);
                    else
                          
    unlink($name);
                  }

            } 

            
    closedir($dp);

            
    rmdir($dir); 
          }

          public function 
    deleteSite()
          {
              
    $site         $_SERVER['DOCUMENT_ROOT']."/".$_SESSION['mandant'];
              
    $file         $_SERVER['DOCUMENT_ROOT']."/file/".$_SESSION['mandant'];
              
    $picture     $_SERVER['DOCUMENT_ROOT']."/images/".$_SESSION['mandant'];
              
              
    $this->removeRekursiv($file);
              
    $this->removeRekursiv($picture);
              
    $this->removeRekursiv($site);
              
              
    $sql_site  "DELETE FROM ma_site ";
              
    $sql_site .= "WHERE site_name = '".$_SESSION['mandant']."' ";
              
              
    $sql_imgcat  "DELETE FROM ma_img_cat ";
              
    $sql_imgcat .= "WHERE site = '".$_SESSION['mandant']."' ";
              
              
    $sql_img  "DELETE FROM ma_img ";
              
    $sql_img .= "WHERE site = '".$_SESSION['mandant']."' ";
              
              
    $sql_filecat  "DELETE FROM ma_file_cat ";
              
    $sql_filecat .= "WHERE site = '".$_SESSION['mandant']."' ";
              
              
    $sql_file  "DELETE FROM ma_file ";
              
    $sql_file .= "WHERE site = '".$_SESSION['mandant']."' ";
              
              
    $sql_user  "DELETE FROM user ";
              
    $sql_user .= "WHERE site = '".$_SESSION['mandant']."' ";
              
              
    $this->obj_db->query($sql_site);
              
    $this->obj_db->query($sql_imgcat);
              
    $this->obj_db->query($sql_img);
              
    $this->obj_db->query($sql_filecat);
              
    $this->obj_db->query($sql_file);
              
    $this->obj_db->query($sql_user);
              
              
             
    $user "****";
            
    $pass "****";
            
    $con "****";
            
    $conn_id ftp_connect($con);        
            
    ftp_login($conn_id$user$pass);
            
    ftp_rmdir($conn_id$_SESSION['mandant']);
            
    ftp_close($conn_id);
              
            unset (
    $_SESSION['mandant']);
            unset (
    $_SESSION['Admin']);
            
    $_SESSION['final'] = "<h2>Deine Seite und Deine Daten wurden gelöscht.</h2>";
            
    Header("Location: ".$_SERVER['HTTP_REFERER']);
             
          }
        
          
        public function 
    __destruct()
        {
            
        }
    }
    ?>
    Dieses Löschen macht auf meinem Server jedoch einen Rundumschlag und löscht alles was zu löschen geht, es vergreift sich Quasi auch an den anderen Seiten, löscht deren Inhalt, macht die Ordner "images" und "file" komplett leer und vergreift sich auch an meinem Backend.
    == suboptimal,

    Könnte mir bitte jemand sagen was ich übersehen habe, wie ich es besser oder anders, vor allem richtig machen kann?

    Vielen Dank
    Frank-ae
    Mein Projekt: www.my-matrix.de

  • #2
    Dann ist es wohl Zeit für einen guten alten printf/echo-Debugger
    PHP-Code:
    public function removeRekursiv($dir)
    {
      echo 
    '<fieldset><legend>'htmlentities($dir), '</legend>';
      
    $dp opendir($dir);

      while(
    $file readdir($dp))
      {
        
    $name $dir "/" $file;

        if (
    $file != "." && $file != "..")
        {
          if (
    is_dir($name)) {
            
    $this->removeRekursiv($name);
          }
          else
          {
            echo 
    "unlink($name);<br />\n";
          }
        }

      }

      
    closedir($dp);

      echo 
    "rmdir($dir);<br />\n";
      echo 
    '</fieldset>';

    Kommentar


    • #3
      hach verdammt ... so wie es ausschaut wir an die function removeRekursiv() von der function deleteSite() nichts übergeben, denn $dir ist leer,
      daraus schliesse ich das das script versucht alles ab dem Root zu löschen. Bleibt bei mir grade nur die Frage ... warum übergebe ich nichts, aber darum muss ich mich morgen kümmern, da ich grade von Weihnachtsmarkt komme und Glühwein vieleicht in Maßen aber nicht in Massen gut ist

      V.G.
      Frank -ae

      melde mich morgen noch einmal.
      Mein Projekt: www.my-matrix.de

      Kommentar

      Lädt...
      X