• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage für: phpUploadScript (Schreibrechte (777))

Nikas3D

Neues Mitglied
Hallo, ich hoffe auf Hilfe bwz. eines UploadScriptes!

Ich erhalte folgende Fehlermeldung
Warning: filesize() [function.filesize]: stat failed for uploads/merrycristmas.flv in /homepages/21/d382517793/htdocs/blog/includes/vionlink_upload.php on line 354
Beim Upload ist ein Fehler aufgetreten.
In Zeile 354 steht:
PHP:
 if(!is_dir($path))return filesize($path);
Im Zusammenhang steht diese Zeile mit:
PHP:
function get_size($path)
   {
       if(!is_dir($path))return filesize($path);
       $dir = opendir($path);
       while($file = readdir($dir))
       {
           if(is_file($path."/".$file))$size+=filesize($path."/".$file);
           if(is_dir($path."/".$file) && $file!="." && $file !="..")$size +=get_size($path."/".$file);
       }
       return $size;
   }

Laut anderen Foren erscheint diese Fehlermeldung wenn der da wo die uploads reinkommen, nicht volle Schreibrechte hat also 777.
Der Ordner besitzt jedoch alle Rechte!!!

Kann mir jemand helfen! Wo liegt der Fehler?
 
Werbung:
ich kenn mich zwar mit chmod nicht so gut aus, aber ich glaube, du musst auch den chmod deiner dateien auf 777 setzen
 
Das ist kein Fehler, das ist eine Warnmitteilung, dass die Dateigrösse der Datei merrychristmas.flv nicht ausgelesen werden kann.
Die Datei hat einen Fehler.
Ursache kann sein, dass beim Hochladen derselbigen aufgrund von Übergrösse der Upload unterbrochen wurde oder ein Timeout das Script beendet hat.
 
Werbung:
Um den Fehler zu vermeiden, kannst du ein @ vor filsize setzen (@filesize($path)) dann wird zwar die Grösse NICHT ausgelesen, aber es kommt kein Fehler mehr.
 
Noch mal! Das ist kein Fehler. Ein Fehler wäre ein Error. In PHP gibt es Notices, Warnings und Errors, bitte beachten.
 
Um die Anzeige zu vermeiden, kannst du ein @ vor filsize setzen (@filesize($path)) dann wird zwar die Grösse NICHT ausgelesen, aber es kommt kein Fehler mehr.
 
Werbung:
Mir ist schon klar was du erreichen willst und das wenn man ein @-Zeichen vor einem Funktionsaufruf voranstellt, die Ausgabe von Warn- und Fehlermeldungen unterdrückt wird. Was du aber ignorierst ist, dass es sich hier nicht um einen Fehler sondern um eine Warnmeldung handelt. Der Unterschied liegt darin, dass bei einem Fehler das PHP-Script abbricht, während bei einer Warnmeldung das Script weiter ausgeführt wird, unabhängig davon ob eine Ausgabe erfolgt oder nicht. Hoffe das es jetzt etwas klarer ist.
 
Ich rege mich doch garnicht auf, was du sagst ist ja weitestgehend richtig, allerdings hilft das den Themenersteller wenig, dass wir zwei über warning oder notice diskutieren (zumal es nichts zu diskutieren gibt, du hast recht !!!)

Entweder der Themenersteller prüft auf die Datei (was übrigens normalerweise mit einem move_uploaded_file() beim Uploadscript nicht mal nötig sein sollte) oder er unterbindet die Ausgabe der Meldung.
Er könnte auch seine php.ini dahin konfigurieren, dass garnichts mehr ausgegeben wird, dann sieht er aber Fehler auch nicht mehr.

Warnings sind übrigens auch Fehler, (non-fatal errors), die nur nicht zum Scriptabbruch führen.
 
Na ja, ich würde bei der Bewertung ob „Fehler“ oder nicht mehr darauf schauen, worauf eine entsprechende PHP-Ausgabe im Rahmen der Anwendung hindeutet. Hier zeigt die Nachricht vermutlich an, dass die auszulesende Datei nicht existiert. Wenn die Anwendung aber von der Existenz ausgeht, handelt es sich schon in gewisser Weise um einen Fehler. Der führt zwar hier nicht unmittelbar zum Scriptabbruch. Aber vermutlich ergeben nachfolgende Operationen ab der Stelle keinen Sinn mehr. Das ist dann kein „harter“ Fehler wie etwa ein Syntaxfehler, aber dennoch eine Begebenheit, die die Anwendung in einen „undefinierten“ oder unerwarteten Zustand versetzt. Vielleicht einigen wir uns auf: Es ist wahrscheinlich ein Bug.

Ich bekenne mich schuldig, die Tastenkombination auch schon gedrückt zu haben, aber ein @ zur Unterdrückung einer Fehlerausgabe ist trotzdem ein No-go, wenn wir über „sauberen“ Stil reden. Es sollten immer die Ursachen behoben werden. In diesem Fall wäre das wohl das Ausformulieren einer Prüfung auf file_exists. filesize dafür zu „missbrauchen“, erscheint mir verkehrt.

Ob das innerhalb der Funktion getan wird oder vor dem Aufruf, ist dann noch mal eine ganz andere – aber sehr interessante – Frage. Da kommt man dann aber schnell in Bereiche von Fragen wie: „Was passiert, wenn ich die Datei zu dem Zeitpunkt lösche, der zwischen dem Aufruf von file_exists und filesize liegt?“ Das ist eine Variation von: „Was passiert, wenn genau dann und dann der Strom ausfällt?“ – Bei sowas wird man paranoid und bekloppt. (Siehe dazu auch meinen Post zum Thema „Fehlerbehandlung“ neulich: http://www.html.de/php/41468-fehlerbehandlung.html#post299454.)

Gerade vor dem Hintergrund ist es aber nicht ganz illegitim, die Fehlermeldungen zu unterdrücken, denn es ist im Code sonst wohl nicht möglich, zu verhindern, dass unter gewissen – meinetwegen sehr unrealistischen – Umständen eine Notice bei etwa filesize geworfen wird – nämlich dann, wenn die Datei in dem „CPU-Takt“ zwischen file_exists und filesize gelöscht wird. (Wobei ich nicht genug Ahnung habe, um sagen zu können, ob und wie realistisch das Problem selbst in dem unrealistischen Fall ist, dass die Datei überhaupt gelöscht wird.)

Ein Stichwort dazu wäre jedenfalls:

- PHP: set_error_handler - Manual

E_NOTICE wird im Handbuch übrigens auch zu den „error level constants“ gezählt. Es ist letztlich Haarspalt… Definitionssache, ob man die Dinger als Fehler bezeichnet oder nicht.

Pauschalaussagen sind schwierig, aber: In der PHP-Welt ist es heutzutage Standard, „E_STRICT-kompatiblen“ Code zu schreiben. Das bedeutet: Notices sind erst mal als Bugs anzusehen. Es ist nicht beabsichtigt, dass der Code welche auslöst.

Ob ein solcher „Bug“ dabei zwangsläufig seinen Ursprung im PHP-Code haben muss oder in irgendeiner sonstigen Serverkonfiguration, ist dann auch mehr oder weniger Definitionssache… Ist es die Verantwortung eines Scripts, zu prüfen, ob etwa ImageMagick auf einem Server installiert ist? Für mich ist das ganz schwer zu beantworten.
 
Zuletzt bearbeitet:
Werbung:
Wenn man sich den Code so ansieht liegt da eher in der Scriptdatei irgendwas im argen.
Vermutung:
Es wird ein Upload gestartet, der aus irgend einem Grund misslingt und das Script berücksichtigt diesen Umstand nicht, arbeitet weiter und versucht die Dateigrösse zu ermitteln. move_uploaded_file() sollte ein FALSE zurückliefern, wenn der Upload abbricht. ein:

PHP:
if(move_uploaded_file($_FILES['file']['tmp_name'], $path.$interner_name)) $size = filesize($path.$interner_name);
könnte das Problem ja vielleicht schon beheben.

Ich bin auch kein Freund davon, Meldungen zu unterdrücken, in diesem Fall scheint es mir aber logisch, da es ja so aussieht als sei beim Upload alles schief gegangen und das Script überprüft den Erfolg erst garnicht.

Entweder man verwendet ein "ordentliches" Script, das solche Eventualitäten berücksichtigt oder man blendet Meldungen einfach aus und bemerkt den Fehlschlag erst dann, wenn die Datei nicht da ist.
Heftig wird das Ganze dann, wenn nach dem misslungenen Upload ein Eintrag in eine Datenbank/Datei vorgenommen wird.


Einer Diskussion, was man als Fehler, Warnung oder Hinweis betrachtet gebe ich mich in diesem Fall nicht hin, jede Meldung am Bildschiorm, die da nicht hin gehört ist (für mich) ein Fehler, auch wenn das Script weiter arbeitet. Im Sinne von "Das muss da weg!".
Führen wir eine technische Diskussion (wie im verlinkten Thema) dann sieht das anders aus. Wie geht man mit Fehlern, Warnungen und Hinweisen um.
 
Danke, ich habe alle Meldungen bverücksichtigt und habe den Webspace gewechselt, weil ich bei meinem Anbieter upload_max_filsize nicht umstellen konnte!!
jetzt läuft alles prima!

Vielen Dank nochmal alle!
 
Zurück
Oben