Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/12/2006, 20h06   #1
Membre du Club
 
Avatar de camzo
 
Inscription : décembre 2006
Messages : 135
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2006
Messages : 135
Points : 50
Points : 50
Par défaut [Upload] Upload d'image en local sous easyphp

bonsoir à tous,

je commence l'upload d'image. j'ai lu deux tutoriels à ce sujet fort intéressants.
J'ai donc réalisé mon formulaire et mon fichier de traitement sous Easyphp en local.
Les voici :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<html><head><title>chargement des photos</title></head>
 
<body>
 
<form method="post" action="chargement_photo.php" enctype="multipart/form-data">
     <label for="mon_fichier">image (Tous formats | max. 1Mo):</label><br />
     <input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
     <input type="file" name="mon_image" id="mon_image" /><br />
     <input type="submit" name="submit" value="Envoyer" />
</form>
 
</body>
</html>
et...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html><body><?php
 
if ($_FILES['mon_image']['error'] > 0) $erreur = "Erreur lors du tranfsert";
if ($_FILES['mon_image']['size'] > $maxsize) $erreur = "Le fichier est trop gros";
 
$image_sizes = getimagesize($_FILES['mon_image']['tmp_name']);
if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight) $erreur = "Image trop grande";
 
$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
$extension_upload = substr(  strrchr($_FILES['mon_image']['name'], '.')  ,1);
if ( in_array($extension_upload,$extensions_valides) ) echo "Extension correcte";
 
$nom = microtime();
$nom = "mes_fichiers/".str_replace(' ','',$nom);
$resultat = move_uploaded_file($_FILES['icone']['tmp_name'],$nom);
if ($resultat) echo "Transfert réussi";
 
?></body></html>
on me répond que l'extension est correcte. Parfait mais le transfert semble échoué...
Pouvez-vous dans ce cas me dire :

1 : quelles sont mes (nombreuses) fautes ?
2 : où puis-je trouver le répertoire tmp_name ?

En espérant que je n'abuse pas de votre temps,
Merci d'avance
camzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2006, 23h59   #2
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
1) Pourquoi ne pas indiquer le chemin absolut ?
Exemple :
Code :
1
2
$chemin = "/chemin/absolut/vers/mes_fichiers/".str_replace(' ','',$nom);
$resultat = move_uploaded_file($_FILES['icone']['tmp_name'],$nom)
Si $resultat = move_uploaded_file(..) renvoie faux, c'est surement qu'apache n'a pas la permission d'écrire dans le dossier en question, deux solutions :
Code :
1
2
3
4
chmod 777 /chemin/absolut/vers/mes_fichiers/
#ou
chown apache /chemin/absolut/vers/mes_fichiers/
#Cette solution ne vous est pas forcément adaptée
Bien sur, il faut aussi s'assurer que le dossier en question existe n'est ce pas ...

2) Pour connaitre le répertoire, il suffisait de :
Code :
echo $_FILES['mon_image']['tmp_name'];
Mais il s'agit de la variable upload_tmp_dir dans le fichier php.ini
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2007, 05h34   #3
En attente de confirmation mail
 
Inscription : août 2005
Messages : 43
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 43
Points : 25
Points : 25
bon alors, j'arrêtes pas de parcourir le site (forum et faq) et j'arrive toujours pas à uploader :
le chmod de mon dossier d'upload est bien à 777 :
Code :
1
2
$dest_dossier = 'image/';  
	chmod($dest_dossier,777);
mon fichier est bien OK (bonne extension et bonne taille)

mais la fonction qui merde, c'est :
Code :
move_uploaded_file($_FILES['avatar']['tmp_name'], $dest_dossier . $dest_fichier);
Et la variable $_FILES['avatar']['tmp_name'] me renvoit une chaine vide

Dans PHP.ini, j'ai bien défini le dossier d'upload :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
 
; Whether to allow HTTP file uploads.
file_uploads = On
 
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = "D:\Site\Site\tmp\"
 
; Maximum allowed size for uploaded files.
upload_max_filesize = 2M
Help please... je ne vois pas où est l'erreur

Voici mon code complet (pompé ici )
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
if(isset($_FILES['avatar'])) {  
	$extensions_ok = array('JPG','jpg','jpeg','JPEG'); 
	$taille_max = 3000000; 
	$dest_dossier = 'image/';  
	chmod($dest_dossier,777);
	if( !in_array( substr(strrchr($_FILES['avatar']['name'], '.'), 1), $extensions_ok ) )  
	{  
		$erreur = 'Veuillez sélectionner un fichier de type jpg, chaque fichier doit faire moins de 3Mo et ne contenir aucun accents !'; 
	}  
	elseif( file_exists($_FILES['avatar']['tmp_name']) 
	and filesize($_FILES['avatar']['tmp_name']) > $taille_max)  
	{  
		$erreur = 'Votre fichier doit faire moins de 3Mo !'; 
	}  
	else { echo 'fichier OK'.'<br>';}
	// copie du fichier  
	if(!isset($erreur))  
	{
	$dest_fichier = basename($_FILES['avatar']['name']);
	echo $dest_fichier.'<br>';
	echo 'tmp='.$_FILES['avatar']['tmp_name'].'<br>';
	 // 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-1]+)/i', '_', $dest_fichier); 
	 // copie du fichier  
	 $tr= move_uploaded_file($_FILES['avatar']['tmp_name'], $dest_dossier . $dest_fichier); 
	 if ($tr){$erreur = 'transfère ok'; }
	 else {$erreur = 'erreur';}
	 }
}
else {$erreur='file non seté<br>';}
echo $erreur.'<br>';
Y a-t-il un mode Debug pour savoir ce qui a merdé sur la fonction move_uploaded_file ?

Merci d'avance
++
Memes
Memes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2007, 06h03   #4
En attente de confirmation mail
 
Inscription : août 2005
Messages : 43
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 43
Points : 25
Points : 25
OK, c'est bon, j'ai pris le tuto :
Comment envoyer un fichier depuis le navigateur sur le serveur à travers un formulaire HTML ?

et çà marche,

Va comprendre, tous les autre code du site ne marchaient pas...

Enfin, je pense que le bug est devant l'écran et pas dérrière
Memes est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h13.


 
 
 
 
Partenaires

Hébergement Web