PHP Warning: move_uploaded_file

Eléphant du PHP | 57 Messages

27 mars 2010, 21:25

Je suis en train de monter un script tout bête d'upload d'avatar sur mon site et j'ai cet affreux message d'erreur :

[27-Mar-2010 20:08:17] PHP Warning: move_uploaded_file(avatar/) [<a href='function.move-uploaded-file'>function.move-uploaded-file</a>]: failed to open stream: Is a directory in /home/estoriai/public_html/profil.php on line 238
[27-Mar-2010 20:08:17] PHP Warning: move_uploaded_file() [<a href='function.move-uploaded-file'>function.move-uploaded-file</a>]: Unable to move '/tmp/phpdAROB6' to 'avatar/' in /home/estoriai/public_html/profil.php on line 238

Quelqu'un pourrait-il m'aider à en trouver l'origine ? Voici mon code :
<?php
if (isset($_FILES['avatar']))
{
	// Vérifier les éventuelles erreurs
	if ($_FILES['avatar']['error'] == 0)
	{
		// Vérifier la taille du fichier
		if ($_FILES['avatar']['size'] <= 10240)
		{
			// Vérifier l'extension du fichier
			if ($_FILES['avatar']['type'] != 'image/png' && $_FILES['avatar']['type'] != 'image/jpeg' && $_FILES['avatar']['type'] != 'image/jpg' && $_FILES['avatar']['type'] != 'image/gif')
			{
				echo 'Votre avatar doit être au format jpeg, jpg, gif ou png.';
			} 
			else
			{
				// Vérifier les dimensions de l'image
				$maxwidth = 100; // En pixel
				$maxheight = 100;
				$image_sizes = getimagesize($_FILES['avatar']['tmp_name']);
				if ($image_sizes[0] <= $maxwidth AND $image_sizes[1] <= $maxheight)
				{
					// On définit l'extention du fichier puis on le nomme par le timestamp actuel
					if ($_FILES['avatar']['type'] == 'image/jpeg') { $extention = '.jpeg'; }
					if ($_FILES['avatar']['type'] == 'image/jpg') { $extention = '.jpg'; }
					if ($_FILES['avatar']['type'] == 'image/png') { $extention = '.png'; }
					if ($_FILES['avatar']['type'] == 'image/gif') { $extention = '.gif'; }
					$nom_avatar = time().$extention; 
					$repertoire = 'avatar/';
					if (move_uploaded_file($_FILES['avatar']['tmp_name'], $repertoire.$nom_avatar))
					{
						echo 'Image uploaded !';
					}
					else
					{
						echo 'L\'image n\'a pas pu être uploadée sur le serveur.';
					}
				}
				else
				{
					echo '<p>Les dimensions de votre image ne sont pas correctes (taille maximale : 100*100).</p>';
				}
			}
		}
		else
		{
			echo '<p>Votre avatar est trop lourd (poids maximum : 10ko).</p>';
		}
	}
	else
	{
		echo '<p>Une erreur est survenue lors de l\'enregistrement de votre avatar.</p>';
	}
}

?>
Je précise que je le script me renvoie le message "Image uploaded !", ce qui me parait encore plus bizarre o.O
Modifié en dernier par Benamour Jr le 27 mars 2010, 21:37, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

27 mars 2010, 21:29

t'as les droits sur ton serveur pour faire ca ?

Eléphant du PHP | 57 Messages

27 mars 2010, 21:42

heu ca marche en fait ! le truc c'est que les fichiers existent sur le serveur mais ne sont pas visible via Filezila o.O Pourtant je peux y accéder via leur lien (j'ai vu ça grâce au cpnael de mon hébergeur)! Bizarre bizarre...

Mammouth du PHP | 985 Messages

27 mars 2010, 22:04

Menu Filezila -> Serveur -> Sélectionner: Forcer l'affichage des fichiers cachés :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
AB
ViPHP | 5818 Messages

27 mars 2010, 22:20

Habituellement on force l'affichage des fichiers cachés pour des fichiers type .htaccess

C'est quand même bizarre que des fichiers de type jpeg, jpg, gif ou png soient cachés :-k

Mammouth du PHP | 985 Messages

27 mars 2010, 22:23

C'est vrai, j'ai déjà eu ce problème mais comme AB que pour les fichiers .htaccess.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 18 Messages

27 mars 2010, 23:48

Bonjour,

Moi j'ai utilisé le code donné ici pour l'upload des fichiers sur mon serveur

http://antoine-herault.developpez.com/t ... hp/upload/

Sa marche très bien.

@+

Eléphant du PHP | 57 Messages

27 mars 2010, 23:50

Bizarre en effet, pourtant avant de faire la manip je voyais clairement les .htpasswd et .htaccess via Filezila.
En fait j'ai remarqué que les images apparaissaient mais avec 30 minutes de retard environ... mais heureusement grâce à la manip de Drake c'est maintenant instantané, merci ;)

@salva57 : merci mais mon code est déjà terminé :p

Mammouth du PHP | 985 Messages

28 mars 2010, 00:16

Il est pas mal le lien à salva57.
L'idée d'utiliser la fonction filesize() sur $_FILES['avatar']['tmp_name'] est pas mal.
Et le basename() c'est toujours pratique aussi.

Par contre c'est toujours, tout de même, plus fun de faire son propre script :)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.