PHP - Problème upload fichier > 8Mo
Résolu
bobox87
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
nando -
nando -
Bonjour,
J'ai encore une question à laquelle je n'ai pas la réponse.
J'ai créer un script pour l'upload de photo avec vérification de l'extension, taille... mais dès que le fichier uploadé (peu importe l'extension) fait plus de 8Mo, cela embrouille complètement le script en m'affichant des Undefined index: pour chaque champ du formulaire! Heureusement rien n'est uploadé ou ajouté dans la bdd mais de quoi ça vient ? par contre si le fichier fait moins de 8Mo le script marche normalement et m'affiche bien mon message d'erreur qui dit que le fichier uploadé est trop gros
Par exemple pour tester la taille du fichier je fais:
et dans le formulaire j'ai un champ
<input type="hidden" name="MAX_FILE_SIZE" value="1048576">
Alors est-ce que le problème vient du $_FILES['produit_photo']['size'] qui n'est pas apte a gérer des fichiers de plus de 8 Mo ?
J'ai encore une question à laquelle je n'ai pas la réponse.
J'ai créer un script pour l'upload de photo avec vérification de l'extension, taille... mais dès que le fichier uploadé (peu importe l'extension) fait plus de 8Mo, cela embrouille complètement le script en m'affichant des Undefined index: pour chaque champ du formulaire! Heureusement rien n'est uploadé ou ajouté dans la bdd mais de quoi ça vient ? par contre si le fichier fait moins de 8Mo le script marche normalement et m'affiche bien mon message d'erreur qui dit que le fichier uploadé est trop gros
Par exemple pour tester la taille du fichier je fais:
$maxsize = 1048576; //Poids max de l'image if ($_FILES['produit_photo']['size'] > $maxsize){ ... }
et dans le formulaire j'ai un champ
<input type="hidden" name="MAX_FILE_SIZE" value="1048576">
Alors est-ce que le problème vient du $_FILES['produit_photo']['size'] qui n'est pas apte a gérer des fichiers de plus de 8 Mo ?
11 réponses
En fait dans mon php.ini j'ai une ligne:
Donc j'imagine que c'est une limitation de PHP? Mais dans ce cas comment ne pas afficher tous les Undefined index: si l'upload est > à 8 Mo ? car c'est pas terrible pour la sécurité ça !
post_max_size = 8M
Donc j'imagine que c'est une limitation de PHP? Mais dans ce cas comment ne pas afficher tous les Undefined index: si l'upload est > à 8 Mo ? car c'est pas terrible pour la sécurité ça !
Salut !
Je pense que le php.ini n'a rien à voir avec cela.
En PHP, une chaine de caractère ne peut contenir que 8 quelque chose (Ko, Mo, ...); Le fichier est géré par ta page PHP donc ne peut dépasser 8 unités.
De même pour les fonctions de lecture de fichier, etc...
Une solution, dont je ne suis pas sûr, est l'upload par Ajax (PAS envoi par iframe). Je n'ai jamais trouvé de code valide pour cela.
Bonne recherche !
Je pense que le php.ini n'a rien à voir avec cela.
En PHP, une chaine de caractère ne peut contenir que 8 quelque chose (Ko, Mo, ...); Le fichier est géré par ta page PHP donc ne peut dépasser 8 unités.
De même pour les fonctions de lecture de fichier, etc...
Une solution, dont je ne suis pas sûr, est l'upload par Ajax (PAS envoi par iframe). Je n'ai jamais trouvé de code valide pour cela.
Bonne recherche !
Merci mais comment faire pour ne pas afficher tous ces messages d'erreurs c'est ça que je voudrais éviter !
Aah... Ca, c'est plus simple !
D'abord n'oublie pas de signaler que le fihcier est trop gros, après, tu as deux solutions :
- Il n'y a qu'une seule fonction qui peux provoquer une erreur, non ? move_uploaded_file(); Lors de son appel, même autour d'un 'if', remplace move_uploaded_file() par @move_uploaded_file(); Cela reviens strictement au même, mais interdit à la fonction d'émettre des messages d'erreur. Dans le cas où d'autres focntions renvoient des erreurs, rajoute aussi un arobase (@) devant, il n'y aura plus de message d'erreur.
- Si cela ne fonctionne pas, il faut voir error_reporting(). Par exemple, error_reporting(0) empêchera l'affichage d'erreur, mais sur n'importe quelle fonction. Si, par après, tu veux de nouveau les erreurs (après l'upload dans la page), il faut renseigner un autre paramètre. Va voir la documentation PHP sur cette fonction.
Bye ;)
D'abord n'oublie pas de signaler que le fihcier est trop gros, après, tu as deux solutions :
- Il n'y a qu'une seule fonction qui peux provoquer une erreur, non ? move_uploaded_file(); Lors de son appel, même autour d'un 'if', remplace move_uploaded_file() par @move_uploaded_file(); Cela reviens strictement au même, mais interdit à la fonction d'émettre des messages d'erreur. Dans le cas où d'autres focntions renvoient des erreurs, rajoute aussi un arobase (@) devant, il n'y aura plus de message d'erreur.
- Si cela ne fonctionne pas, il faut voir error_reporting(). Par exemple, error_reporting(0) empêchera l'affichage d'erreur, mais sur n'importe quelle fonction. Si, par après, tu veux de nouveau les erreurs (après l'upload dans la page), il faut renseigner un autre paramètre. Va voir la documentation PHP sur cette fonction.
Bye ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon j'ai essayé plusieurs trucs mais ça marche pas.
De toute manière un script se coupe tout seul au bout de 30 sec il me semble (je crois que c'est réglable dans le php.ini).
Là je viens d'essayer d'uploader sur un site un fichier de 10Mo, ça mouline pendant 2 min et il ne se passe rien, la page se rafraichit mais ça n'affiche pas d'erreur.
Moi je suis en local donc le transfert est hyper rapide, mais quand il sera en ligne cela prendra du temps d'uploader un fichier supérieur à 8 Mo.
Donc ça devrait être bon quand même ce que j'ai fait ?
De toute manière un script se coupe tout seul au bout de 30 sec il me semble (je crois que c'est réglable dans le php.ini).
Là je viens d'essayer d'uploader sur un site un fichier de 10Mo, ça mouline pendant 2 min et il ne se passe rien, la page se rafraichit mais ça n'affiche pas d'erreur.
Moi je suis en local donc le transfert est hyper rapide, mais quand il sera en ligne cela prendra du temps d'uploader un fichier supérieur à 8 Mo.
Donc ça devrait être bon quand même ce que j'ai fait ?
Pour le fichier de 10 Mo, je pense que tu peux oublier (sauf si par miracle l'upload par Ajax fonctionne).
Puis, je t'ai expliqué comment éviter les erreurs.
Maintenant, pour que ton script puisse durer plus que 30 secondes, en tout début de page, écrit cette ligne :
Bye ;)
Puis, je t'ai expliqué comment éviter les erreurs.
Maintenant, pour que ton script puisse durer plus que 30 secondes, en tout début de page, écrit cette ligne :
set_time_limit(0);Et, pour éviter que les uploaders n'ayent une page blanche pendant un temps fou, utiliser l'envoi par iframe (attention, ce n'est pas la même chose que l'upload par Ajax, contrairement à ce que beaucoup pensent).
Bye ;)
En fait je me rends compte que me suis mal exprimé.
Je ne veux surtout pas que les utilisateurs envoient des fichiers de plus de 8Mo (j'ai placé ma limite à 1 Mo).
Toutes les vérifications dans le script php, notamment $_FILES['produit_photo']['size'], fonctionnent parfaitement lorsque le fichier fait moins de 8Mo.
Dès qu'il fait plus de 8Mo j'ai l'impression que le script fait comme si tous les champ du formulaire étaient vides, il m'affiche toutes les erreurs possibles gérées par mon script php notamment le fait que le fichier est trop gros ou pas avec la bonne extension. Mais il m'affiche aussi des Undefined index avec le nom des champ du formulaire.
J'ai essayé de placer error_reporting(0) ou @move_uploaded_file() (d'ailleurs le move_uploaded_file est lancé s'il n'y a aucune erreur après l'insert into dans la bdd). Malheureusement ça ne marche pas.
Mais à mon avis je n'aurais plus d'erreur une fois en ligne, l'upload prendra trop de temps au delà de 8mo et se coupera tout seul.
Je ne veux surtout pas que les utilisateurs envoient des fichiers de plus de 8Mo (j'ai placé ma limite à 1 Mo).
Toutes les vérifications dans le script php, notamment $_FILES['produit_photo']['size'], fonctionnent parfaitement lorsque le fichier fait moins de 8Mo.
Dès qu'il fait plus de 8Mo j'ai l'impression que le script fait comme si tous les champ du formulaire étaient vides, il m'affiche toutes les erreurs possibles gérées par mon script php notamment le fait que le fichier est trop gros ou pas avec la bonne extension. Mais il m'affiche aussi des Undefined index avec le nom des champ du formulaire.
J'ai essayé de placer error_reporting(0) ou @move_uploaded_file() (d'ailleurs le move_uploaded_file est lancé s'il n'y a aucune erreur après l'insert into dans la bdd). Malheureusement ça ne marche pas.
Mais à mon avis je n'aurais plus d'erreur une fois en ligne, l'upload prendra trop de temps au delà de 8mo et se coupera tout seul.
Hmm... La j'ai un peu moins à dire.
Le script se coupera tout seul si tu n'as pas établi de limite (set_time_limit).
Par contre, si cela ne fonctionne pas en local, ca m'étonnerait vraiment que cela fonctionne en public.
Il faut trouver une fonction qui annule carrément le chargement à ue certaine limite. Je n'en connais pas...
Ce qu'il reste à faire, c'est chercher. J'ai déjà trouvé ce post :
https://forums.commentcamarche.net/forum/affich-7661677-php-upload-max-filesize
Qui cite quelques pistes explorables.
Pour continuer à chercher, j'ai trouvé ce post ici :
https://www.google.be/?gws_rd=ssl#hl=fr&q=php+upload+de+plus+de+8+mo+plante
Ah oui, essaie de ne pas toucher à php.ini, parce que sur un hébergeur tu ne pourras pas le modifier.
Bye ;)
Le script se coupera tout seul si tu n'as pas établi de limite (set_time_limit).
Par contre, si cela ne fonctionne pas en local, ca m'étonnerait vraiment que cela fonctionne en public.
Il faut trouver une fonction qui annule carrément le chargement à ue certaine limite. Je n'en connais pas...
Ce qu'il reste à faire, c'est chercher. J'ai déjà trouvé ce post :
https://forums.commentcamarche.net/forum/affich-7661677-php-upload-max-filesize
Qui cite quelques pistes explorables.
Pour continuer à chercher, j'ai trouvé ce post ici :
https://www.google.be/?gws_rd=ssl#hl=fr&q=php+upload+de+plus+de+8+mo+plante
Ah oui, essaie de ne pas toucher à php.ini, parce que sur un hébergeur tu ne pourras pas le modifier.
Bye ;)
Oui j'ai essayé avec le le upload_max_size mais nan ça veut pas.
Bref, j'ai pu mettre mon script en ligne sur le site d'un ami, et la ouf j'ai pas tous les undefined index, ça mouline pendant 2 min et il ne se passe rien en retour pas de message d'erreur. Je préfère ça, problème résolu.
Merci pour ton aide ;)
Bref, j'ai pu mettre mon script en ligne sur le site d'un ami, et la ouf j'ai pas tous les undefined index, ça mouline pendant 2 min et il ne se passe rien en retour pas de message d'erreur. Je préfère ça, problème résolu.
Merci pour ton aide ;)