Ich arbeite an einem PHP-Formular, das eine Datei an eine E-Mail anfügt, und versuche, Fälle, in denen die hochgeladene Datei zu groß ist, ordnungsgemäß zu behandeln.
Ich habe erfahren, dass es zwei Einstellungen gibt php.ini
, die sich auf die maximale Größe eines Datei-Uploads auswirken: upload_max_filesize
und post_max_size
.
Wenn die Größe einer Datei überschritten wird upload_max_filesize
, gibt PHP die Größe der Datei als 0 zurück. Ich kann das überprüfen.
Wenn es jedoch überschritten wird post_max_size
, schlägt mein Skript stillschweigend fehl und kehrt zum leeren Formular zurück.
Gibt es eine Möglichkeit, diesen Fehler abzufangen?
Antworten:
Aus der Dokumentation :
Leider sieht es nicht so aus, als würde PHP einen Fehler senden. Und da es ein leeres $ _POST-Array sendet, kehrt Ihr Skript zum leeren Formular zurück - es glaubt nicht, dass es sich um einen POST handelt. (IMHO eine ziemlich schlechte Designentscheidung)
Dieser Kommentator hat auch eine interessante Idee.
quelle
Es gibt eine Möglichkeit, Dateien zu fangen / zu verarbeiten, die die maximale Postgröße überschreiten. Dies ist meine bevorzugte Methode, da sie dem Endbenutzer mitteilt, was passiert ist und wer schuld ist.
quelle
$_SERVER['CONTENT_LENGTH']
undupload_max_filesize
unter Berücksichtigung verbessert werden .Wir haben das Problem bei SOAP-Anforderungen, bei denen eine Überprüfung der Leere von $ _POST und $ _FILES nicht funktioniert, da sie auch bei gültigen Anforderungen leer sind.
Deshalb haben wir eine Prüfung durchgeführt, bei der CONTENT_LENGTH und post_max_size verglichen wurden. Die ausgelöste Ausnahme wird später von unserem registrierten Ausnahmebehandler in einen XML-SOAP-FAULT umgewandelt.
quelle
Aufbauend auf den Antworten von @Matt McCormick und @ AbdullahAJM finden Sie hier einen PHP-Testfall, in dem überprüft wird, ob die im Test verwendeten Variablen festgelegt sind und ob $ _SERVER ['CONTENT_LENGTH'] die Einstellung php_max_filesize überschreitet:
quelle
Dies ist eine einfache Möglichkeit, dieses Problem zu beheben:
Rufen Sie einfach "checkPostSizeExceeded" am Anfang Ihres Codes auf
Denken Sie daran, diese Zusatzfunktion zu kopieren:
quelle