2009-03-05 5 views
3

J'ai un formulaire PHP pour télécharger des fichiers et cela fonctionne très bien et affiche un message d'erreur si quelque chose s'est mal passé. Tout est bien. Le problème est que lorsque je teste avec un très gros fichier, il rafraîchit simplement la page 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.Aucune erreur lors du téléchargement d'un très gros fichier en PHP?

Je veux afficher une erreur à l'utilisateur, en lui faisant savoir que le fichier est trop gros. Cependant, je ne peux pas faire ça.

Est-ce que quelqu'un sait ce qui se passe?

+0

L'avez-vous essayé dans plusieurs navigateurs Web différents? Je suppose que c'est quelque chose du côté du client. –

+0

J'ai vérifié dans Firefox 3, Chrome et IE7. –

Répondre

13

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

  • taille du fichier de téléchargement max (upload_max_filesize)
  • taille des données post-max (post_max_size)
  • limite de mémoire (memory_limit)

Les ajouts en dehors de ces limites seront ignorées ou errored-out, en fonction de vos paramètres.

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

EDIT: Notez également que la plupart des navigateurs ne seront pas envoyer des téléchargements sur 2 Go. Ce lien est obsolète, mais donne une idée: http://www.motobit.com/help/scptutl/pa98.htm. Quelqu'un at-il une meilleure source d'information à ce sujet?

Il y a aussi des limites qui peuvent être imposées par le serveur, comme Apache: http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody

Pour voir vraiment ce qui se passe, vous devriez probablement vérifier vos journaux de serveur Web, vérifiez la limite de téléchargement du navigateur (si vous êtes en utilisant firefox), et essayez de voir si print_r($_FILES) génère des numéros d'erreur utiles. Si tout le reste échoue, essayez le moniteur de trafic net dans firebug. La clé est de déterminer si la requête va même au serveur, et si c'est ce à quoi ressemble la requête (y compris les en-têtes). Une fois que vous êtes dans la chaîne, vous pouvez revenir en arrière et voir comment PHP gère le téléchargement.

+0

Je dépasse la limite dans le but de vérifier que mon traitement des erreurs fonctionne. Le manque d'erreurs utiles est le problème. Le navigateur se rafraîchit, il n'y a pas d'erreur et aucun fichier ou variable de poste n'est envoyé. –

+0

Ah, je vois. Excuses. Quelle est la taille du fichier? J'ai vu cela avec d'autres langues, et c'est généralement une limite de navigateur, ou votre serveur web vous protège. J'ai trouvé que tout ce qui dépasse 2 Go a tendance à être problématique. –

+0

Ce lien est obsolète, mais donne l'aperçu général: http://www.motobit.com/help/scptutl/pa98.htm –

6

Votre $ _POST est très probablement vide parce que le téléchargement a dépassé le post_max_size directive:

De directives page PHP:

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

+0

Merci, c'est vraiment bon à savoir et ça m'explique beaucoup. –

1

Vous ne pouvez pas connaître la taille du fichier en cours de téléchargement, jusqu'à ce qu'il soit entièrement téléchargé. Par conséquent, si vous voulez déterminer la taille du fichier, puis afficher une erreur pour les fichiers volumineux, vous devez d'abord télécharger le fichier, puis vérifier la taille du fichier. Afin d'avoir un gros fichier téléchargé, 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 à la valeur maximale que vous voulez. 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. trouvez "post_max_size" et définissez-le sur une valeur importante.

0

Taille de fichier max upload (upload_max_filesize) Taille de données max post (post_max_size) sont les directives que vous devez définir. Je l'ai testé avec plusieurs systèmes d'exploitation, navigateurs etc et ce sont les deux seules choses dont vous avez besoin de s'inquiéter.

0

forment à part les options que les anciens utilisateurs ont répondus:

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

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

max_execution_time 
Questions connexes