Erkennen, ob die hochgeladene Datei zu groß ist

Lesezeit: 4 Minuten

Erkennen ob die hochgeladene Datei zu gros ist
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)
  }
}

  • 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

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!');
}

  • Das funktioniert für mich, aber ich denke, Sie können immer noch große Dateien hochladen und den Server “überfluten”.

    – Thunfisch

    2. September 2013 um 7:55 Uhr


  • Tolle Antwort, Sie werden wahrscheinlich ersetzen wollen convert_to_bytes(ini_get('post_max_size') mit dem, was für die Situation sinnvoll ist. $_SERVER['CONTENT_LENGTH'] gibt Bytes zurück.

    – Gans

    15. Mai 2017 um 17:56 Uhr

  • @ Gans aber post_max_size ist eine Zeichenfolge, zB 128M

    – Zanderkrieg

    30. März 2020 um 12:18 Uhr

  • @zanderwar Ja, es ist nur eine Dummy-Funktion, die eine Zeichenfolge wie “128M” in Bytes konvertieren soll.

    – xdazz

    31. März 2020 um 4:22 Uhr

Erkennen ob die hochgeladene Datei zu gros ist
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

  • Also muss ich post_max_size auf 9 Petabyte setzen? Wenn ich zum Beispiel auf 100M setze, dann fangen die Leute an, 101M Dateien hochzuladen und das funktioniert nicht mehr. Ja, ich habe es rekonstruiert. upload_max_filesize = 5M post_max_size = 6M. Wenn ich eine 6,4-Millionen-Datei hochlade, bleibt $_FILES leer.

    – Thunfisch

    2. September 2013 um 8:08 Uhr


  • Wenn Sie unbegrenzte Uploads zulassen möchten, ja. Aber ich würde es auf eine vernünftige Zahl setzen. Und wenn Ihr $_FILES Array leer ist, dann war die Datei zu groß. Sie können nachsehen $_FILES['fileupload']['error'] === UPLOAD_ERR_NO_FILE um zu überprüfen, ob überhaupt keine Datei hochgeladen wurde.

    – Florian Grell

    2. September 2013 um 11:03 Uhr

1647188648 945 Erkennen ob die hochgeladene Datei zu gros ist
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_sizedann $_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_filesizein 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';

998380cookie-checkErkennen, ob die hochgeladene Datei zu groß ist

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy