problème d'upload une tof

Eléphant du PHP | 417 Messages

08 déc. 2011, 22:18

bonjour a tous le monde j'ai un problème d'upload une foto en ligne, en local tt marche bien et en ligne ça m'affiche ce message d'erreur

Warning: unlink(): http does not allow unlinking in /var/www/vhosts/mon-site.com/httpdocs/profile.php on line 94 Warning: move_uploaded_file(http://mon-site.com/pic_user/mido.png): failed to open stream: HTTP wrapper does not support writeable connections in /var/www/vhosts/mon-site.com/httpdocs/profile.php on line 96 Warning: move_uploaded_file(): Unable to move '/tmp/phpEL6ZH9' to 'http://mon-site.com/pic_user/mido.png' in /var/www/vhosts/mon-site.com/httpdocs/profile.php on line 96

qlq un serai capable de m'expliquer d'ou vien cette erreur ?

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

08 déc. 2011, 22:34

La gestion des fichiers se fait via le système de fichier sur le disque dur (c'est à dire via des adresses du genre c:\ sous windows et pas des http qui sont des adresses internet)

En gros si le dossier "pic_user/" se trouve dans le même répertoire que ton script profile.php, il faut faire un move_uploaded_file vers "pic_user" (ou "./pic_user") et non vers "http://..." :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 417 Messages

08 déc. 2011, 22:45

La gestion des fichiers se fait via le système de fichier sur le disque dur (c'est à dire via des adresses du genre c:\ sous windows et pas des http qui sont des adresses internet)

En gros si le dossier "pic_user/" se trouve dans le même répertoire que ton script profile.php, il faut faire un move_uploaded_file vers "pic_user" (ou "./pic_user") et non vers "http://..." :)
j'ai met au début pic_user/ mais ça marché pas voici le message d'erreur :( dans le cas de pic_user/

Warning: unlink(pic_user/mido.png): Permission denied in /var/www/vhosts/mon-site.com/httpdocs/profile.php on line 94 Warning: move_uploaded_file(pic_user/mido.png): failed to open stream: Permission denied in /var/www/vhosts/mon-site.com/httpdocs/profile.php on line 96 Warning: move_uploaded_file(): Unable to move '/tmp/phpUPfoc7' to 'pic_user/mido.png' in /var/www/vhosts/mon-site.com/httpdocs/profile.php on line 96

voici le script
if ( (isset($_FILES["photo"])) and ($_FILES["photo"]['name'] <> '') )
		{
			$extensions_ok = array('png', 'PNG', 'gif', 'GIF', 'jpg', 'JPG', 'jpeg', 'JPEG');
			$taille_max = 2097152;
			$dossier = 'pic_user/';

			$taille= getimagesize($_FILES['photo']['tmp_name']);
			$largeur=$taille[0];
			$hauteur=$taille[1];
			
			$erreur = '';
			if ( ($largeur > 80) or ($hauteur > 200) )
			{
				$erreur = "* Erreur dans dimensions, format ou la taille de l'image"; 
			}
			elseif( !in_array( substr(strrchr($_FILES["photo"]['name'], '.'), 1), $extensions_ok ) )
			{
				// $erreur = "* Erreur du format dans l'image Veuillez s&eacute;lectionner une image de type png, gif ou jpg !"; 
				$erreur = "* Erreur dans dimensions, format ou la taille de l'image"; 				
			}
			elseif( file_exists($_FILES["photo"]['tmp_name']) and filesize($_FILES["photo"]['tmp_name']) > $taille_max)
			{
				// $erreur = "* Erreur dans la taille de l'image votre image doit faire moins de 500Ko !";
				$erreur = "* Erreur dans dimensions, format ou la taille de l'image"; 
			}
			
			if ( $erreur == '' )
			{
				// exetension de l'image
				$extension = substr(strrchr($_FILES["photo"]['name'], '.'), 1);
				// nom de l'image
				$namImg = $_SESSION['pseudo'].".".$extension;
				// Uploader L'image
				
				
				if ( $image != 'pic_user/no-pic.png' )
					unlink($image);
				
				move_uploaded_file($_FILES["photo"]['tmp_name'], $dossier . $namImg); // Upoade la nouvelle image
				
				$image = $dossier.$namImg;
			}
		}
Modifié en dernier par miiidooo19 le 09 déc. 2011, 00:35, modifié 1 fois.

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

08 déc. 2011, 22:50

Est- ce que le dossier pic_user existe bien sur le serveur ?
si oui, où est-ce qu'il se trouve par rapport à ton script profile.php ? (même répertoire ? sous répertoire ? dans une autre arborescence ?)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 417 Messages

08 déc. 2011, 23:37

Est- ce que le dossier pic_user existe bien sur le serveur ?
si oui, où est-ce qu'il se trouve par rapport à ton script profile.php ? (même répertoire ? sous répertoire ? dans une autre arborescence ?)
oui le dossier pic_user existe dans le serveur
dans le dossier racine (www) de mon site j'ai les script index.^php....et profile.php et les dossier include, img, et pice_user....

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

09 déc. 2011, 10:34

c'est bien
/var/www/vhosts/mon-site.com/httpdocs/
/var/www/vhosts/mon-site.com/httpdocs/include
/var/www/vhosts/mon-site.com/httpdocs/img
/var/www/vhosts/mon-site.com/httpdocs/pice_user

et pas /var/www/pice_user ?

sinon d'après le message d'erreur php n'a pas les droits pour ce que tu demande. essai d'ajouter un chmod 0777 sur le répertoire (et ce qu'il contient) avec un client FTP.

de plus il serait très prudent de vérifie que le fichier existe avant d'essayer de la supprimer histoire d'éviter un message d'erreur :)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

09 déc. 2011, 11:04

c'est bien
/var/www/vhosts/mon-site.com/httpdocs/
/var/www/vhosts/mon-site.com/httpdocs/include
/var/www/vhosts/mon-site.com/httpdocs/img
/var/www/vhosts/mon-site.com/httpdocs/pice_user

et pas /var/www/pice_user ?

sinon d'après le message d'erreur php n'a pas les droits pour ce que tu demande. essai d'ajouter un chmod 0777 sur le répertoire (et ce qu'il contient) avec un client FTP.

de plus il serait très prudent de vérifie que le fichier existe avant d'essayer de la supprimer histoire d'éviter un message d'erreur :)

@+
j'ai pas dossier www dans mon serveur
voici le chemin de mon dossier pic_user (/httpdocs/pic_user)
voici une image qui indique bien que le profile.php et pic_user sont dans la même répertoire /httpdocs
Image

donc le chemain de pic_user c'est bien (/httpdocs/pic_user) mais vu que pic_user et profile.php sont ds la meme répertoire j'ai pas besoin de ajouter httpdocs non ?

chmod 0777 c'est droit d'accès au fichier non ? clik droit sur le dossier pic_user c'est ça ?

pour ta dernière remarque je pense que je suis pas obligatoire parce que enfait quand l'utilisateur s'inscrit pour le première fois je lui donne une image par défaut qui s'appel no-pic.png et quand il upload une nouvelle image pour la première fois donc y a pas d'image a supprimé ($image = le nom de l'image que je recupére dans la bdd et là pour le moment c'est no-pic.png) donc je test si $image!= no-pic.png je la supprime parce dans ce cas c'est pas la première fois que le mec upload une image tu vois ce que je veux dire ?

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

09 déc. 2011, 15:20

Heu non le / représente la racine du système hors ton script n'est pas a la racine, regarde le message d'erreur il te l'indique.
Ce que tu vois en FTP c'est que le "home" de l'utilisateur FTP connecté ;)
Son si tu a créer le répertoire avec le client FTP change le Chloé en 0777 ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

09 déc. 2011, 15:24

Heu non le / représente la racine du système hors ton script n'est pas a la racine, regarde le message d'erreur il te l'indique.
Ce que tu vois en FTP c'est que le "home" de l'utilisateur FTP connecté ;)
Son si tu a créer le répertoire avec le client FTP change le Chloé en 0777 ;)


@+
Donc le chemin que je vais mettre moi dans mon script c'est /pin_user ?

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

09 déc. 2011, 15:52

Nan ......

Je viens de mettre que le / initial c'est la racine du système de fichier et ton répertoire N'est pas a la racine du système !

Il y a :
- la système de fichier de la machine sur laquelle evolue Apache, php et le client FTP.
- l'url
- le serveur root d'apache
- le serveur root de ton site
- le répertoire de base de l'utilisateur FTP

Tous cela ne représente pas la même chose.
Le système de fichier qui commence par / contient tous les fichier de la machine.
Quand tu fait cd /home/moogli tu va dans le répertoire moogli du répertoire home qui lui est juste à la racine et ceci depuis n'importe ou !
Par exemple sous windows tu ferais cd c:\users\moogli pour la même chose.

Maintenant un serveur FTP repose sur le système de fichier et va attribuer à un utilisateur (qui peu ne pas être un utilisateur du système) des droits sur un ou plusieurs répertoires. Sur le même principe que celui de la gestion des utilisateurs du système l'utilisateur FTP à un répertoire "home" et ne verra rien en dehors.
Ce n'est pas pour autant qu'un fichier dedans utilisant le système de fichier pourra utiliser le / pour indiquer un fichier au même niveau que lui. Il va falloir utiliser un chemin relatif (avec pourquoi pas le ./).

La dessus Apache à un "hôte virtuel" définissant ton site et utilisant un répertoire de son "serverroot" ce répertoire étant le "home" de l'utilisateur FTP.

Donc soit tu indique le chemin depuis la racine (que tu connais grâce aux messages d'erreurs) soit tu utilise le ./ soit rien. Ce qui sera considéré comme le ./

Quand au chemin de l'url il est référencé par rapport à l'url de base de ton site (le http://www.tonsiteatoi.com) qui sera la racine. Car le navigateur (opéra, chrome, Firefox safari, is et un tas d'autre ne connaissent pas la machine sur laquelle tourne Apache (ou autre hein ;) ) et s'en fou lui il fait une demande à une URL, le / représentant l'url de base du site aprèse serveur oueb fait le tri comme un grand.

Regarde sur le net des tuto sur les système de fichier sous UNIX et comment y naviguer.
Voir même sur le principe du chroot parce qu'au final c'est de ça qu'il s'agit).


Bonne lecture ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

09 déc. 2011, 16:14

J'adore ton Nan ...... ^^ ça me fait penser à un prof lol

bah finalement j'ai changé les droit d'accès comme tu as dit de 755 à 777 pour le dossier pic_user et ça marche :)

Merci prof moogli ^^

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

09 déc. 2011, 21:56

Ouais, et t'as du bol d'être à l'abri derrière ton ordinateur, parce que sinon prof moogli t'aurait balancé une craie en travers de la figure ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

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

10 déc. 2011, 01:42

plutot la chaise c'est le seul truc pas indispensable pour le fonctionnement de l'ordi :mrgreen:
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

10 déc. 2011, 20:32

Loool :D