Upload de fichier en php

Upload de fichier en php - PHP - Programmation

Marsh Posté le 19-03-2009 à 12:16:36    

Bonjour à tous,
 
Je souhaite uploader un fichier à partir d'un formulaire html. Je gère ensuite la sauvagarde du fichier avec php.
 
Le soucis c'est que durant cette dernière phase, il m'indique les erreurs suivantes :  
 
Warning: move_uploaded_file(C:\Documents and Settings/#004VR/Bureau/D-H/AT1_3857.JPG): failed to open stream: No such file or directory  
 
Warning: move_uploaded_file(): Unable to move 'C:\WINNT\TEMP\php4D30.tmp' to 'C:\Documents and Settings/#004VR/Bureau/D-H/AT1_3857.JPG'
 
Voici la partie du formulaire permettant l'upload :
 

Code :
  1. <input type=hidden name=MAX_FILE_SIZE  VALUE=4000000>
  2. Fichier : <input type=file name="fichier">


 
Je tiens à préciser que j'ai bien mis dans les attributs de la balise form l'attribut ENCTYPE="multipart/form-data"
 
Voici mon code php qui gère les erreurs et l'enregistrement du fichier temporaire vers le dossier cible :
 

Code :
  1. $content_dir = 'C:\Documents and Settings/#004VR/Bureau/D-H/'; // dossier où sera déplacé le fichier
  2.   $tmp_file = $_FILES['fichier']['tmp_name'];
  3.   if( !is_uploaded_file($tmp_file) )
  4.   {
  5.    exit("Le fichier est introuvable" );
  6.   }
  7.   // on vérifie maintenant l'extension
  8.   $type_file = $_FILES['fichier']['type'];
  9.   if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'pdf') && !strstr($type_file, 'ppt') && !strstr($type_file, 'doc') && !strstr($type_file, 'xls') )
  10.   {
  11.    exit("L'extension du fichier n'est pas accepté" );
  12.   }
  13.   // on copie le fichier dans le dossier de destination
  14.   $name_file = $_FILES['fichier']['name'];
  15.   if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
  16.   {
  17.    exit("Impossible de copier le fichier dans $content_dir" );
  18.   }


 
Si je fais un var_dump de $_FILE aucune erreur n'est retournée ! Pour infos voici le résultat du var_dump :
 

Code :
  1. array(1) {
  2.   ["fichier"]=>
  3.   array(5) {
  4.     ["name"]=>
  5.     string(12) "AT1_3857.JPG"
  6.     ["type"]=>
  7.     string(11) "image/pjpeg"
  8.     ["tmp_name"]=>
  9.     string(25) "C:\WINNT\TEMP\php4D30.tmp"
  10.     ["error"]=>
  11.     int(0)
  12.     ["size"]=>
  13.     int(1608970)
  14.   }
  15. }


 
Si quelqu'un a la solution je suis preneur.
 
Merci à tous

Reply

Marsh Posté le 19-03-2009 à 12:16:36   

Reply

Marsh Posté le 19-03-2009 à 13:30:32    

'C:\Documents and Settings/#004VR/Bureau/D-H/'
 
=> deja est-ce que ce dossier existe ???
C'est ca que veut dire ton erreur
No such file or directory


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 19-03-2009 à 13:55:38    

Oui ce dossier existe, puisque j'ai copié le chemin d'accès directement à partir du navigateur.

Reply

Marsh Posté le 19-03-2009 à 14:36:29    

Et est-ce que le fait que je n'ai pas accès au chemin temporaire (car je suis au boulot) : quand je clique sur le dossier nommé "TEMP" message d'erreur me disant qu eje n'ai pas les autorisations pour ouvrir le dossier, cela peut avoir un impacte sur le traitement php ?

Reply

Marsh Posté le 19-03-2009 à 18:54:18    

oui il faut aussi que php puisse ecrire dans le fichier TEMP, par defaut php utilise un repertoir spécifique (upload_tmp_dir variable dans php.ini)ou il est censé pouvoir ecrire... tu peux changer ce repertoire mais toujours verifier que php puisse écrire dedans...

Reply

Marsh Posté le 19-03-2009 à 19:01:56    

:jap: +1 upload tmp dir + un rename après, l'affaire est jouée


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 20-03-2009 à 09:24:20    

Je n'ai pas trop compris grosbin. Que dois-je faire ?

Reply

Marsh Posté le 20-03-2009 à 17:41:03    

Par rapport à ton script actuel il y a quelques soucis...
En premier, le MAX_FILE_SIZE que tu utilises provient du formulaire donc (même si le champs est caché) peut-être changé trèèès facilement.
 
Ensuite, je ne suis pas sûr mais je crois que le type du tableau $_FILES n'est pas fiable, utilise plutôt la fonction pathinfo :

Code :
  1. $ext = pathinfo($file, PATHINFO_EXTENSION)


Ensuite, à cause des différents emplois du caractère antislash, il faut le doubler pour l'utiliser :

Code :
  1. $file = "C:\\dir\\file";

Reply

Marsh Posté le 23-03-2009 à 09:42:55    

Alors j'ai essayé de doubler les antislash mais rien à faire, toujours la même erreur !
 
Je ne dois utiliser que des antislashs pour le répoertoire de destination ?
 
Merci beaucoup

Reply

Marsh Posté le 23-03-2009 à 16:48:49    

est ce que le fait que le chemin contienne des espaces poserait probleme ?
Fais un test avec des %20


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 23-03-2009 à 16:48:49   

Reply

Marsh Posté le 23-03-2009 à 17:11:33    


 
ca change rien, c'est une valeur limité par le php.ini, ou le htaccess, on pourrai mettre a 8To cette valeur si upload_max_filesize est a 2mo ca passera pas, et y'a aucun avantage a vouloir baisser cette valeur dans un hack

Reply

Marsh Posté le 23-03-2009 à 17:31:50    

sauf qu'on a pas forcément accès au php.ini et peut-être qu'on souhaite une limite plus basse [:petrus75]

Reply

Marsh Posté le 23-03-2009 à 17:36:31    

c'est pour ca que je precise que y'a aussi le htaccess, pour la limite c'est pas le cas ici

Reply

Marsh Posté le 24-03-2009 à 08:30:24    

As-tu testé de mettre le fichier dans d'autres repertoires ?
Tu commences par la racine C:\\ et tu descends l'arborescence d'un niveau a chaque fois pour voir ou ca coince.


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 24-03-2009 à 11:36:59    

Bonjour à tous, je suis passé par des fonctions php notament pour la taille et bizarrement ça a fonctionné !
 
Merci quand même à vous tous pour votre aide.
 

Reply

Sujets relatifs:

Leave a Replay

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