Page 1 sur 1

Problème d'upload_max_filesize

Posté : 18 déc. 2012, 02:21
par Blop
Bonjour, j'ai créé un formulaire pour uploader un avatar et quelque chose bloque lors du traitement lorsque le fichier dépasse les 2mo, ceci étant la limite de mon upload_max_filesize. J'ai simplifié à l'extrême mes deux pages pour vous rendre le tout plus clair. Voici le bête formulaire en question :
<form action="traitement_form_upload.php" method="post" enctype="multipart/form-data">
	<input type="file" name="avtr"/>
	<input type="submit" value="Upload" name="stt_p_avtr" />
</form>
Et le traitement derrière (traitement_form_upload.php) :
<?php
session_start();
header('Content-type: text/html; charset=utf-8');

if(isset($_POST['stt_p_avtr']) AND isset($_FILES['avtr']))
{
	if(file_exists($_FILES['avtr']['tmp_name'])) $image_sizes=getimagesize($_FILES['avtr']['tmp_name']);
	$allow_ext=array('jpg','jpeg','gif','png'); //extensions autorisées
	$ext=strtolower(substr(strrchr($_FILES['avtr']['name'],'.'),1)); //récupération de l'extension
	
	if($_FILES['avtr']['error']==4) $fail="You didn't upload any file.";
	elseif($_FILES['avtr']['error']==1) $fail="Your file is too big - 1.<br/>";
	elseif($_FILES['avtr']['error']>0) $fail="The upload has returned an error during the process. ERROR N°".$_FILES['avtr']['error']."<br/>";
	elseif($_FILES['avtr']['size']>409600) $fail="Your file is too big - 2.<br/>";
	elseif(!in_array($ext,$allow_ext)) $fail="Your file wasn't an image or his type wasn't allowed.<br/>";
	elseif($image_sizes[0]>200 OR $image_sizes[1]>200) $fail="The size of your file was too tall.<br/>";
	else $win="Avatar prêt à être uploadé";
	
	if(isset($fail))
	{
		echo 'Upload raté.<br/>';
		echo $fail;
		exit;
	}
	elseif(isset($win))
	{		
		echo $win;
		exit;
	}
}
else echo "N'a pas réussi à dépasser les conditions d'entrée.";?>
Alors, cela fonctionne parfaitement lorsque l'image remplit toutes les conditions et me renvoie donc "Avatar prêt à être uploadé".
Si l'image est en dessous des 2mo, toutes les erreurs fonctionnent (upload vide, mauvaise extension ou image trop grande), même celle qui concerne les images entre la limite de 409600ko fixée et les 2mo de l'upload_max_filesize et me donne donc "Your file is too big - 2.<br/>".

Par contre, si le fichier dépasse 2mo, ça devient n'importe quoi. Si c'est un zip, un exe ou un jpg mon script me rend bien "Your file is too big - 1.<br/>", ce que j'attends.
Par contre, si c'est un png, donc une extension autorisée, ou un mp4, mp3 ou un pdf, j'obtiens "N'a pas réussi à dépasser les conditions d'entrée.". Autrement dit, le serveur a lu mon script, a dépassé les conditions (isset($_POST['stt_p_avtr']) AND isset($_FILES['avtr'])), est reparti boire un coup puis est revenu et ne satisfaisait alors plus aux conditions. J'ai testé avec les deux conditions séparément, ça revient au même.

Ce n'est pas un problème d'extension puisqu'un mp4 qui ne marchait pas, renommé en exe ne marche pas non plus, et inversement.

Me voilà bien embêté surtout que ça me paraît gros comme problème s'il suffit de dépasser la directive pour ne plus pouvoir passer de conditions.

PS : j'ai oublié de préciser mais je suis en local.

Re: Problème d'upload_max_filesize

Posté : 18 déc. 2012, 11:26
par benv8nam
As tu regarder ton php.ini pour voir la taille d'upload max ?

Re: Problème d'upload_max_filesize

Posté : 18 déc. 2012, 13:23
par moogli
salut,

"N'a pas réussi à dépasser les conditions d'entrée.". Autrement dit, le serveur a lu mon script, a dépassé les conditions (isset($_POST['stt_p_avtr']) AND isset($_FILES['avtr'])), est reparti boire un coup puis est revenu et ne satisfaisait alors plus aux conditions. J

NONsi tu as ce message d'erreur c'est que la condition du if est évaluée a false !
en l’occurrence tu doit dépasser les tailles maximum d'upload soit par fichier soit maximum pour un formulaire (comme indiqué ci dessus) et le serveur refuse simplement le fichier.

je pense plus particulièrement au paramètre post_max_size. j'ai testé avec un fichier pdf de 25Mo, avec post_max_size = 8M (par défaut) => $_FILES vide.

Ajoute un var_dump($_FILES); avant le if pour voir ce que php te propose comme fichier



@+

Re: Problème d'upload_max_filesize

Posté : 18 déc. 2012, 16:00
par Blop
As tu regarder ton php.ini pour voir la taille d'upload max ?
Oui, mon upload_max_filesize est bien à 2mo et mon post_max_size est à 8mo.
NONsi tu as ce message d'erreur c'est que la condition du if est évaluée a false !
Oui, je suis d'accord. C'était une manière de parler étant donné qu'il y a deux poids deux mesures, des fois ça passe, des fois ça ne passe pas.

Avec un var_dump sur $_FILES, mon png de 9mo rend un array vide et mon exe de 5mo ou mon jpg de 4mo rendent bien des array pleins qui satisfont aux deux conditions. J'ai aussi fait un var_dump sur $_POST['stt_p_avtr'] qui rend soit la "value" du $_POST['stt_p_avtr'], soit rend un null en fonction des fichiers.

C'est ce deux poids deux mesures qui me rend totalement perplexe.

Re: Problème d'upload_max_filesize

Posté : 18 déc. 2012, 17:17
par moogli
d'où l'importance du isset :)

c'est vraiment parce que tu dépasse les tailles fixées fixée par la conf serveur :/


@+

Re: Problème d'upload_max_filesize

Posté : 18 déc. 2012, 23:31
par Blop
D'ailleurs, je viens de préciser mon problème et de le résoudre par la même occasion. En fait, ce n'est pas un problème d'upload_max_filesize mais de post_max_size car je viens de tester un png de plus de 8mo qui plante et un png entre 2mo et 8mo qui ne plante pas.
Or, cela tombe bien car chercher des résultats sur un éventuel bug de post_max_size revoie déjà plus de résultats que pour upload_max_filesize qui n'était vraiment pas prolixe à ce niveau là.

La doc dit :
If the size of post data is greater than post_max_size, the $_POST and $_FILES superglobals are empty. This can be tracked in various ways, e.g. by passing the $_GET variable to the script processing the data, i.e. <form action="edit.php?processed=1">, and then checking if $_GET['processed'] is set.
En gros, il faut traiter le problème avec $_SERVER['CONTENT_LENGTH'] avant de passer mes conditions.

Voilà. Enfin, merci moogli de m'avoir aidé dans mes recherches.