Page 1 sur 1

Affichage photo uploadée

Posté : 14 déc. 2007, 15:09
par bernard26000
Bonjour a tous et a toutes

J'ai un script qui sert a uploader une photo dans un repertoire puis à l'afficher....
Ca marche tres bien en local, seulement je l'ai mis en ligne et, la photo va bien s'enregistrer dans le repertoire "mini", mais en affichage j'ai la trop fameuse croix rouge.
Il va sans dire qu'il doit y avoir une difference entre le local et en ligne, mais j'avoue que je coince.
Alors voilà mon code, ca vous parlera sans doute mieux.
<?php

// Récupération du dossier dans lequel le fichier sera uploadé	
$DESTINATION_FOLDER =$_SERVER['DOCUMENT_ROOT']."/vmfloc2/livredor/admin/mini/" ;

// Taille maximale de fichier, valeur en bytes					
$MAX_SIZE = 100000000 ;													
// Définition des extensions de fichier autorisées (avec le ".")
$AUTH_EXT = array( ".jpg", ".jpeg",".gif",".JPG",".JPEG",".GIF") ;											


// Fonction permettant de vérifier si l'extension du fichier est// autorisée.
function isExtAuthorized($ext){
	global $AUTH_EXT;
	if(in_array($ext, $AUTH_EXT)){
		return true;
	}else{
		return false;
	}
}

// On vérifie que le champs contenant le chemin du fichier soit
// bien rempli.

if(!empty($_FILES['avatar']["name"])){
	
	// Nom du fichier choisi:
	$nomFichier = $_FILES['avatar']["name"] ;
	// Nom temporaire sur le serveur:
	$nomTemporaire = $_FILES['avatar']["tmp_name"] ;
	// Type du fichier choisi:
	$typeFichier = $_FILES['avatar']["type"] ;
	// Poids en octets du fichier choisit:
	$poidsFichier = $_FILES['avatar']["size"] ;
	// Code de l'erreur si jamais il y en a une:
	$codeErreur = $_FILES['avatar']["error"] ;
	// Extension du fichier
	$extension = strrchr($nomFichier, ".") ;
	
	// Si le poids du fichier est de 0 bytes, le fichier est
	// invalide (ou le chemin incorrect) => message d'erreur
	// sinon, le script continue.
	if($poidsFichier <> 0){
		// Si la taille du fichier est supérieure à la taille
		// maximum spécifiée => message d'erreur
		if($poidsFichier < $MAX_SIZE){
			// On teste ensuite si le fichier a une extension autorisée
			if(isExtAuthorized($extension)){
				// Ensuite, on copie le fichier uploadé ou bon nous semble.
				$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER . $nomFichier) ;
			}else{
				echo ("Une photo avec cette extension $extension ne peut être chargée<br>") ;
			}
		}else{
			$tailleKo = $MAX_SIZE / 10000;
			echo("Vous ne pouvez charger une photo avec une taille supèrieure à Ko Ko.<br>");
		}		
	}else{
		echo("Le fichier selectionné n'est pas valide <br>");
	}
}else{
	echo("Vous ne pouvez choisir ce fichier<br>");
}

 //ouvre le repertoire
   $pointeur = opendir($DESTINATION_FOLDER) ;
   $fichier = $nomFichier ;  
   $i = 0 ; 

   //stocke les noms de fichiers images dans un tableau
  while ($fichier = readdir($pointeur)) 
{ 
  		$tab_image = $fichier ;
		
		

	} 
    
   //on ferme le répertoire 
   closedir($pointeur) ; 
   
   //affichage des images 
 
   
   	
	echo $nomFichier;
	?>
	
	<div  align="center" class="truc2"><?php echo '<img src="'.$DESTINATION_FOLDER.'/'.$tab_image.'"  width=65  />' ; ?></div>
Merci a vous qui passez jeter un oeil ici
Cordialement

Posté : 14 déc. 2007, 15:20
par h0_noMan
Ceci ne sert a rien :
while ($fichier = readdir($pointeur))
{
$tab_image = $fichier ;  
}
Dans $tab_image tu n'auras que le dernier fichier du repertoire.
Si le repertoire est vide alors tu pointes sur .. (qui n'est pas une image)

Posté : 14 déc. 2007, 16:27
par Ryle
Fais un clic droit sur ta croix rouge et regarde les propriétés de l'image (ou regarde directement le source de ta page). Tu y verras le chemin spécifié pour afficher l'image et tu devrais rapidement voir en quoi il n'est pas bon (si le chemin est incorrect, si le nom du fichier n'est pas le bon, etc.)

Il ne faut pas mélanger l'adresse dans le système de fichier et l'adresse internet. Le premier est utilisé par le serveur et correpond à la structure du disque dur où '/' correspond à la racine de celui-ci (équivalent du C:\), le second est utilisé par le navigateur pour demander au serveur l'élément corresondant sur le site web et où '/' correspond à la racine du domaine...

Posté : 14 déc. 2007, 19:12
par bernard26000
bonsoir
et merci pour vos reponses, j'ai un peu de mal a tout saisir, mais en pointant sur la croix rouge affichée, voilà ce que j'ai comme chemin....

Code : Tout sélectionner

http://www.vmfloc.com/home/vmfloc/www/livredor/admin/mini/Photo%20027.1.jpg
est ce que je ne devrais pas me servir de qq chose comme ca.... ?

Code : Tout sélectionner

/home.10.29/vmfloc/www/
ou est ce que ca ne changera rien????

merci encore a vous

Posté : 14 déc. 2007, 23:37
par h0_noMan
Tu as surement du te tromper dans les chemins.

Code : Tout sélectionner

http://www.vmfloc.com/home/vmfloc/www/livredor/admin/mini/Photo%20027.1.jpg // Ceci devrait marcher http://www.vmfloc.com/ivredor/admin/mini/Photo%20027.1.jpg

Posté : 15 déc. 2007, 10:47
par bernard26000
Bonjour h0_noMan

Je te remercie pour ton aide.... en fait et c'est tout bête, j'ai tout remplacé par le chemin relatif du repertoire et ca marche.... donc je croise les doigts
j'ai mis comme code

Code : Tout sélectionner

$DESTINATION_FOLDER ="../../livredor/admin/mini/" ;
Merci encore a toi et a ceux qui se sont penchés sur mon soucis
Joyeux noel et bonne année.... :lol:

cordialement

Posté : 15 déc. 2007, 16:59
par h0_noMan
Il y a une faille de sécurité dans ton script.

Verifie que l'image est bien une image valide avec getimagesize() avant de faire move_uploaded_files() )
Une personne pourrait executé n'importe quel code PHP sur ton serveur (et meme avoir accès a ton serveur MySQL).