Page 1 sur 2

<input type="file" > => comment récupérer

Posté : 24 déc. 2005, 03:02
par karpediem
Bonjour,

J'ai 1 formulaire qui me sert à récupérer 1 image sur mon poste local et à la copier sur mon serveur.
Voici un résumé du code de ma page index.php :

<form action="index.php" method="post" enctype="multipart/form-data" name="form1" >
Fichiers à transf&eacute;rer
<input type="file" name="fichier" >
<br><br>
<input type="submit" name="GO" value="Transférer">
</form>

Mon gros pb c'est que je n'arrive pas à récupérer le chemin complet du fichier à transférer. Je trouve bien le nom avec $_FILES['fichier']['name'] mais pas le path, même pas avec pathinfo($_FILES['fichier']['name']).
C'est d'autant plus génant que dans un 2eme temps je propose de copier tout le contenu du répertoire...

Mon deuxième pb c'est que je souhaiterai garder la valeur de file dans mon champ input, même après avoir validé mon formulaire.

MERCI @ tous et JOYEUX NOËL

Posté : 24 déc. 2005, 03:06
par @rthur
Bonsoir,

Ce que tu cherches à faire est impossible car c'est le fichier qui est envoyé au serveur et non son emplacement sur le disque dur du visiteur.
De plus, pour des raisons de sécurité, il n'est pas possible d'affecter de façon automatique (ni par défaut avec le paramètre value="...") le contenu d'un champ de type input file.

Posté : 24 déc. 2005, 03:18
par karpediem
C'est tarrifiant ce que tu me dis...

Comment puis-je faire alors pour choisir 1 fichier sur mon disque local et l'envoyer sur mon serveur ?

Posté : 24 déc. 2005, 03:27
par @rthur
Mais non c'est pas si terrifiant que ça ;)

Pour faire simple, je vais tenter de résumer l'utilité de ce champ:

Le champ <input type="file" /> permet a un utilisateur de sélectionner un fichier sur son disque dur local.
Quand il envoie le formulaire, le fichier sélectionné est uploadé sur le serveur distant.
Le script PHP reçoit donc (via la variable $_FILES) le fichier et quelques infos en plus comme son nom, le type renvoyé par le navigateur, etc...

Le chemin complet du fichier sur le disque dur de l'utilisateur ne peut pas être connu par le script PHP.
De plus, seul l'utilisateur peut sélectionner un fichier sur son disque dur (le concepteur de la page ne peut pas pré-remplir ou modifier ce champ)

Posté : 24 déc. 2005, 03:44
par karpediem
alors si je fais une copier de $_FILES['fichier']['name'] vers un emplacement de mon serveur, ça va marcher ?

Posté : 24 déc. 2005, 04:04
par @rthur
alors si je fais une copier de $_FILES['fichier']['name'] vers un emplacement de mon serveur, ça va marcher ?
Il existe une fonction toute faite ;)
http://fr.php.net/move_uploaded_file

Posté : 24 déc. 2005, 04:30
par karpediem
move_uploaded_file() s'assure que le fichier filename est un fichier téléchargé par HTTP POST => le fait d'avoir sélectionné un fichier par le input de type file, a pour effet de télécharger le fichier ? J'ai tjrs la même question : comment fait le programme pour savoir où aller chercher le fichier à copier ?

Posté : 24 déc. 2005, 04:36
par karpediem
ok, j'ai compris... je suis un peu fatiguée, mais en relisant tes réponse j'ai compris comment il se débrouille... Mais alors, je ne peux pas 'ruser' pour donner l'impression que ça fonctionne comme je le souhaite, cest-à-dire afficher le nom du fichier après la validation du formulaire même si ce n'est pas dans un input ? => faire juste un echo ? Et pour le répertoire source, je vais être obligée de l'imposer pour le cas où l'utilisateur choisisse l'option 'tous les fichiers du même répertoire' ?
Tu vois autre chose ?

Posté : 24 déc. 2005, 11:58
par @rthur
Mais alors, je ne peux pas 'ruser' pour donner l'impression que ça fonctionne comme je le souhaite, cest-à-dire afficher le nom du fichier après la validation du formulaire même si ce n'est pas dans un input ? => faire juste un echo ?
Si, c'est possible. Tu peux afficher le nom du fichier uploadé mais pas son chemin complet issu du disque dur du visiteur.
Et pour le répertoire source, je vais être obligée de l'imposer pour le cas où l'utilisateur choisisse l'option 'tous les fichiers du même répertoire' ?
Impossible à faire avec un "simple" formulaire HTML.
Tu ne peux récupérer par le biais du HTML+PHP que les fichiers qui ont été sélectionné un par un par l'utilisateur via des champs de type input file. Il est impossible via ces même balises input file d'uploader le contenu de tout un répertoire.

Pour faire ça il faut avoir recours à une applet java.
Quelques pistes (que je n'ai pas testé):
http://jupload.sourceforge.net/
http://www.javazoom.net/applets/jclient ... ad_fr.html
http://www.unlimitedftp.ca/products/uupload/

Posté : 24 déc. 2005, 12:02
par iclo
La raison de ces limitations, c'est la sécurité, sans quoi le vol de fichier à l'insu de l'internaute serait un jeu d'enfant.

Posté : 26 déc. 2005, 05:56
par karpediem
est-ce que si je choisit d'imposer mon répertoire local, par exemple c:/fichier/ et que je veux copier la totalité du contenu vers un répertoire du serveur, sans passer cette fois-ci par les <input type="file"> est-ce que ça peut marcher ? j'ai déjà fait de serveur à serveur, mais là, je ne suis pas sure que php arrive à lire mon répertoire en local car mon test is_dir('c:/fichier/') me renvoie false ;-(( est-ce normal docteur ?

Posté : 26 déc. 2005, 11:35
par zeus
la syntaxe "C:\dir\" est très liée à un environnement Win32 (windows) et si ton serveur distant est un serveur Linux => ça plante

De plus, si ton script est sur ton serveur distant et que tu veux acceder à ton poste local, c'est pas avec C:\ que tu vas y arriver vu que c'est ta vue locale

A mon avis, ce que tu cherches à faire est impossible. Toujours pour des raisons de sécurité.
Tu imagines ? je crée un programme qui copie c:\ de tous les pc qui se connectent sur mon site ?

Posté : 26 déc. 2005, 11:45
par Invité
oui effectivement, c'est la raison pour laquelle j'ai pensé que je n'y accèderai pas car sinon c'est comme si je fournissais des fonctionnalités ftp sans avoir de mot de passe pour la connexion ;-(

soit je repense mon histoire, genre transfert fichier par fichier avec le <input type=file> soit avec les applet java...

merci pour tous ces info...

Posté : 26 déc. 2005, 14:06
par pjl
Je rapelle quand même qu'il existe déjà tout un tutau sur l'upload : http://www.phpfrance.com/tutoriaux/inde ... e-fichiers

Posté : 16 avr. 2007, 10:19
par Invité
Mais alors, je ne peux pas 'ruser' pour donner l'impression que ça fonctionne comme je le souhaite, cest-à-dire afficher le nom du fichier après la validation du formulaire même si ce n'est pas dans un input ? => faire juste un echo ?
Si, c'est possible. Tu peux afficher le nom du fichier uploadé mais pas son chemin complet issu du disque dur du visiteur.
Et pour le répertoire source, je vais être obligée de l'imposer pour le cas où l'utilisateur choisisse l'option 'tous les fichiers du même répertoire' ?
Impossible à faire avec un "simple" formulaire HTML.
Tu ne peux récupérer par le biais du HTML+PHP que les fichiers qui ont été sélectionné un par un par l'utilisateur via des champs de type input file. Il est impossible via ces même balises input file d'uploader le contenu de tout un répertoire.

Pour faire ça il faut avoir recours à une applet java.
Quelques pistes (que je n'ai pas testé):
http://jupload.sourceforge.net/
http://www.javazoom.net/applets/jclient ... ad_fr.html
http://www.unlimitedftp.ca/products/uupload/