<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.