web-dev-qa-db-fra.com

$ _FILE uploader un fichier volumineux génère l'erreur 1 même si upload_max_size est plus grand que la taille du fichier

J'ai un simple formulaire de téléchargement avec:

enctype="multipart/form-data"/>

et

input type="hidden" name="MAX_FILE_SIZE" value="5900000" />

Et les paramètres suivants, qui sont appliqués (vérifiés via phpini ()) dans php.ini:

upload_max_filesize = 7MB  
memory_limit = 64M  
post_max_size = 8MB  

J'essaie de télécharger un fichier de petite taille - 500 Ko et il passe au travers

J'essaie de télécharger un fichier de 5 Mo (plus petit que les paramètres upload_max_filesize et post_max_size) et il échoue avec le code d'erreur 1: qui dit: 

UPLOAD_ERR_INI_SIZE Valeur: 1; Le fichier téléchargé dépasse la directive upload_max_filesize dans le fichier php.ini.

Quelqu'un a une idée de ce qui se passe?

24
mgpepe

Je pense que c'est à cause d'une faute de frappe. Au lieu de 

upload_max_filesize = 7MB

il faut lire

upload_max_filesize = 7M

utilisez à nouveau phpinfo() pour vérifier quelle valeur est réellement appliquée. 

50
Pekka 웃

Vous devez également définir le post_max_size dans "php.ini"

7
Lawrence
upload_max_filesize = 7M

Ici, la valeur est comme 7M ou 10M mais pas MB.

Utilisez à nouveau phpinfo() pour vérifier quelle valeur a été réellement appliquée. 

Utilisez le code ci-dessous pour comprendre quel est le problème. Si la taille du fichier pose problème, il suffit simplement d'imprimer comme dépassant la directive upload_max_filesize dans php.ini.

<?php
$error_types = array(
    1 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.',
    'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.',
    'The uploaded file was only partially uploaded.',
    'No file was uploaded.',
    6 => 'Missing a temporary folder.',
    'Failed to write file to disk.',
    'A PHP extension stopped the file upload.'
);

// Outside a loop...
if ($_FILES['userfile']['error'] == 0) {
    // here userfile is the name
    // i.e(<input type="file" name="*userfile*" size="30" id="userfile">
    echo "no error ";
} else {
    $error_message = $error_types[$_FILES['userfile']['error']];
    echo $error_message;
}
?>

Par cela, nous pouvons facilement identifier le problème. Nous pouvons également utiliser switch(){ case } pour imprimer les messages d'erreur ci-dessus.

3
yasin

Voici une grosse erreur que j'ai faite:

Si vous souhaitez télécharger de très gros fichiers, vous devez définir KeepAliveTimeout plus élevé que la valeur par défaut 5 secondes.

Par exemple:

KeepAliveTimeout 300

Vous pouvez trouver cette propriété dans /etc/Apache2/Apache2.conf

1
pdschubert

passez à WHM->Service Configuration->PHP Configuration Editor et mettez à jour la valeur de upload_max_filesize.

0
nisam