Formulaire upload fichier = mauvais dossier [resolu]

Formulaire upload fichier = mauvais dossier [resolu] - PHP - Programmation

Marsh Posté le 04-09-2007 à 12:39:32    

Salut,
j'ai un formulaire de fichier qui marche une fois sur 2 ... Disons plus précisément qu'il n'uploade pas *systématiquement* au bon endroit ... :??:
Ci dessous le code, et les essais.
 
Coté HTML :

Code :
  1. <p><label for="file_0">Joindre le fichier (256 ko max.)</label><input type="file" id="file_0" name="uploadfile_0" /></p>


(le formulaire a une méthode post et l'enctype en multipart/form-data)
 
coté PHP, je le récupère avec un move_uploaded_file.
Je fais un print_r($_FILES) juste avant le move_uploaded_files.
La condition :

Code :
  1. print_r($_FILES);
  2. echo "<br />\n1 : ".getcwd()."<br />\n";
  3. $uploaddir = '../upload/files/';
  4. opendir($uploaddir);
  5. chdir($uploaddir);
  6. echo "<br />\n2 : ".getcwd()."<br />\n";
  7. if (!empty($_FILES['uploadfile_0']['name']))
  8. {
  9. $uploadfile = basename($_FILES['uploadfile_0']['name']);
  10. echo "**".$uploadfile;
  11. if (move_uploaded_file($_FILES['uploadfile_0']['tmp_name'], $uploadfile))
  12. {
  13.  echo '<p class="ok">Téléchargement du fichier '.$uploadfile.' réussi !</p>'."\n";
  14. }
  15. else
  16. {
  17.  echo '<p class="nok">Erreur téléchargement fichier '.$uploadfile.'</p>'."\n";
  18. };
  19. };


(je vous passe les détails HTML)
 
En fait, lorsque je suis dans le formulaire (j'ai mis un echo "<br />\n0 : ".getcwd()."<br />\n"; avant le formulaire) j'ai ce chemin :
G:\www\dossier\script (jusque là, ok, je suis sous WAMP 1.7.2.)
 
Je mets un fichier, j'uploade. Mes marqueurs 1 et 2 m'indiquent :

Citation :


Array ( [uploadfile_0] => Array ( [name] => fichier_test.txt [type] => text/plain [tmp_name] => g:/wamp/tmp\phpAF.tmp [error] => 0 [size] => 51 ) )
1 : G:\www\dossier\script
 
2 : G:\www\dossier\upload\files
**fichier_test.txt
Téléchargement réussi de la pièce jointe fichier_test.txt


 
Et surprise, le fichier n'est pas dans upload/files ... mais dans wamp\Apache2 !
 
Lorsque je refais exactement la même manip juste après, avec le même fichier, il se place bien dans upload/files
Si je refais la même manip avec un fichier différent, celui-ci se place dans wamp\Apache2 ...
 
Le problème est bêtement une question de dossier, je ne vois pas vraiment la différence entre opendir et chdir, tous 2 pointent vers le dossier passé par paramètre mais vu que tous mes essais ont les 2 commandes, je ne comprends pas que ça marche un coup et pas l'autre. Je suis en train de faire des essais dessus. Visiblement opendir seul ne marche pas plus.
 
Peut-être avez-vous de quoi éclairer ma lanterne ? Merci !


Message édité par NewsletTux le 04-09-2007 à 15:46:09
Reply

Marsh Posté le 04-09-2007 à 12:39:32   

Reply

Marsh Posté le 04-09-2007 à 13:33:25    

Apparemment je ne suis pas le seul ...
http://fr.php.net/manual/fr/functi [...] .php#52954
 
ça vient des chemins relatifs, faut que je trouve d'autre doc pour résoudre ça.

Reply

Marsh Posté le 04-09-2007 à 15:50:37    

J'ai trouvé un moyen de résoudre ça.
J'utiise "opendir" seul, qui returne un pointeur sur un dossier.
 
Dans le move_uploaded_file, je passe en paramètre une concaaténation du dossier + nom de fichier (conbtrarement au nom seul dans mon exemple au dessus, puisque je pensais qu'en faisant un chdir, il l'enregistrerait dans le {nouveau} dossier courant.
 
Concrètement, ça donne :
 

Code :
  1. print_r($_FILES);
  2. // $_FILES['file_XX'] : XX = 0 to MAX_JOINED_PARTS
  3. $uploaddir = '../upload/files/';
  4. opendir($uploaddir);
  5. if (!empty($_FILES['uploadfile_0']['name']))
  6. {
  7. $uploadfile = $uploaddir.basename($_FILES['uploadfile_'.$i]['name']);
  8. echo "**".$uploadfile;
  9. if (move_uploaded_file($_FILES['uploadfile_'.$i]['tmp_name'], $uploadfile))
  10. {
  11.  echo '<p class="ok">Téléchargement OK du fichier '.$_FILES['uploadfile_0']['name'].'</p>'."\n";
  12. }
  13. else
  14. {
  15.  echo '<p class="nok">Erreur téléchargement du fichier ' '.$_FILES['uploadfile_0']['name'].'</p>'."\n";
  16. };
  17. };

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed