Problème avec move_uploaded_file()

Résolu/Fermé
rskas - 24 août 2011 à 15:22
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 27 août 2011 à 11:51
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 :
<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:

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.
1
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!!!
0
MastercroW Messages postés 1094 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 31 mai 2019 163
24 août 2011 à 15:25
Désolé de te réponse par une question mais lorsque tu as testé tu étais en LOCALHOST ou sur un hébergeur ?
0
MastercroW Messages postés 1094 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 31 mai 2019 163
24 août 2011 à 15:26
Je n'ai rien dis, sinon peut être il faut que ta page soit en 777. (Peut être)
0
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é...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MastercroW Messages postés 1094 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 31 mai 2019 163
24 août 2011 à 15:33
0
Toujours rien --'
0
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é...
0
graffx Messages postés 6506 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 24 mars 2019 1 975
24 août 2011 à 15:52
question bete, elle existe bien cette page sur ton serveur?

upload_confirmation.php
0
Oui elle existe ^^, sinon il y aurait une certaine erreur 404
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 août 2011 à 09:16
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
0
Oui je l'ai modifié, en fait maintenant le problème c'est qu'aucun fichier n'est uploadé...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 août 2011 à 13:12
mets des traces pour voir:

<?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 ?
0
Ça me retourne ca :

Chemin fichier destination: ../blend/9633feab1c3c5ca7319af7be1d8396e4.blend
Nom fichier temporaire:

Donc il y a bien un problème puisque il n'y-a pas de nom de fichier temporaire ni de confirmation ...
0
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.
0
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
0
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
0
../blend/455b7288c8d9c2d12e7432d2d481138b.blend
0
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 :

move_uploaded_file ( $_FILES['fichier']['tmp_name'] , "$dossier" );


Je pense avoir fait une faute de noob, mais je vois rien...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 27/08/2011 à 11:51
salut,

move_uploaded_file ( $_FILES['fichier']['tmp_name'] , "$dossier" );

plus haut dans ton script tu avait $nom comme destination, et pas $dossier

et enlèves les "

move_uploaded_file ( $_FILES['fichier']['tmp_name'] , $nom );
0