[Upload] Ne retourne pas d'erreur

Mammouth du PHP | 965 Messages

08 mai 2006, 15:40

j'ai mis :
		// On verrifie les extensions
	 	if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
	 	  {
			header("location: chavatar.php?erreur1&PHPSESSID=".$_POST['session']);
			$error = true;
			exit();
		  }
		// On verrifie la taille du fichier
	 	elseif( file_exists($_FILES['photo']['name']) and filesize($_FILES['photo']['name']) > $taille_max)
	 	  {
	 	  	$error = true;
			header("location: chavatar.php?erreur2&PHPSESSID=".$_POST['session']);
			exit();
		  }
mais il ne s'arrete pas quand l'extension ne vas pas et me rediriqe quand même avec le message d'erreur donc tout se passe bien mais il ne s'arrete pas...

Mammouth du PHP | 965 Messages

09 mai 2006, 10:04

En fait il faut mettre le nom temporaire du fichier comme ca :
move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
Et ne pas mettre ['name'] par contre il ne me verrifie toujours pas si la taille est bonne, il ne copie pas le fichier mais ne retourne pas d'erreur :/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 mai 2006, 10:18

Au temps pour moi, je l'avais pas vu celui là !! :x

$_FILES['userfile']['name'] correspond au nom original du fichier, sur la machine de l'utilisateur.
$_FILES['userfile']['tmp_name'] est le nom temporaire du fichier chargé sur le serveur.

Donc tant qu'il n'a pas été déplacé, c'est tmp_name qu'il faut utiliser (pour tester la taille, pour le déplacer, etc.)

Mammouth du PHP | 965 Messages

09 mai 2006, 10:23

Donc:

- il verrifier bien les extensions
- il copie bien le fichier
- il le renomme bien

Mais :

- il ne verrifie toujours pas la taille

On vas y arriver :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 mai 2006, 10:31

C'est quand même pas un bout de code qui va faire la loi ?! ;)

Tu as bien remplacé le tmp_name dans ton test également ?
if (file_exists($_FILES['photo']['tmp_name']) && filesize($_FILES['photo']['tmp_name']) > $taille_max)
fais un echo dans ton script de : filesize($_FILES['photo']['tmp_name'])
histoire de voir quelle taille il a et s'il est effectivement supérieur à ta taille max (c'est exprimé en octets)

Mammouth du PHP | 965 Messages

09 mai 2006, 10:38

J'ai du virer tout mes header pour voir ou ca coincait

Alors quand je met un fichier supporté il m'indique la taille mais quand c'est un fichier de plus d'1mo par exemple il continue bien le script comme si tout marchait et m'indique une taille de :

taille = 0

alors qu'avec les autres images il me retourne la bonne taille !

Mammouth du PHP | 965 Messages

09 mai 2006, 11:43

J'avais mis :
<INPUT type=hidden name=MAX_FILE_SIZE VALUE=500000>

dans mon formulaire et ca bloquait le passeg et je ne comprenais pas pourquoi par contre maintenant il me retourne bien l'erreur mais affiche quand même l'avatar ... on tourne en rond :D

Mammouth du PHP | 965 Messages

09 mai 2006, 12:08

le exit(); a eut raison de moi pour ne pas continuer le script :)

donc en fait la j'ai bien

-retour si poids incorrect
-retour si format non supporté
-retour si fichier n'existe pas

-upload du fichier
-upload de la base de donnée

Merciiiiiiiiiiiiiiiiiiiiiiiiiii

maintenant juste une petite chose je voudrais comme c'est pour utiliser des avatar ne pas depasser une certaine dimension pour ne pas tout changer ...

Pour vous quel serait la taille pour un avatar correct a ne pas depasser et surtout comment faire pour l'integrer a mon script ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 mai 2006, 12:30

YES !! Encore une victoire de l'homme sur la machine ;)

Pour la taille, les avatars font généralement entre 80 et 100 pixels de large. La fonction getimagesize() te permet sur un fichier image de récupérer les dimensions de celui ci.. Tu pourras donc définir une valeur max et comparer pour rejeter ou non l'image :)

Ps : sinon je me demandais... 500ko, c'est pas un peu énorme pour un avatar ? ;)

Mammouth du PHP | 965 Messages

09 mai 2006, 18:02

Si en fait je pense limiter la taille de l'avatar a 100ko et une dimension je ne sais pas encore quoi choisir ... c'est pour ca qu'en fait je vous demandais votre avis.

Pour le reste le script marche parfaitement donc il faut maintenant que je vois comment faire pour faire la dimension.

Merci encore une fois.

Mammouth du PHP | 965 Messages

10 mai 2006, 11:54

Voila le code pour ceux qui voudrait s'en servir qui :

-Verrifie les dimensions de l'image
-Verrifie le poids de l'image
-Verrifie l'extension de l'image
<?php
      require ("connect.php");

      if(isset($_FILES['photo']))

      {
		//parametres
		unset($erreur);
		$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
		$taille_max = 500000;
		$dest_dossier = 'c:/www/Avatars/';
		$size = getimagesize($_FILES['photo']['tmp_name']);
	 	$height = $size[1];
       	$width = $size[0];
       	$taille = 100;

		// On verrifie les extensions
	 	if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
	 	  {
			header("location: chavatar.php?erreur1&PHPSESSID=".$_POST['session']);
		  }
		// On verrifie la taille du fichier
	 	elseif( file_exists($_FILES['photo']['tmp_name']) and $_FILES['photo']['size'] > $taille_max)
	 	  {
	 	  	$erreur = true;
	 	  	header("location: chavatar.php?erreur2&PHPSESSID=".$_POST['session']);
	 	  	exit();
		  }
		  elseif( file_exists($_FILES['photo']['tmp_name']) and $height > $taille && $width > $taille)
	 	  {
	 	  	$erreur = true;
	 	  	header("location: chavatar.php?erreur3&PHPSESSID=".$_POST['session']);
	 	  	exit();
		  }

		// Si ficher = bonne taille & bonne extension
   	  	if(!isset($erreur))
       	  {

			$dest_fichier = basename($_FILES['photo']['name']);
			//formatage nom fichier
			//enlever les accents
			$dest_fichier = strtr($dest_fichier,
			'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
			'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
			// remplacer les caracteres autres que lettres, chiffres et point par _
			$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
			// On upload le fichier
       		move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $_FILES['photo']['name']);

			// On remet a jour la base de donnée
			$valide = "UPDATE `art` SET avatar = '".$_FILES['photo']['name']."'  WHERE nom = '".$_POST['pseudo']."' ";
			$test = mysql_query($valide) or die("erreur ! ".mysql_error());

			//Redirection sur page precedente
			header("location: chavatar.php?1&PHPSESSID=".$_POST['session']);
		 }
      }else{
		header("location: chavatar.php?erreur1&PHPSESSID=".$_POST['session']);
	  }




?>
-Redirige sur la page precedente avec un message d'erreur :
													<?php
														if(isset($_GET['erreur1'])){
															echo "<b>Format de fichier non supporté";
															}
														elseif(isset($_GET['erreur2'])){
															echo "<b>Taille du fichier trop importante";
															}
														elseif(isset($_GET['erreur3'])){
															echo "<b>Dimensions incorrects";
														}else{
															echo"Centre d'upload";
														}

													?>
[/php]