Ankündigung

Einklappen
Keine Ankündigung bisher.

Datei mit 0kb suchen und löschen

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

  • Datei mit 0kb suchen und löschen

    Hallo,

    ich habe folgendes Problem und wollte fragen ob es dafür eine PHP-Lösung gibt:

    Auf meinen Webspace wird alle 5 Minuten ein Webcambild hochgeladen.
    Aus den Webcambildern eines ganzen Tages wird dann eine Diashow generiert.
    Nun kommt es vor, dass ein bis zwei Bilder irgendwie nicht richtig hochgeladen wurden und somit diese Einzelbilder 0kb haben und in der Diashow dann als schwarzes Bild auftauchen.

    Gibt es mit PHP eventuell die Möglichkeit, meinen Ordner in dem die ganzen Bilder abgelegt sind, nach den Bildern zu durchsuchen, die 0kb haben und diese dann automatisch zu löschen?

    Ich habe die Funktion "unlink()" gefunden, doch mit der kann ich den Ordner ja nur nach bestimmten Dateien durchsuchen und dann löschen, doch gibt es analog hierfür auch eine Funktion mit der ich den Ordner nach der Größe der einzelnen Datei durchsuchen kann und dann löschen (in meinem Fall 0kb)?

    Vielen Dank für die Infos.
    Gruß Frank


  • #2
    http://php.net/manual/de/function.scandir.php

    http://php.net/manual/de/function.filesize.php

    http://php.net/manual/de/function.unlink.php

    Damit müsste es zu machen sein.

    Kommentar


    • #3
      unlink - deletes a files
      Durchsuchen tut unlink nichts.

      Du musst schon die Dateien, in diesem Fall Bilder, alle durchgehen, mit glob zum Beispiel und die Grösse mit filesize ermitteln und danach diejenigen raussuchen die Null bytes haben und diese dann löschen.

      Kommentar


      • #4
        Oder mit dem DirectoryIterator: https://php-de.github.io/jumpto/verzeichnis-auslesen/
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Hallo,

          danke für die Hilfe.

          Könnt ihr abschätzen wie die Laufzeit des Scriptes ist, wenn dieses rund 300 Einzelbilddateien durchsuchen muss?
          Sind diese 300 zu durchsuchende Dateien zu viel, d.h. würde das Script dann sehr lange laufen?

          Sorry, habe leider keine Ahnung, wie lange so ein Script für diese Aufgabe benötigt.

          Gruß Frank

          Kommentar


          • #6
            Millisekunden.

            Kommentar


            • #7
              Wenn's ein Linux-Server ist, kann man auch einfach find verwenden:

              Code:
              find /path/to/files -size 0 -delete
              Das kannst du auch von php aus mit exec aufrufen oder von einem cronjob machen lassen.

              Grüße.

              Kommentar


              • #8
                Hallo,

                mir kam gerade noch eine andere, viel einfachere Idee, könnt ihr mal schauen, ob ich das so machen kann:

                Das Webcambild wird alle 5 Minuten hochgeladen, per PHP-Script (gestartet über cronjob) verarbeitet und in die Variablen $NewFileName geschrieben.
                Ich bräuchte doch jetzt nur das bestehende PHP-Script um diesen Schnipsel erweitern, so dass bei jedem Durchlauf des Scriptes, das neue Bild, welches bei jedem Durchlauf neu in die Variable $NewFileName geschrieben wird, auf die Dateigröße zu überprüfen:

                PHP-Code:
                if (filesize($NewFileName) == '0')
                {
                unlink($NewFileName);

                Kommentar


                • #9
                  Zitat von php1704 Beitrag anzeigen
                  Wenn's ein Linux-Server ist, kann man auch einfach find verwenden:

                  Code:
                  find /path/to/files -size 0 -delete
                  Delete kannte ich gar nicht, hab das immer mirt exec lösen müssen...


                  Kommentar


                  • #10
                    könnt ihr mal schauen, ob ich das so machen kann
                    Kannst du das nicht vorher einfach mal ausprobieren?
                    You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

                    Kommentar


                    • #11
                      mit "könnt ihr mal schauen", ging es mir mehr darum, ob ich den Code richtig geschrieben habe, ob er dann in meinen Script so funktioniert, muss ich dann natürlich selber ausprobieren.

                      Mir ist z.B. noch unklar, wann muss ich die Zahl in der if/else-Bedingung in '' oder in "" schreiben muss oder wann kann ich die Zahl ohne diese Zeichen hinter das Gleichzeichen setzen.
                      Habe sie jetzt mal in '' gesetzt, denke aber, es funktioniert auch ohne diese Hochkommas.

                      Außerdem habe ich noch nicht ganz verstanden, ob ich bei einer if/else-Bedingung, bei der jedoch nur die if-Bedingung (siehe meinen obigen Code) relevant ist, einfach das else weglassen kann oder muss ich zur Vollständigkeit ein "leeres" else{}, d.h. mit einer leeren Klammer, abschließend anfügen?

                      Kommentar


                      • #12
                        Du kannst dir das ja auch einfach mal wegloggen, in eine Datei, oder als Ausgabe auf den Bildschirm, welche Datei dann gelöscht wird, ohne die Aktion durchzuführen.

                        Zu Anführungszeichen gibt's ein Manual: http://php.net/manual/de/language.types.string.php
                        You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

                        Kommentar


                        • #13
                          Zitat von Wetterfrosch Beitrag anzeigen
                          Mir ist z.B. noch unklar, wann muss ich die Zahl in der if/else-Bedingung in '' oder in "" schreiben muss oder wann kann ich die Zahl ohne diese Zeichen hinter das Gleichzeichen setzen.
                          Wie wäre es denn mal mit nachdenken!?
                          Aus der Doku:
                          int filesize ( string $filename )
                          Da steht int, also eine Zahl! Und ist "0" eine Zahl? Oder ist '0' eine Zahl? Oder ist 0 eine Zahl? Wenn man damit schon Probleme hat, sollte man sich dringends mit den Grundlagen beschäftigen und sich mit den Variablen-Typen auskennen!

                          Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                          Kommentar


                          • #14
                            Mit Anführungszeichen bedeutet String, ohne bedeutet Zahl. PHP nimmt es da nicht so genau und erkennt normalerweise bei einem normalen Vergleich beides. Du kannst aber auch explizit vergleichen (===), dann überprüft PHP nicht nur den Wert sondern auch den Typ.

                            Das PHP-Handbuch sagt dir bei jeder Funktion was der Rückgabewert für einen Typ hat. Bei filesize ist dies entweder eine Zahl oder FALSE im Fehlerfall. Also wäre ohne Anführungszeichen korrekt.

                            http://ch1.php.net/manual/de/function.filesize.php

                            Kommentar


                            • #15
                              Zitat von Wetterfrosch Beitrag anzeigen
                              Außerdem habe ich noch nicht ganz verstanden, ob ich bei einer if/else-Bedingung, bei der jedoch nur die if-Bedingung (siehe meinen obigen Code) relevant ist, einfach das else weglassen kann oder muss ich zur Vollständigkeit ein "leeres" else{}, d.h. mit einer leeren Klammer, abschließend anfügen?
                              Steht auch im Handbuch.

                              Kommentar

                              Lädt...
                              X