
Thunfisch
Dies ist mein Upload-Formular:
<form action="uploads.php" method="post" enctype="multipart/form-data">
<input name="fileupload" type="file" multiple>
<button>Upload</button>
</form>
Meine maximalen Upload-Größen sind wie folgt festgelegt:
; Maximum allowed size for uploaded files.
upload_max_filesize = 5M
; Must be greater than or equal to upload_max_filesize
post_max_size = 5M
Wenn ich eine Datei hochlade, die größer als 5M ist var_dump($_FILES)
ist leer. Ich kann das machen:
if($_FILES){
echo "Upload done!";
}
$_FILES
wird nicht gesetzt, wenn die Datei größer als 5 MB ist. Aber das ist ein bisschen seltsam. Wie würdest du das machen?
BEARBEITEN:
var_dump der Datei über 5 MB:
array(0) {
}
var_dump der Datei <= 5M:
array(1) {
["fileupload"]=>
array(5) {
["name"]=>
string(13) "netzerk12.pdf"
["type"]=>
string(15) "application/pdf"
["tmp_name"]=>
string(22) "/tmp/uploads/phpWhm8M0"
["error"]=>
int(0)
["size"]=>
int(352361)
}
}
Du könntest das überprüfen $_SERVER['CONTENT_LENGTH']
:
// check that post_max_size has not been reached
// convert_to_bytes is the function turn `5M` to bytes because $_SERVER['CONTENT_LENGTH'] is in bytes.
if (isset($_SERVER['CONTENT_LENGTH'])
&& (int) $_SERVER['CONTENT_LENGTH'] > convert_to_bytes(ini_get('post_max_size')))
{
// ... with your logic
throw new Exception('File too large!');
}

Florian Grell
Wie Rob erwähnt hat, dein post_max_size
sollte größer sein als deine upload_max_filesize
.
Danach können Sie überprüfen $_FILES['fileupload']['error']
wenn es ist UPLOAD_ERR_INI_SIZE
Die hochgeladene Datei ist zu groß.
Also bei dir php.ini
einstellen
; Maximum allowed size for uploaded files.
upload_max_filesize = 5M
; Must be greater than or equal to upload_max_filesize
post_max_size = 10M
In deiner uploads.php
prüfen
if($_FILES['fileupload']['error'] === UPLOAD_ERR_INI_SIZE) {
// Handle the error
echo 'Your file is too large.';
die();
}
// check for the other possible errors
// http://php.net/manual/features.file-upload.errors.php

Daniel
Ich hatte das gleiche Problem, wo $_FILES
wäre leer, wenn die hochgeladene Datei zu groß ist. Basierend auf den Lösungen von xdazz und Florian kam ich zu folgendem Schluss:
- Wenn die Dateigröße größer ist als
post_max_size
dann $_FILES
ist leer und $_FILES['fileupload']['error']
ist also nicht definiert: nutze die Lösung von xdazz. Sie erhalten jedoch eine Warnmeldung von PHP (Warning: POST Content-Length of xxx bytes exceeds the limit of yyy bytes in Unknown on line 0
).
- Liegt die Dateigröße zwischen
post_max_size
und upload_max_filesize
in diesem Fall können Sie verwenden $_FILES['fileupload']['error']
ohne sich mit PHP-Warnmeldungen belästigen zu müssen.
Verwenden Sie in Kürze den folgenden Code:
if (isset($_SERVER['CONTENT_LENGTH']) &&
(int) $_SERVER['CONTENT_LENGTH'] > (1024*1024*(int) ini_get('post_max_size')))
{
// Code to be executed if the uploaded file has size > post_max_size
// Will issue a PHP warning message
}
if ($_FILES[$this->name]['error'] === UPLOAD_ERR_INI_SIZE) {
// Code to be executed if the uploaded file has size between upload_max_filesize and post_max_size
// Will not issue any PHP warning message
}
Sie sollten die maximal zulässige Dateigröße auf mehr als 5 MB festlegen und dann mit PHP prüfen, ob die Dateigröße 5 MB überschreitet. Stellen Sie sicher, dass die Körpergröße Ihres Webserver-Beitrags ebenfalls mit der neuen Größe aktualisiert wird.
Die Begrenzung der Dateigröße basierend auf PHP-INI ist nicht die beste Lösung, da Sie dadurch eingeschränkt werden. Was ist, wenn Sie überprüfen möchten, ob eine andere Datei in einem anderen Skript 3 MB nicht überschreitet?
if ($_FILES['fileupload']['size'] > 5242880) // 5242880 = 5MB
echo 'your file is too large';
9983800cookie-checkErkennen, ob die hochgeladene Datei zu groß istyes
Bist du sicher, dass es leer ist? Können Sie uns die tatsächliche zeigen
var_dump()
Ausgang?– Austin Brunkhorst
2. September 2013 um 7:37 Uhr
Ja, Sie werden es leer bekommen. Sie müssen die Variablen upload_max_filesize und post_max_size in ini setzen.
– Hasina
2. September 2013 um 7:38 Uhr
Satz
post_max_size
>upload_max_filesize
und Sie sollten Ihre Fehlermeldung erhalten (glaube ich)– Rauben
2. September 2013 um 7:44 Uhr
Wie @Rob sagte,
UPLOAD_ERR_INI_SIZE
Fehler sollte geworfen werden. php.net/manual/en/features.file-upload.errors.php– Glavic
2. September 2013 um 7:45 Uhr
@Glavić das ist ein guter Punkt, hat aber auch nicht geholfen. Wie gesagt, $_FILES ist zu diesem Zeitpunkt nicht gesetzt. $_FILES[‘fileupload’][‘error’] ist nicht hier.
– Thunfisch
2. September 2013 um 7:50 Uhr