tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
21
ZUGRIFFE
467
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Hallo.

    Bevor ich meine Frage stelle, möchte ich erst einmal erklären was ich vor habe.

    Mit einem Generator wird eine Grafik erstellt (Avatar-Grafik). Nach dem generieren, wird die Grafik in einem Verzeichniss (Custom-Avatare) gespeichert. Wenn man das Avatar benutzen möchte, wird es in das Verzeichniss (Avatare) verschoben.

    Wenn man das Avatar benutzt, wird ein Teil der URL in der Datenbank gespeichert.

    Beispiel:
    PHP-Code:
    URL:
    www.meine-seite.de/avatare/avatar-bl5000.png

    Code in der Datenbank
    :
    bl5000 
    Ist es möglich irgendwie zu prüfen ob die Avatare im Verzeichniss "aktiv" sind? Es kommt öfter vor das ein Avatar gar nicht mehr verwendet wird und es trotzdem im Verzeichniss (Avatare) ist. Die Avatare manuell zu löschen ist praktisch unmöglich. Daher suche ich eine Möglichkeit die Avatare per Knopdruck prüfen und löschen zu lassen.
     

  2. #2
    Avatar von Splater
    Splater Splater ist offline Mitglied Brokat
    Registriert seit
    Dec 2008
    Ort
    Machern, Germany
    Beiträge
    306
    Hallo bl5000,
    das ist eigentlich ganz einfach, zurerst schreibst du alle Bilder die es gibt aus der Datenbank in ein Array-> und danach löschst du über eine if-bedingung einfach die .. die in der false Schleife landen
    PHP-Code:
    $sql_pic mysql_query("SELECT userpic FROM table")OR die (mysql_error()); ## Tabelle wählen
        
    while ($pic mysql_fetch_array($sql_pic)){ ## beginne While
            
    if(!empty($pic["userpic"])){  ## Nur Zeilen wo spalte userpic nicht leer ist
            
    $pics[] = $pic["userpic"]; ## schreibe Daten in Array $pics
            
    }
        }
        
        
    $verz opendir ('userpic');  ## Öffne verzeichniss "userpic" ggf. /ordner -> und schriebe in $verz
        
    while ($file readdir ($verz)) {   ## beginne while und lies $verz aus -> Datein.
        
    if(!empty($pics)){ ## ist $pics nicht leer dann ->
            
    if($file != "rl" && $file != "." && $file != ".." && $file != "thumb"){
                 if(!
    in_array($file,$pics)){
                     @
    unlink("userpic/".$file); ## hier dann wird die Löschung vorgenommen.
              
    }
            }
        } 
    Achtung :
    PHP-Code:
    if($file != "rl" && $file != "." && $file != ".." && $file != "thumb"){ 
    Hier ist zu beachten das es noch weitere Ordner geben kann die natürlich nicht geprüft werden sollen also ordner "rl" und natürlich auch nicht die ordner darunter "." -> und auch nicht die Ordner noch weiter dahinter "..".
    So in etwa ist aber ungetestet.
    Mfg Splater
    Geändert von Splater (11.11.10 um 18:37 Uhr)
    Alice bedankt sich. 
    Ohooo, was ist das? Ein Türknopf? Ausgezeichnet!

  3. #3
    Avatar von ComFreek
    ComFreek ComFreek ist gerade online [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.364
    Blog-Einträge
    4
    @Splater:

    Ich habe jetzt deinen Code nur überflogen, aber könnte man nicht schon im MySQL-Query überprüfen, ob das Feld "userpic" leer ist:
    Code sql:
    1
    
    SELECT userpic FROM TABLE WHERE userpic!=''
    Splater und Alice bedanken sich. 
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  4. #4
    Avatar von Splater
    Splater Splater ist offline Mitglied Brokat
    Registriert seit
    Dec 2008
    Ort
    Machern, Germany
    Beiträge
    306
    Hallo Comfreek,
    ja Definitiv kann man das auch tun. Hab ich jetzt nicht so schnell geschaltet Danke für deine Verbesserung.
    mfg splater
    Alice bedankt sich. 
    Ohooo, was ist das? Ein Türknopf? Ausgezeichnet!

  5. #5
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Hallo.

    Erst einmal vielen Dank für die Antworten.

    Leider komme ich gerade mit dem PHP-Code nicht klar.

    Ich habe ihn mal versucht an meine Seite anzupassen aber der PHP-Code ergibt für mich keinen Sinn.

    PHP-Code:
       $avatar "http://www.meine.seite.de/avatare/";

       
    $sql_pic mysql_query("SELECT field5 FROM userfield")OR die (mysql_error());
                  while (
    $pic mysql_fetch_array($sql_pic)) {
                      if(!empty(
    $pic["field5"])) {
                      
    $pics[] = $pic["field5"];
                      }
                  }

       
    $verz   opendir($avatar);
                 while (
    $file readdir ($verz)) {
                     if(!empty(
    $pics)) {
                     if(
    $file != "rl" && $file != "." && $file != ".." && $file != "thumb") {
                     if(!
    in_array($file,$pics)){
                     @
    unlink("userpic/".$file);
                     }
                     }
                     }
                 } 
    Um meine Idee etwas verständlicher zu erklären hier ein Beispiel:

    Datenbank (Tabelle "userfield" Zeile "field2")
    PHP-Code:
    field2 123456
    field2 
    abcdef
    field2 
    aaaaa
    field2 
    010101 
    Verzeichniss (Avatare)
    PHP-Code:
    www.meine-seite.de/avatare/123456.png
    www
    .meine-seite.de/avatare/abcdef.png
    www
    .meine-seite.de/avatare/aaaaa.png
    www
    .meine-seite.de/avatare/010101.png
    www
    .meine-seite.de/avatare/bl5000.png
    www
    .meine-seite.de/avatare/lollol.png 
    Wie man sehen kann sind die letzten beiden Grafiken nicht mehr aktiv. Sprich: Sie werden von keinem User verwendet. Also sollen die gelöscht werden.
     

  6. #6
    Avatar von Splater
    Splater Splater ist offline Mitglied Brokat
    Registriert seit
    Dec 2008
    Ort
    Machern, Germany
    Beiträge
    306
    Hallo, ja, genau das macht der Script an sich.
    PHP-Code:
    <?php
    $avatar 
    "http://www.meine.seite.de/avatare";
    $sql_pic mysql_query("SELECT field5 FROM userfield")OR die (mysql_error());
    while (
    $pic mysql_fetch_array($sql_pic)) {
       if(!empty(
    $pic["field5"])) {
               
    $pics[] = $pic["field5"]; ## Trage alle VORHANDENE Bilder ein.
       
    }
    }
    $verz   opendir($avatar);
        while (
    $file readdir ($verz)) {
           if(!empty(
    $pics)) {
                if(
    $file != "rl" && $file != "." && $file != ".." && $file != "thumb") {
                     if(!
    in_array($file,$pics)){ ## Prüfe hier ob Bild NICHT! in Array ist -> Dann löschen
                         
    @unlink($avatar."/".$file);
                        }
                   }
           }
       }
    Kommt bei dir ein Fehler? wenn ja was. Versuch es mal ohne das @ vor unlink, dann kann man mit der Fehlermeldeung evt. etwas anfangen.

    mfg splater
    Alice bedankt sich. 
    Ohooo, was ist das? Ein Türknopf? Ausgezeichnet!

  7. #7
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Ich teste das PHP-Skript sofort aber ich glaube dann wird auch meine index.html und meine .htaccess-Datei mit gelöscht?
     

  8. #8
    Avatar von Splater
    Splater Splater ist offline Mitglied Brokat
    Registriert seit
    Dec 2008
    Ort
    Machern, Germany
    Beiträge
    306
    Hi,
    befinden die sich im selben Ordner? Mach vorher definitiv ein Backup davon.
    Wenn nicht dann ->
    PHP-Code:
    if($file != "rl" && $file != "." && $file != ".." && $file != "thumb"
    sollte damit schon alles geregelt werden können.. hier trägst du alle Ordner und auch unterordner aus.. also ".." und "." somit ist gewähleistet das nur aus dem Aktuellen Ordner gelöscht wird, bzw auch nicht die Ordner die noch im jetzigen Ordner sind, musst du natürlich noch ergänzen.

    Wenn die im selben Ordner sind, kannst du nach der endung filtern.
    Sprich .php .css etc aus der Suche entfallen. bsp.:
    PHP-Code:
    function getExtension($str) {
            
    $i strrpos($str,".");
            if (!
    $i) { return ""; }
            
    $l strlen($str) - $i;
            
    $ext substr($str,$i+1,$l);
            return 
    $ext;
        }
    $filename stripslashes($file);
    $extension getExtension($filename);
    $extension strtolower($extension);
        if ((
    $extension == ".gif") && ($extension == ".png")){ ## jpg etc.
                ##Löschen
        
    }else{
                          
    ## Fehlermeldung oder soetwas :)
           

    So stell ich mir das dann vor. Bitte Berichtigen wenn ich Falsch liegt

    mfg splater
    Alice bedankt sich. 
    Ohooo, was ist das? Ein Türknopf? Ausgezeichnet!

  9. #9
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Ja sind im selben Ordner.

    PHP-Code:
    if($file != "rl" && $file != "." && $file != ".." && $file != "thumb" && $file != "index" && $file != ".htaccess"
    So?
     

  10. #10
    Avatar von Splater
    Splater Splater ist offline Mitglied Brokat
    Registriert seit
    Dec 2008
    Ort
    Machern, Germany
    Beiträge
    306
    Wenn es wirklich nur die beiden Datein sind, kann man es wohl so machen, dann aber genaue bezeichnung. Also
    PHP-Code:
    if($file != "rl" && $file != "." && $file != ".." && $file != "thumb" && $file != "index.html" && $file != ".htaccess"
    Bin mir nicht sicher ob die .htaccess nun auch wirklich aus der Bedingung ausgeschlossen ist.
    mfg splater
    Alice bedankt sich. 
    Ohooo, was ist das? Ein Türknopf? Ausgezeichnet!

  11. #11
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Es geht nicht aber ich weiss warum.

    Die Avatare haben ja die Präfix "Avatar-XXX.png"

    Das PHP-Skript muss doch wissen das vor dem Code "Avatar-" steht und dahinter ".png" oder? Kannst du mir sagen wo ich das ergänzen muss?
     

  12. #12
    Avatar von Splater
    Splater Splater ist offline Mitglied Brokat
    Registriert seit
    Dec 2008
    Ort
    Machern, Germany
    Beiträge
    306
    Ist es generell "Avatar-$variable.png"?
    Dann kannst du das im unlink festlegen, bzw schon in der Variable.
    PHP-Code:
    @unlink($avatar."/Avatar-".$file.".png"); 
    mfg splater
    Alice bedankt sich. 
    Ohooo, was ist das? Ein Türknopf? Ausgezeichnet!

  13. #13
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Geht leider nicht.

    Warnung: opendir(http://www.meine-seite.de/avatare) [function.opendir]: failed to open dir: not implemented in [path]/admin/deleteavatare.php (Zeile 50)

    Warnung: readdir(): supplied argument is not a valid Directory resource in [path]/admin/deleteavatare.php (Zeile 51)
     

  14. #14
    Avatar von Splater
    Splater Splater ist offline Mitglied Brokat
    Registriert seit
    Dec 2008
    Ort
    Machern, Germany
    Beiträge
    306
    opendir funktioniert aber nur auf lokalen Verzeichnissen oder FTP-Verzeichnissen.Also Lokal kannst du jetzt nicht mit "http:" Arbeiten.
    mfg splater
    Alice bedankt sich. 
    Ohooo, was ist das? Ein Türknopf? Ausgezeichnet!

  15. #15
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Aber ich habe das Skript auf mein Webspace hochgeladen.
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 01.09.09, 21:54
  2. Automatisch löschen mit PS 3?
    Von Alex363 im Forum Photoshop
    Antworten: 4
    Letzter Beitrag: 17.02.09, 15:55
  3. Antworten: 3
    Letzter Beitrag: 14.05.06, 13:39
  4. Automatisch löschen
    Von PsychoGiga im Forum PHP
    Antworten: 20
    Letzter Beitrag: 02.11.04, 22:24
  5. Antworten: 3
    Letzter Beitrag: 04.09.04, 01:26