Question

J'ai un formulaire PHP pour le téléchargement de fichiers. Il fonctionne correctement et affiche un message d'erreur en cas de problème. C'est tout bon.

Le problème, c’est que lorsque je teste avec un très gros fichier, la page est rafraîchie comme si je n’avais pas envoyé de fichier du tout, et aucune des variables $ _POST du formulaire n’est même envoyée au serveur.

Je souhaite afficher une erreur à l’utilisateur, lui indiquant que le fichier est trop volumineux. Cependant, je ne peux pas faire cela.

Quelqu'un sait-il ce qui se passe?

Était-ce utile?

La solution

Vérifiez votre fichier ini PHP, qui détermine la taille du fichier que PHP va pouvoir télécharger. Ces variables sont importantes:

  • taille maximale du fichier upload (upload_max_filesize)
  • taille maximale des données de publication (post_max_size)
  • limite de mémoire (memory_limit)

Tout téléchargement en dehors de ces limites sera ignoré ou erroné, en fonction de vos paramètres.

Cette section de la documentation contient le meilleur résumé: http://ca3.php.net/manual/en/features.file-upload.common-pitfalls.php

EDIT: Notez également que la plupart des navigateurs n'envoient pas de fichiers de plus de 2 Go. Ce lien est obsolète, mais donne une idée: http://www.motobit.com/help /scptutl/pa98.htm . Quelqu'un a-t-il une meilleure source d'informations à ce sujet?

Il existe également des limites pouvant être imposées par le serveur, telles qu'Apache: http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody

Pour vraiment voir ce qui se passe, vous devriez probablement consulter les journaux de votre serveur Web, vérifier la limite de chargement du navigateur (si vous utilisez Firefox) et essayer de voir si print_r($_FILES) génère des numéros d'erreur utiles. Si tout échoue, essayez le moniteur de trafic Internet dans Firebug. La clé est de déterminer si la demande est même envoyée au serveur et si c'est à quoi ressemble la demande (y compris les en-têtes). Une fois que vous êtes arrivé aussi loin dans la chaîne, vous pouvez revenir en arrière et voir comment PHP gère le téléchargement.

Autres conseils

Votre $ _POST est probablement vide car le téléchargement a dépassé la directive post_max_size :

À partir de la page des directives de PHP :

  

Si la taille des données de publication est supérieure   que post_max_size, le $ _POST   et les superglobales $ _FILES sont vides .   Cela peut être suivi de différentes manières,   par exemple. en passant la variable $ _GET à   le script traitant les données, c.-à-d.   <form action="edit.php?processed=1"> et   puis en vérifiant si $ _GET ['traité']   est défini.

vous ne pouvez pas connaître la taille du fichier en cours de téléchargement, jusqu'à ce qu'il soit complètement téléchargé. Par conséquent, si vous souhaitez déterminer la taille du fichier, puis afficher une erreur pour les gros fichiers, vous devez d'abord télécharger le fichier, puis vérifier la taille du fichier. Afin de charger un fichier volumineux, vous devez définir 2 paramètres dans votre fichier de configuration php, php.ini. ouvrez-le et recherchez " upload_max_filesize " et définissez la valeur sur la valeur maximale souhaitée. vous devez ensuite définir la valeur maximale pour les paramètres POST, car les fichiers téléchargés sont reçus via la méthode HTTP POST. trouver " post_max_size " et définissez-le sur une valeur importante.

Je mettrais en œuvre un script simple qui effectue des appels ajax réguliers pour savoir combien de fois le téléchargement a été effectué. Vous pouvez ensuite implémenter une sorte de barre de progression. Il y a quelques exemples sur le net:

http://martinjansen.com/ 2007/04/28 / barres-de-fichiers-téléchargement-progression-avec-php /

max upload taille de fichier (upload_max_filesize) max post data size (post_max_size) sont les directives que vous devez définir. Je l’ai testé avec plusieurs systèmes d’exploitation, navigateurs, etc., et c’est la seule chose dont vous devez vous inquiéter.

séparément des options proposées aux anciens utilisateurs:

max upload filesize (upload_max_filesize)
max post data size (post_max_size)
memory limit (memory_limit)

il y en a aussi un, lorsque le fichier est très volumineux ou que la ligne est occupée, il faut beaucoup de temps pour exécuter cette opération, ce qui atteindra la limite d'exécution du script.

max_execution_time
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top