upload d'avatar

Mammouth du PHP | 965 Messages

28 juin 2006, 18:00

Bonjour j'ai encore un soucis pour mon upload d'avatar :/

ca commence a vraiment ma gaver ces trucs de tmp_name et name pour un fichier qu'on upload en tout cas quand je met par exemple : $_FILES['photo']['name'] il m'indique une erreur et quand je met $_FILES['photo']['tmp_name'] il ne fait rien :
<?php
      require ("connect.php");


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

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

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

?>
je bloque completement avec ce script qui me retourne que :

Code : Tout sélectionner

Warning: getimagesize(mast_free2.gif): failed to open stream: No such file or directory in /home/agite/domains/electrogene.org/public_html/vavatar.php on line 13
ligne 13 correspondant a :


$size = getimagesize($_FILES['photo']['name']);

Eléphant du PHP | 88 Messages

28 juin 2006, 18:12

slt!

as tu bien le fichier mast_free2.gif dans le bon dossier?

de plus, il doit y avoir un problème dans l'appel de ta fonction getimagesize puisque si tu regardes le site http://fr2.php.net/getimagesize tu dois plutôt écrire :
getimagesize("".$_FILES['photo']['name']);
enfin je suis pas sûr de la syntaxe mais tu dois avoir getimagesize("mast_free2.gif") je pense.

@+

Mammouth du PHP | 965 Messages

28 juin 2006, 18:13

disons que c'est un lien sur mon disque dur le nom importe peu dans tout ca c'est juste l'erreur sur l'image que j'ai tester.

En tout cas ce qui est sur c'est que c'est le nom de l'image qu'il doit upload sur n'importe quel disque dur, je sais pas si je suis sur la bonne longeur d'onde.

Mammouth du PHP | 965 Messages

28 juin 2006, 18:26

En fait quand j'upload depuis mon repertoire en local www ca marche mais depuis n'importe quel autre dossier il ne trouve pas l'image ...

des idées ?

Mammouth du PHP | 965 Messages

29 juin 2006, 09:54

on peux donc pas faire un getimagesize sur une image d'un disque ne correspondant pas a du local ?

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

29 juin 2006, 10:08

C'est un petit soucis de compréhension :

$_FILES['userfile']['tmp_name'] contient uniquement le nom du fichier temporaire sur le serveur, sans aucune information sur l'endroit où il se trouve.
$_FILES['userfile']['name'] contient le nom original du fichier et c'est tout.

Quand tu appelles la fonction getimagesize(), il faut lui préciser l'emplacement physique de l'image sur le serveur. Il te faut donc utiliser le tmp_name en spécifiant le chemin du dossier temporaire du serveur.

L'autre solution consiste a faire le move_upload_file pour déplacer le fichier tmp_name du dossier temporaire vers le dossier et le nom que tu veux, et tester à ce moment là à partir d'un chemin et d'un nom de fichier que tu connais :)

(chais pas si je suis très clair)

Eléphant du PHP | 66 Messages

29 juin 2006, 10:50

le prblm est ici
$size = getimagesize($_FILES['photo']['name']); 
en fait là tu pointe vers un fichier qui a le nom initial dans le repertoir du fichier php.
ce qu'il faut faire
soit:
$size = getimagesize($_FILES['photo']['tmp_name']); 
et n'oublie pas de faire move_uploaded_file()
soit
$rep="uploads";
$nom_fichier=$rep."/";
$nom_fichier.=rand(0,99999);
$extension=explode(".",$_FILES["photo"]["name"]);
$tab_size=sizeof($extension);
$nom_fichier.=".".$extension[$tab_size];
@move_uploaded_file($_FILES["photo"]["tmp_name"],$nom_fichier);
$size = getimagesize($nom_fichier); 
Mess With Best or die With the Rest

Mammouth du PHP | 965 Messages

29 juin 2006, 11:32

quand je met le tmp_name il accepte même les images qui sont trop grande et je ne comprends pas ce qui permet ca dans mon script je retourne le problème dans tout les sens mais ne comprends toujours pas.

En fait j'ai mis le 'name' pour tester et aussi le tmp_name mais ca reviens toujours au même ... ya un truc dans mon script qui merde ?

Eléphant du PHP | 66 Messages

29 juin 2006, 11:36

j'ai pas bien compris ce que tu veux faire exactement ?
redimentionner un fichier ?
Lorsque tu upload un fichier qq soit son taille il le met dans un repertoire temporaire et poue récupérer son chemin il faut utiliser le "tmp_name" d'ailleur dans tous les cas il faut que tu utilise le "tmp_name" pour avoir le fichier.
tu peux nous expliquer ce que tu veux faire exactement ?
Mess With Best or die With the Rest

Mammouth du PHP | 965 Messages

29 juin 2006, 16:17

ce que je veux faire c'est qu'un utilisateur puisse upload son avatar sur mon FTP en fait.

et la je test a ce que ta taille ne soit pas trop grande, mais qu'elle le soit ou pas il l'upload quand même et ne retourne pas d'erreur, pourtant je ne vois pas d'erreur sur mon script, c'est pour ca que je vous demandais votre avis.

Mammouth du PHP | 965 Messages

29 juin 2006, 20:13

pourtant avec :
		elseif( file_exists($_FILES['photo']['name']) and $height > $taille && $width > $taille)
	 	  {
	 	  	$erreur = true;
	 	  	header("location: chavatar.php?erreur3");
	 	  	exit();
		  }
il devrai tester la taille selon les parametres :
		$size = getimagesize("".$_FILES['photo']['tmp_name']);
	 	$height = $size[1];
       	$width = $size[0];
       	$taille = 100;
non ? :roll:

Mammouth du PHP | 965 Messages

29 juin 2006, 21:31

maintenant il teste juste l'extension et apres il passe direct a l'upload j'ai l'impression sans verrifier ni le poids de l'image ni les dimensions ...