Problème avec move_uploaded_file()
Résolu
rskas
-
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous, je suis en train de faire un script pour uploader des fichiers dans mon hébergement, j'ai suivi un tuto sur le site du 0 (http://www.siteduzero.com/tutoriel-3-37674-upload-de-fichiers-par-formulaire.html), je l'ai modifié, mais quand le le teste, je reçois le message suivant :
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to access blend/e117dcef73f60c70b9e6570d5fa802bc.blend in /var/www/*****.com/htdocs/upload/upload_confirmation.php on line 6
Voici mon petit code :
Formulaire :
et la destination :
Voilà tout, je ne vois pas pourquoi ca ne marche pas, si quelqu'un à la solution :p
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to access blend/e117dcef73f60c70b9e6570d5fa802bc.blend in /var/www/*****.com/htdocs/upload/upload_confirmation.php on line 6
Voici mon petit code :
Formulaire :
<form method="post" action="upload_confirmation.php" enctype="multipart/form-data"> <label for="icone">Icône du fichier (JPG | max. 15 Ko) :</label><br /> <input type="file" name="icone" id="icone" /><br /> <label for="fichier">Fichier (.blend | max. 5 Mo) :</label><br /> <input type="hidden" name="MAX_FILE_SIZE" value="5242880" /> <input type="file" name="fichier" id="mon_fichier" /><br /> <label for="titre">Titre du fichier (max. 50 caractères) :</label><br /> <input type="text" name="titre" value="Titre du fichier" id="titre" /><br /> <label for="description">Description de votre fichier (max. 255 caractères) :</label><br /> <textarea name="description" id="description"></textarea><br /> <input type="submit" name="submit" value="Envoyer" /> </form>
et la destination :
<?php include ("../sql/1.php"); $cle = md5(uniqid(rand(), true)); $nom = "blend/{$cle}.blend"; $resultat = move_uploaded_file($_FILES['tmp_name'],$nom); $icone=htmlentities($_POST['icone'],ENT_QUOTES,'UTF-8'); $fichier=htmlentities($_POST['fichier'],ENT_QUOTES,'UTF-8'); $titre=htmlentities($_POST['titre'],ENT_QUOTES,'UTF-8'); $description=htmlentities($_POST['description'],ENT_QUOTES,'UTF-8'); $description=nl2br($description); ?> <?php $query = "INSERT INTO contenu (up_id, up_nom, up_icone, up_blend, up_description, up_taille, up_cle) VALUES ('', '$titre', '$icone', '$fichier', '$description', '$taille', '$cle')"; $result = mysql_query($query); ?>
Voilà tout, je ne vois pas pourquoi ca ne marche pas, si quelqu'un à la solution :p
A voir également:
- Move_uploaded_file failed to open stream
- Open office gratuit - Télécharger - Suite bureautique
- Open core legacy patcher - Accueil - MacOS
- Qwerty to azerty - Guide
- Ace stream - Télécharger - Lecture
- Open sankoré - Télécharger - Bureautique
15 réponses
1 - le script n'a jamais été 'owned'. C'est le dossier '/' qui l'était
le deuxième paramètre de move_uploaded_file ( $_FILES['fichier']['tmp_name'] , "$dossier" );, c'est à dire $dossier, c'est lui qui contient ../blend/455b7288c8d9c2d12e7432d2d481138b.blend ?
D'après le message d'erreur, comme d'après le nom de la variable, ce serait un nom de dossier, alors qu'il faut indiquer un nom de fichier.
le deuxième paramètre de move_uploaded_file ( $_FILES['fichier']['tmp_name'] , "$dossier" );, c'est à dire $dossier, c'est lui qui contient ../blend/455b7288c8d9c2d12e7432d2d481138b.blend ?
D'après le message d'erreur, comme d'après le nom de la variable, ce serait un nom de dossier, alors qu'il faut indiquer un nom de fichier.
rskas
Ce fût une tâche ardue, mais tu m'as donné la solution, je sais pas comment je me suis débrouillé pour pouvoir faire une erreur aussi bidon sans m'en rendre compte (c'est bien la dixième fois que j'emploie cette fonction dans des scripts, sans erreur, mais là) mais bon =D, c'est résolu!!!
Désolé de te réponse par une question mais lorsque tu as testé tu étais en LOCALHOST ou sur un hébergeur ?
Je teste les script directement sur la toile, le fichier est en permission 777...
Edit : je m'étais trompé dans l'arborescence /blend/ devient ../blend/ ^^, maintenant le script ne fait plus d'erreur mais il n'y as aucun enregistrement dans BDD et le fichier n'est toujours pas uploadé...
Edit : je m'étais trompé dans l'arborescence /blend/ devient ../blend/ ^^, maintenant le script ne fait plus d'erreur mais il n'y as aucun enregistrement dans BDD et le fichier n'est toujours pas uploadé...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je pense que ta réponse est ici :
https://openclassrooms.com/forum/sujet/la-fonction-moveuploadedfile-50709
https://openclassrooms.com/forum/sujet/la-fonction-moveuploadedfile-50709
En fait j'ai essayé avec des scripts proposés sur les respectables Site du Zéro, php.net, phpfrance et bien d'autres... Je suis au bord du "sutdown -s -t 0"
J'ai vérifié la configuration du serveur et l'upload est bien activé...
J'ai vérifié la configuration du serveur et l'upload est bien activé...
Salut
$nom = "blend/{$cle}.blend";
comment se situe le répertoire blend par rapport a ton script php dans ton arborescence ?
tel que tu as fait le chemin cela veut dire que le répertoire blend est un sous répertoire du rep contenant ton script
raisonne en relatif par rapport au repertoire dans lequel est ton script upload_confirmation.php, il faut peut être faire ../blend/{$cle}.blend pour remonter.
au besoin donnes moi le bout d'arborescence concernée
$nom = "blend/{$cle}.blend";
comment se situe le répertoire blend par rapport a ton script php dans ton arborescence ?
tel que tu as fait le chemin cela veut dire que le répertoire blend est un sous répertoire du rep contenant ton script
raisonne en relatif par rapport au repertoire dans lequel est ton script upload_confirmation.php, il faut peut être faire ../blend/{$cle}.blend pour remonter.
au besoin donnes moi le bout d'arborescence concernée
mets des traces pour voir:
ensuite est ce que chez ton hébergeur le dossier temp (ou tmp) existe, chez certains il faut le créer ?
<?php include ("../sql/1.php"); $cle = md5(uniqid(rand(), true)); $nom = "../blend/{$cle}.blend"; echo 'Chemin fichier destination: '.$nom; echo '<br />'; echo 'Nom fichier temporaire: '.$_FILES['tmp_name']; $resultat = move_uploaded_file($_FILES['tmp_name'],$nom); if($resultat) {echo 'le fichier a bien ete transfere de temp vers dest';}
ensuite est ce que chez ton hébergeur le dossier temp (ou tmp) existe, chez certains il faut le créer ?
Bonjour
Dans ton formulaire, tu as deux champ fichier, avec pour noms "icone" et "fichier".
Leurs noms temporaires ne sont pas $_FILES['tmp_name'], mais $_FILES['icone']['tmp_name'] et $_FILES['fichier']['tmp_name']
Il faut donc mettre ces noms là dans tes move_uploaded_file.
Enregistrer $_POST['icone'] et $_POST['fichier'] dans la base ne sert à rien. Il faut enregistrer les fichiers comme tu le fais avec move_uploaded_file. Ensuite, il n'y a plus qu'à mettre les noms des fichiers dans la base pour pouvoir les retrouver plus tard.
Dans ton formulaire, tu as deux champ fichier, avec pour noms "icone" et "fichier".
Leurs noms temporaires ne sont pas $_FILES['tmp_name'], mais $_FILES['icone']['tmp_name'] et $_FILES['fichier']['tmp_name']
Il faut donc mettre ces noms là dans tes move_uploaded_file.
Enregistrer $_POST['icone'] et $_POST['fichier'] dans la base ne sert à rien. Il faut enregistrer les fichiers comme tu le fais avec move_uploaded_file. Ensuite, il n'y a plus qu'à mettre les noms des fichiers dans la base pour pouvoir les retrouver plus tard.
Merci mon père, tout semble se passer comme il faut, MAIS !, parce qu'il y a un mais, une nouvelle erreur apparaît :
Warning: move_uploaded_file() [function.move-uploaded-file]: SAFE MODE Restriction in effect. The script whose uid is 2935 is not allowed to access / owned by uid 0 in /var/www/*****.com/htdocs/upload/upload_confirmation.php on line 22
Touts les dossiers ont une permission 777...
Erf....
Je suis comme mon script : OWNED
Warning: move_uploaded_file() [function.move-uploaded-file]: SAFE MODE Restriction in effect. The script whose uid is 2935 is not allowed to access / owned by uid 0 in /var/www/*****.com/htdocs/upload/upload_confirmation.php on line 22
Touts les dossiers ont une permission 777...
Erf....
Je suis comme mon script : OWNED
D'après ton message d'erreur, tu essayes d'accéder à la racine du système de fichiers, normal qu'il refuse. Fais un echo du nom du fichier de destination juste avant le move_uploaded_file() de la ligne 22
Et le script est plus 'owned'
mais les erreurs :
Warning: move_uploaded_file(../blend/) [function.move-uploaded-file]: failed to open stream: Is a directory in /var/www/*****.com/htdocs/upload/upload_confirmation.php on line 24
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/var/www/*****.com/phptmp/phpvEyuaz' to '../blend/' in /var/www/rskas.com/htdocs/upload/upload_confirmation.php on line 24
et les lignes concernées :
Je pense avoir fait une faute de noob, mais je vois rien...
mais les erreurs :
Warning: move_uploaded_file(../blend/) [function.move-uploaded-file]: failed to open stream: Is a directory in /var/www/*****.com/htdocs/upload/upload_confirmation.php on line 24
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/var/www/*****.com/phptmp/phpvEyuaz' to '../blend/' in /var/www/rskas.com/htdocs/upload/upload_confirmation.php on line 24
et les lignes concernées :
move_uploaded_file ( $_FILES['fichier']['tmp_name'] , "$dossier" );
Je pense avoir fait une faute de noob, mais je vois rien...