Ankündigung

Einklappen
Keine Ankündigung bisher.

Nur .jpg dateien löschen

Einklappen

Neue Werbung 2019

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

  • Nur .jpg dateien löschen

    Mein Code sieht zurzeit so aus

    PHP-Code:
    <?php  $verzeichnis opendir ("bilder"); 
    while (
    $file readdir ($verzeichnis)) 
    { if (
    $file != "." && $file != ".."
    unlink ("bilder/$file"); } 

    closedir ($verzeichnis); ?>
    wie überprüf ich nun das er nur .jpg datein löschen darf?


  • #2
    Schau dir doch bitte mal die Funktion glob() an
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      thanks!

      Kommentar


      • #4
        PHP-Code:
        <?php  
        $verzeichnis 
        opendir ("."); 
                while (
        $file readdir ($verzeichnis)) 
            { 
                if (
        $file != "." && $file != ".."
            { 
             if(
        strstr("jpg"$file)){
                
        unlink ("./$file"); } 
                }
            } 
        closedir ($verzeichnis); 
        ?>
        Sieht jetzt so aus!
        Löschen tut er aber irgendwie nichts!
        Fehlermeldung gibt es auch keine!
        Die Datein (Bilddateien) befinden sich im gleichen Verzeichnis wie die .php Datei zum löschen!

        Kommentar


        • #5
          Zitat von Sp1n Beitrag anzeigen
          PHP-Code:
          <?php  
          $verzeichnis 
          opendir ("."); 
                  while (
          $file readdir ($verzeichnis)) 
              { 
                  if (
          $file != "." && $file != ".."
              { 
               if(
          strstr("jpg"$file)){
                  
          unlink ("./$file"); } 
                  }
              } 
          closedir ($verzeichnis); 
          ?>
          Sieht jetzt so aus!
          Löschen tut er aber irgendwie nichts!
          Fehlermeldung gibt es auch keine!
          Die Datein (Bilddateien) befinden sich im gleichen Verzeichnis wie die .php Datei zum löschen!

          PHP-Code:
          error_reporting(-1);
          ini_set('display_errors',1); 
          an den Anfang des Scripts.

          Kleiner Tipp vorweg: Zähl mal die geschweiften Klammern.. wieviele öffnen sich, wieviele schliessen sich... und wenn du damit auf den ersten Blick Probleme hast, rück den Code ordentlich ein! Das sieht grausig aus.

          Immer noch der Hinweis auf glob() - hast danke gesagt, aber nicht gelesen oder?
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            bekomm keine Ausgabe

            PHP-Code:
            <?php  
            error_reporting
            (-1);
            ini_set('display_errors',1); 
            $verzeichnis opendir ("."); 
                    while (
            $file readdir ($verzeichnis)) 
                { 
                    if (
            $file != "." && $file != ".."
                { 
                 if(
            strstr("jpg"$file)){
                    
            unlink ("./$file"); } 
                    }
                } 
            closedir ($verzeichnis); 
            ?>
            Klammern passen
            3 auf, 3 zu

            Kommentar


            • #7
              Oh, hast recht... ich hab selber ne Klammer übersehen, wen wunderts bei der Einrückung...

              Dann lass dir mal alle Dateinamen ausgeben, vielleicht ist ja wirklich kein jpg dabei?
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                doch hab extra 7 .jpg's raufgespielt

                Kommentar


                • #9
                  Zitat von Sp1n Beitrag anzeigen
                  PHP-Code:
                       if(strstr("jpg"$file)){ 


                  string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )
                  grad erst gesehen
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    so jetzt löscht er mir alle datein! egal ob .php oder .jpg

                    Kommentar


                    • #11
                      Na sowas! Und wieso?
                      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                      Kommentar


                      • #12
                        strstr mit "jpg" als needle würde jedoch auch bei einer datei namens delete_jpg_files.php oder jpg_ist_doof.png als true interpretiert werden, bei einer datei mit dem namen Bild.Jpg allerdings dafür false liefern....

                        Kommentar


                        • #13
                          PHP-Code:
                          foreach (glob("*.jpg") as $wechdamit) {
                              
                          unlink $wechdamit;

                          PHP-Code:
                          if ($var != 0) {
                            
                          $var 0;

                          Kommentar


                          • #14
                            Sehen wir einmal davon ab, dass die Dateiendung lediglich ein Namensbestandteil ist, und nichts über den Inhalt der Datei aussagt. JPEG-Dateien werden damit nur zufällig erfasst, wenn sie auch die "richtige" Endung am Dateiname haben.

                            Zitat von Wolla Beitrag anzeigen
                            PHP-Code:
                            foreach (glob("*.jpg") as $wechdamit) {
                                
                            unlink $wechdamit;

                            Wenn die Kenntnisse übers Globbing ausbaufähig sind und die PHP-Dokumentation sich (wieder einmal) über die Details ausschweigt, sollte man besser die Finger davon lassen.

                            '*.jpg' angewandt auf ein Verzeichnis mit folgenden Dateinamen verdeutlicht das Problem:

                            Code:
                            // "dir.jpg" ist hier ein Verzeichnis (keine Datei)
                            
                            "4-letter-ext.jpeg" .. wird ignoriert
                            "dir.jpg" ............ wird erkannt
                            "longer-ext.jpgxyz" .. wird ignoriert
                            "more-dots.jpg.txt" .. wird ignoriert
                            "simple.jpg" ......... wird erkannt
                            Setzt man jetzt unlink() auf die erkannten zwei Einträge an, gibts für "dir.jpg" eine verwirrende Warnmeldung mit dem Inhalt "Warning: unlink(dir.jpg) [function.unlink]: Permission denied in ...".

                            Hier mal ein Vorschlag, der funktioniert:

                            PHP-Code:
                            /// loescht Dateien, die einem Filtermuster entsprechen
                            /// return: Anzahl der geloeschten Dateien | FALSE
                            function dir_filtered_unlink(
                                
                            $path,   /// Verzeichnispfad
                                
                            $filter '//'/// PCRE fuers filtern
                                
                            $invert FALSE /// filter invertieren wie bei preg_grep()
                            ) {
                                if (!
                            chdir($path)) {
                                    return 
                            FALSE// falscher pfad
                                
                            }
                                
                            $filtered preg_grep($filterscandir('.'), (bool) $invert);
                                if (!
                            is_array($filtered)) {
                                    return 
                            FALSE// scandir() oder preg_grep() fehlgeschlagen
                                
                            }
                                
                            $count 0;
                                foreach (
                            $filtered as $entry) {
                                    if (
                            is_file($entry)) {
                                        
                            //printf('$entry: %s <br />', $entry);
                                        //++$count;

                                        
                            if (unlink($entry)) {
                                            ++
                            $count;
                                        }
                                    }
                                }
                                return 
                            $count;
                            }

                            // Und so loescht man damit 
                            // Dateien mit den Endungen .jpg und .jpeg
                            // im aktuellen Verzeichnis '.':
                            $deleted dir_filtered_unlink('.''/\.jpe?g\z/'); 
                            scandir()

                            preg_grep()

                            is_file()

                            Kommentiert man die 3 Zeilen um unlink() aus und entfernt die Kommentare vor den 2 Zeilen mit printf() lässt sich die Funktion testen, ohne das wichtige Dat(ei)en in Gefahr gebracht werden. Beim Hantieren mit Datei-Löschbefehlen sollte man das immer machen, bevor man das Meisterwerk der Programmierkunst auf echte Daten loslässt.

                            Wem reguläre Ausdrücke zu kompliziert sind, der kann auch die Funktion pathinfo() bemühen, die einen Dateipfad in die entsprechenden Teile zerlegt. Deren Einbau sollte nicht allzu schwierig sein.

                            Das anfangs erwähnte Problem lässt sich übrigens mit der Hilfe von
                            getimagesize()
                            sauber lösen.

                            Und noch etwas: Unter Windows-Betriebssystem erfassen die Pfad- und Verzeichnisfunktionen von PHP (und zwar alle) keine Einträge, die Unicode-Zeichen enthalten, die es aber nicht auf der gerade eingestellten Codepage gibt. Dagegen gibt es leider nur die Abhilfe, eine Scriptsprache zu verwenden, die damit umgehen kann.
                            Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

                            Kommentar

                            Lädt...
                            X