8796 sujets

Développement web côté serveur, CMS

Bonjour,
J'ai réalisé un formulaire d'envoi de fichier très simple. Celui-ci fonctionne puisque le fichier est correctement uploadé sur le serveur mais un message d’erreur apparait sur la page :
a écrit :
Warning: move_uploaded_file() [function.move-uploaded-file]: open_basedir restriction in effect. File(/tmp/php_tmp/phpJAfUO5) is not within the allowed path(s): (/var/www/g/ga/gae/gaelcorp.perso.sfr.fr/public_html/:/usr/lib/php5/:/var/sitesmutu) in /var/www/g/ga/gae/gaelcorp.perso.sfr.fr/public_html/Stockage/essai.php on line 16


Voici mon script :
	
if ($_FILES['fichier']['error'] == 0)
{
	$infosfichier = pathinfo($_FILES['fichier']['name']);
	$extension_upload = $infosfichier['extension'];
	$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png', 'bmp');
	if (in_array($extension_upload, $extensions_autorisees))
	{
		$result = move_uploaded_file($_FILES['fichier']['tmp_name'], 'essai.' . $extension_upload); 
		if ($result) echo "Transfert réussi";
	}
	else
	{
		echo "Extension non-autorisé !";
	}
}
else
{
	echo "Erreur d'envoi !";
}


Si quelqu'un pouvait m'éclairer la lanterne, sa serait sympa.
D'avance merci. Smiley smile
Modifié par Piixel (25 Apr 2010 - 16:24)
Bonjour.
Si tu pouvais nous donner quelques infos supplémentaires, à commencer par ton formulaire HTML, le type d'hébergement sur lequel tu testes ton script : mutualisé, dédié, local, etc., ça pourrait aider. Smiley cligne
Modifié par phpdoesnotcare (25 Apr 2010 - 15:53)
Avant tout merci pour ta réponse phpdoesnotcare.

Alors voici le formulaire (On peut pas faire plus simple, lol) :

<form method="post" action="essai.php" enctype="multipart/form-data">
	<input type="file" name="fichier" id="fichier" /><br />
	<input type="submit" name="submit" value="Envoyer" />
</form>


Et je suis hébergé chez SFR. ("pages perso") Donc mutualisé j'imagine.
Le formulaire c'était pour vérifier qu'il ne manque pas l'attribut enctype=multipart/form-data.
Ca ressemble à un "problème" de config' de PHP. Mais vu le type d'hébergement, je doute que tu aies accès au php.ini. Smiley lol

A défaut de pouvoir modifier ce fameux fichier, et si vraiment tu es sûr que ton u/l marche, je te propose une pseudo-solution : mettre un @ devant move_uploaded_file() pour l'empêcher d'afficher cet avertissement.
Ha d'accord, je ne savais pas que c’était possible. Merci beaucoup pour ton aide. Connaitrais-tu une meilleure solution d’envoi de fichier en ligne ? Smiley confused
Pas spécialement, non. Je pense que ton script joue très bien son rôle. Fais attention cependant à sécuriser les u/l. Il existe bien des façons de jouer des tours à un admin via un formulaire d'u/l de fichiers...
Par exemple : contrôle le nom du fichier si tu veux l'utiliser. Eviter d'écrire quelque chose du style :
echo $_FILES['fichier']['name'];
... sans être sûr que ce fameux nom n'est pas en fait un script JavaScript, voire PHP.

De manière générale, et je pense qu'il n'est jamais inutile de le rappeler : il ne faut jamais faire confiance à ce qui peut venir de l'utilisateur.
Modifié par phpdoesnotcare (25 Apr 2010 - 16:40)