Problème avec move_uploaded_file()

Résolu
rskas -  
Alain_42 Messages postés 5413 Statut Membre -
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

15 réponses

  1. le père
     
    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
    1. 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!!!
      0
  2. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
     
    Désolé de te réponse par une question mais lorsque tu as testé tu étais en LOCALHOST ou sur un hébergeur ?
    0
  3. MastercroW Messages postés 1259 Date d'inscription   Statut Membre Dernière intervention   163
     
    Je n'ai rien dis, sinon peut être il faut que ta page soit en 777. (Peut être)
    0
  4. rskas
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. rskas
     
    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
  7. graffx Messages postés 120 Date d'inscription   Statut Contributeur Dernière intervention   2 031
     
    question bete, elle existe bien cette page sur ton serveur?

    upload_confirmation.php
    0
  8. rskas
     
    Oui elle existe ^^, sinon il y aurait une certaine erreur 404
    0
  9. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
    1. rskas
       
      Oui je l'ai modifié, en fait maintenant le problème c'est qu'aucun fichier n'est uploadé...
      0
  10. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
    1. rskas
       
      Ç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
  11. le père
     
    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
  12. rskas
     
    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
  13. le père
     
    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
  14. rskas
     
    ../blend/455b7288c8d9c2d12e7432d2d481138b.blend
    0
    1. rskas
       
      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
  15. Alain_42 Messages postés 5413 Statut Membre 904
     
    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