[Upload] A partir d'une URL

Mammouth du PHP | 965 Messages

16 mai 2006, 16:59

Voilà j'ai repris mon script precedent et j'essaye d'upload une image a partir d'un site internet pour la garder en memoire de la facon suivante :
<?php
	require ("connect.php");

	$photo = $_POST['photo2'];

	  if(isset($photo))

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

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

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

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



?>
Le soucis c'est qu'il identifie bien le format de l'image et ne retourne pas d'erreur mais bloque sur getsizeimage en me retournant l'erreur :

Code : Tout sélectionner

Warning: getimagesize(h) [function.getimagesize]: failed to open stream: No such file or directory in C:\www\vavatar2.php on line 14
Donc en fait il je sais pas s'il faut garder le 'temp_name' ou le changer j'ai essayer plusieurs test avec ou sans et je ne trouve pas du tout ou est l'erreur ...

Mammouth du PHP | 965 Messages

16 mai 2006, 17:46

Logiquement la photo qu'elle vienne d'un site ou alors d'une URL le fonctionnement est le même non ?

Il ya bien un nom temporaire etc ?

Par contre la fonction getimagesize me retourne trop souvent des erreur surtout pour cette action car elle ne trouve pas l'image si j'ai bien compris...

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

16 mai 2006, 18:08

Logiquement la photo qu'elle vienne d'un site ou alors d'une URL le fonctionnement est le même non ?
Je me trompe peut être mais à priori, non, le fonctionnement n'est pas du tout le même. L'upload de fichier transfert une fichier local sur le serveur en même temps que les données du formulaire (en tant que multipart). Tu le récupères alors dans l'objet $_FILES

Si tu ajoutes un champ texte qui contient une url, à aucun moment il ne se soucis d'aller chercher le fichier correspondant pour te le joindre en PJ afin que tu puisses le charger sur le serveur. C'est à toi à partir de l'url que tu récupères dans ton formulaire (comme n'importe quelle autre variable) d'aller ouvrir le fichier sur le serveur distant (readfile ?) et de le rappatrier :)

Mammouth du PHP | 965 Messages

16 mai 2006, 18:11

Donc en fait la methode n'est pas du tout la même si j'ai bien compris ...

Tu connais un petit script qui pourrait me permettre de rattraper une image a partir d'une URL et faire les verrif que je fais plus haut ? ou un moyen de le faire ?

parceque la fonction readfile() ca me dis rien du tout