upload_max_filesize stimmt nicht
Frank
- php
0 Denise0 Sven Rautenberg2 dedlfix
0 Sven Rautenberg0 Tom
0 Frank
1 Tom0 Tom
Hallo zusammen,
ich habe ein Upload-Script zum Upload von Bildern geschrieben. Bei den meisten Bildern klappt auch alles wunderbar.
Manche Bilder werden aber nicht hochgeladen:
$_FILES['imagefile']['error']=int(2)
Das bedeutet (soweit ich das verstehe) das die Datei zu groß ist (siehe: http://de3.php.net/manual/de/features.file-upload.errors.php )
in der php.ini stehen folgende Werte:
post_max_size=8M
upload_max_filesize=2M
Die Datei selber ist aber nur 419kb groß.
Woran kann das liegen?
Viele Grüße
Frank
Hi,
Manche Bilder werden aber nicht hochgeladen:
$_FILES['imagefile']['error']=int(2)
Das ist ja nun nicht gerade eine Fehlermeldung.
Das script, was du nutzt, kann man auch nur vermuten.
Aber rate ich mal und dann würde ich sagen, du hast im Formular
so was stehen :
<input type="hidden" name="MAX_FILE_SIZE" value="3000">
und wenn dem so ist solltest du dort die maximale Grösse
auch anpassen. Wie gesagt nur vermutet aufgrund deiner spärlichen Daten.
Gruss
Denise
Moin!
Aber rate ich mal und dann würde ich sagen, du hast im Formular
so was stehen :
<input type="hidden" name="MAX_FILE_SIZE" value="3000">
Welche Relevanz hat dieses Formularfeld denn für Dateiuploads?
- Sven Rautenberg
echo $begrüßung;
<input type="hidden" name="MAX_FILE_SIZE" value="3000">
Welche Relevanz hat dieses Formularfeld denn für Dateiuploads?
Ich nehme an, die im Handbuch beschriebene. Auch der Wert 2 in ['error'] hat laut Handbuch einen Bezug zu diesem ominösen Feld.
echo "$verabschiedung $name";
Moin!
<input type="hidden" name="MAX_FILE_SIZE" value="3000">
Welche Relevanz hat dieses Formularfeld denn für Dateiuploads?Ich nehme an, die im Handbuch beschriebene. Auch der Wert 2 in ['error'] hat laut Handbuch einen Bezug zu diesem ominösen Feld.
Mir käme ehrlich gesagt nie in den Sinn, solch ein Feature zu nutzen.
Entweder will ich nur relative kleine Dateien erlauben - dann muß ich das sowieso auf dem Server prüfen. Oder ich benötige das Upload-Maximum. Aber in keinem Fall will ich dem Benutzer gestatten, selbst das Maximum zu bestimmen.
- Sven Rautenberg
Hello,
Entweder will ich nur relative kleine Dateien erlauben - dann muß ich das sowieso auf dem Server prüfen. Oder ich benötige das Upload-Maximum. Aber in keinem Fall will ich dem Benutzer gestatten, selbst das Maximum zu bestimmen.
Dieses Feature ist doch eigentlich als freundliche Bitte an den Browser gedacht, gar nicht erst Dateien zu senden, die größer sind, als MAX_FILE_SIZE.
Wenn das nicht alle Browser beachten, kann der Server immer noch bremsen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Moin!
Entweder will ich nur relative kleine Dateien erlauben - dann muß ich das sowieso auf dem Server prüfen. Oder ich benötige das Upload-Maximum. Aber in keinem Fall will ich dem Benutzer gestatten, selbst das Maximum zu bestimmen.
Dieses Feature ist doch eigentlich als freundliche Bitte an den Browser gedacht, gar nicht erst Dateien zu senden, die größer sind, als MAX_FILE_SIZE.
Wo steht das denn nun schon wieder? Im HTML-Standard sicher nicht!
Wie in SELFHTML nachzulesen ist, gab es mal (!!!) ein Attribut für die Dateigröße:
<input type="file" maxlength="BYTEZAHL">
Dieses Attribut ist aber im aktuellen HTML-Standard für Dateifelder nicht mehr relevant, sondern wird in der DTD beschrieben als:
maxlength NUMBER #IMPLIED -- max chars for text fields --
Nirgendwo ist außerdem eine Verbindung zwischen einem ziemlich beliebig benannten versteckten Formularfeld namens "MAX_FILE_SIZE" und einem Dateiuploadfeld geknüpft. Denn vollkommen ungeklärt bleibt ja, was gelten soll, wenn mehr als ein Dateiuploadfeld existiert, bzw. wie die Zuordnung gelten soll, wenn beide Feldtypen mehrfach vorkommen.
Allein schon deshalb ist dieses "Feature", welches sich ausschließlich im Bereich von PHP abspielt, als sehr fragwürdig einzustufen.
Fakt ist: Es gibt in derzeit existierenden Browsern keine Methode, dem Benutzer bei der Dateiauswahl eines normalen Uploadformularfeldes Größeneinschränkungen aufzuerlegen und einen u.U. sinnlosen Uploadvorgang zu verhindern.
Wenn das nicht alle Browser beachten, kann der Server immer noch bremsen.
Das ist ja eben der Punkt: Kein einziger Browser kümmert sich drum - kann sich nicht drum kümmern, weil das Hidden-Feld in keinerlei logischem Zusammenhang mit dem Uploadfeld steht.
- Sven Rautenberg
Moin!
Dieses Feature ist doch eigentlich als freundliche Bitte an den Browser gedacht, gar nicht erst Dateien zu senden, die größer sind, als MAX_FILE_SIZE.
Wo steht das denn nun schon wieder? Im HTML-Standard sicher nicht!
Ich hab das Thema noch etwas weiter recherchiert.
Es gibt dazu einen PHP-Bug, der die Dokumentation berichtigen will: http://bugs.php.net/bug.php?id=40387
Wie dort nachzulesen ist, hält der Bugmelder das Feature des "Browser lädt größere Dateien nicht hoch" für reine Phantasie der PHP-Programmierer. Die RFC 1867 bezieht sich ausschließlich auf das _Attribut_ "maxsize" innerhalb des File-Inputs, welches als Dateimaximum herangezogen werden _könnte_ (aber trotzdem von keinem Browser implementiert wird).
Und entsprechend wurde die Dokumentation zumindest in der englischen Version "leicht angepaßt". Was dummerweise noch nicht ausreichend sein dürfte, denn der Bugmeldung ist zu entnehmen, dass diese Idee sich aus der PHP-Dokumentation heraus selbständig gemacht hat und jetzt als eine Art Hoax sein Unwesen treibt.
Ich habe der Doku an den zwei relevanten Stellen mal einen Kommentar hinzugefügt, der sicher demnächst dort erscheinen wird.
- Sven Rautenberg
Moin!
Ich hab das Thema noch etwas weiter recherchiert.
Je tiefer man gräbt, desto ... weia!
Anscheinend ist dieses doch eher als merkwürdig einzustufende Verhalten von PHP schon "seit immer" implementiert gewesen. Der Sourcecode im CVS zeigt jedenfalls schon seit Versionsnummer 1.3 der Datei main/rfc1867.c diese einfältige Abfrage nach dem speziellen Formularfeld "max_file_size" - was immerhin schon in einer der frühen PHP-3-Versionen war.
http://cvs.php.net/viewvc.cgi/php-src/main/rfc1867.c?revision=1.3&view=markup
Und auch die schriftliche Dokumentation zu diesem Feature spricht seit Anbeginn ihrer Existenz von diesem Feature.
Im Juli 2001 wird die Aussage über die angebliche Unterstützung durch nichtgenannte Browser hinzugefügt:
http://cvs.php.net/viewvc.cgi/phpdoc/en/features/file-upload.xml?hideattic=0&r1=1.18&r2=1.19
Im Jahre 2003 entsteht dann die Legende von der ominösen Warnmeldung vor dem Upload:
http://cvs.php.net/viewvc.cgi/phpdoc/en/features/file-upload.xml?hideattic=0&r1=1.55&r2=1.56
Im April 2004 wird der Absatz "ein wenig aufgeräumt" und "klarer formuliert":
http://cvs.php.net/viewvc.cgi/phpdoc/en/features/file-upload.xml?hideattic=0&r1=1.71&r2=1.73
Im Oktober 2004 wird der Text nochmals "klarer" formuliert - im Laufe der Zeit wurde aus dem anfangs harmlosen Textstückchen über einen kleinen, zusätzlichen und für manche auch unerwarteten Check harte Wahrheit über Browser und Dateiupload-Formulare:
http://cvs.php.net/viewvc.cgi/phpdoc/en/features/file-upload.xml?hideattic=0&r1=1.79&r2=1.80
Und erst im März 2007 wird die erste Korrektur zurück in die richtige Richtung unternommen:
http://cvs.php.net/viewvc.cgi/phpdoc/en/features/file-upload.xml?hideattic=0&r1=1.89&r2=1.90
Trotzdem ist in der Doku halt immer noch zu lesen:
"This form element should always be used as it
saves users the trouble of waiting for a big file being transferred only
to find that it was too big and the transfer failed."
Sehr spannend, wie sich Dinge so entwickeln.
- Sven Rautenberg
Hello,
Ich hab das Thema noch etwas weiter recherchiert.
Fein!
Da kann man mal sehen, was sich so alles festsetzt im Kopf.
Das habe ich dann bestimmt auch aus irgend einem meiner ersten PHP- oder HTML-Schwarten...
Da werde ich dann auch gleich mal den Rotstift zücken.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
<input type="hidden" name="MAX_FILE_SIZE" value="3000">
Hallo,
manchmal ist man doch echt Betriebsblind und sieht den Wald vor lauter Bäumen nicht.
Natürlich habe ich das im Formular stehen. Und natürlich war die Zahl dort zu klein eingestellt.
Vielen Dank für Euren Denkanstoss. Jetzt funktionierts.
Viele Grüße
Frank
<input type="hidden" name="MAX_FILE_SIZE" value="3000">
Natürlich habe ich das im Formular stehen. Und natürlich war die Zahl dort zu klein eingestellt.
Vielen Dank für Euren Denkanstoss. Jetzt funktionierts.
Gern geschehen ;-)
Hatte schon gar nicht mehr mit einer Rückmeldung gerechnet und
war doch so neugierig, woran es denn nun lag.
Denise
Hello,
in der php.ini stehen folgende Werte:
post_max_size=8M
upload_max_filesize=2MDie Datei selber ist aber nur 419kb groß.
Woran kann das liegen?
Daran, dass der Server eine eigene Beschränkung eingetragen hat. Die liegt bei typischen out-of-the-Box-Installationen bei 500kBytes. Da Dein File für den Upload in base64 codiert wird, ist er an der Transferschnittstelle (die das überwacht) ca. 1/4 größer, also 524 kBytes, was eindeutig mehr als 500kBytes sind.
Schau in die Konfiguration des Webservers für PHP. Meistens steht es nicht direkt in der php.ini, sondern in einem ausgelagerten File.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
kleine Ergänzug noch
Auszug aus meiner
/etc/httpd/conf.d/php.conf
LoadModule php4_module modules/libphp4.so
<Files ~ ".(php|php3|phtml)$">
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 16000000
</Files>
DirectoryIndex index.php index.php3
Dieser Server nimmt nun 16.000.000 Bytes pro Upload an.
In den Verzeichnis-Direktiven für den jeweiligen Virtual Host wird dann geregelt, wie weit PHP mitzieht. Nicht jede Domain kann also mit 16.000.000 Bytes beliefert werden.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom