Chemin absolu avec input type=file : bug ou feature ?
Chemin absolu avec input type=file : bug ou feature ?
Bonsoir à tous,
J'ai rencontré un petit problème : dans une page je mets un formulaire avec un champ input avec type=file pour sélectionner un fichier et transmettre le nom de celui-ci à une page PHP.
Tout se passe normalement dans la page HTML : le champ de texte correspondant affiche bien le chemin dans son entier, mais s'il s'agit d'un chemin absolu, seul le nom du fichier est passé dans la variable. Par exemple, je navigue jusqu'au fichier c:\documents\exemples\tmp\fichier.txt, la variable transmise ne contiendra que fichier.txt (alors que le champ de texte affiche bien c:\documents\exemples\tmp\fichier.txt). En revanche si je saisis tmp\fichier.txt (en supposant que le script PHP se trouve dans c:\documents\exemples\), la variable transmise vaut bien c:\documents\exemples\, et tout fonctionne.
Au début, j'avais pensé à un pb au niveau du PHP, mais j'ai fait le test avec IE et tout se passe "normalement" (le pb se présente avec Mozilla 1.7.1. et Firefox 0.9.2)
J'ai "googlé" un peu sur le sujet, mais sans succès : donc il y a peut-être un truc évident qui m'échappe.
Merci pour vos lumières !
Vlad
Voici le code HTML/PHP concerné :
dans la page HTML
<form method="post" name="formselec" action="detraitement.php">
<input name="fichier" tabindex="1" type="file" size="40"/>
<input value="Envoyer" type="submit">
</form>
Page PHP
<? $nom_fichier = $HTTP_POST_VARS['fichier']; ?>
<body>
<p>Nom du fichier: <? echo $nom_fichier; ?></p>
</body>
J'ai rencontré un petit problème : dans une page je mets un formulaire avec un champ input avec type=file pour sélectionner un fichier et transmettre le nom de celui-ci à une page PHP.
Tout se passe normalement dans la page HTML : le champ de texte correspondant affiche bien le chemin dans son entier, mais s'il s'agit d'un chemin absolu, seul le nom du fichier est passé dans la variable. Par exemple, je navigue jusqu'au fichier c:\documents\exemples\tmp\fichier.txt, la variable transmise ne contiendra que fichier.txt (alors que le champ de texte affiche bien c:\documents\exemples\tmp\fichier.txt). En revanche si je saisis tmp\fichier.txt (en supposant que le script PHP se trouve dans c:\documents\exemples\), la variable transmise vaut bien c:\documents\exemples\, et tout fonctionne.
Au début, j'avais pensé à un pb au niveau du PHP, mais j'ai fait le test avec IE et tout se passe "normalement" (le pb se présente avec Mozilla 1.7.1. et Firefox 0.9.2)
J'ai "googlé" un peu sur le sujet, mais sans succès : donc il y a peut-être un truc évident qui m'échappe.
Merci pour vos lumières !
Vlad
Voici le code HTML/PHP concerné :
dans la page HTML
<form method="post" name="formselec" action="detraitement.php">
<input name="fichier" tabindex="1" type="file" size="40"/>
<input value="Envoyer" type="submit">
</form>
Page PHP
<? $nom_fichier = $HTTP_POST_VARS['fichier']; ?>
<body>
<p>Nom du fichier: <? echo $nom_fichier; ?></p>
</body>
Je crois que cette variable a tout simplement aucun interrais en soit...
Le mieux c'est de regarder ici :
http://www.nexen.net/docs/php/annotee/f ... post_files
Le mieux c'est de regarder ici :
http://www.nexen.net/docs/php/annotee/f ... post_files
Inscrit sur la liste des abonner absent...
alors file n'est pas fait pour...
file est fait pour récupérer un fichier...
Donc imagine que tu pointe sur un fichier de 1go, il vas chercher à en faire une copie... Et risque de planter s'il n'as pas le droit de télécharger plus de 2Mo...
A mon avie le mieux c'est d'extraire le <input type="file" du <form> Et utiliser un bouton normale qui iras chercher l'adresse du fichier et le stockeras dans un hiden.
Car si le <input type="file" reste dans le form tu auras téléchargement, rapide puisque qu'en local, mais inutile...
file est fait pour récupérer un fichier...
Donc imagine que tu pointe sur un fichier de 1go, il vas chercher à en faire une copie... Et risque de planter s'il n'as pas le droit de télécharger plus de 2Mo...
A mon avie le mieux c'est d'extraire le <input type="file" du <form> Et utiliser un bouton normale qui iras chercher l'adresse du fichier et le stockeras dans un hiden.
Car si le <input type="file" reste dans le form tu auras téléchargement, rapide puisque qu'en local, mais inutile...
Inscrit sur la liste des abonner absent...
Merci beaucoup. A l'avenir, je vais tâcher de RTFM un peu plus consciencieusement
En fait, mon système est un peu bancal, parce que ça ne peut marcher que lorsque les fichiers en question sont sur des disques partagés accessibles depuis le client et le serveur.
Merci encore pour vos avis d'expert.
Vlad

Merci encore pour vos avis d'expert.
Vlad
Ce dont j'ai besoin c'est de traiter des fichiers de texte, qui sont sur des disques du réseau local, donc accessibles à la fois par les clients et par le serveur sur lequel tourne PHP : donc du point de vue de PHP, les fichiers sont déjà "locaux".
En fait, ce que je vais faire, c'est juste un champ de texte normal dans le formulaire pour le nom des fichiers, et tout devrait fonctionner.
En fait, ce que je vais faire, c'est juste un champ de texte normal dans le formulaire pour le nom des fichiers, et tout devrait fonctionner.
Qui est en ligne ?
Utilisateurs parcourant ce forum : Google [Bot] et 5 invités