Discussion:
obtenir le path d'un fichier choisi par l'utilisateur
(trop ancien pour répondre)
Une Bévue
2014-09-06 06:44:11 UTC
Permalink
Avec le code suivant :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Choose file</title>
<style>
</style>
</head>
<body>
<div>
<?php
if(isset($_GET['file']) && isset($_GET['action'])) {
echo "File path received: '" . $_GET['file'] . "'.";
} else {
echo '<form id="file_upload_form" method="get"
enctype="multipart/form-data" action="choose_file.php">
<input name="file" id="file" size="27" type="file" /><br />
<input type="submit" name="action" value="Upload Image" /><br />
<!-- iframe id="upload_target" name="upload_target" src=""
style="width:100px;height:100px;border:5px solid #ccc;"></iframe -->
</form>';
}
?>
</div>
</body>
</html>


je ne reçois QUE le nom du fichier choisi (par exemple 'exemple.png') et
non pas le path entier ('/path/to/mon_fichier.png').

comment faire pour obtenir ce path ?
parci
2014-09-06 10:06:17 UTC
Permalink
Post by Une Bévue
if(isset($_GET['file']) && isset($_GET['action'])) {
echo "File path received: '" . $_GET['file'] . "'.";
}
je ne reçois QUE le nom du fichier choisi (par exemple 'exemple.png') et
non pas le path entier ('/path/to/mon_fichier.png').
tu peux utiliser $_FILES['file']['tmp_name']
http://www.w3schools.com/php/php_file_upload.asp
Une Bévue
2014-09-06 19:15:50 UTC
Permalink
Post by parci
tu peux utiliser $_FILES['file']['tmp_name']
http://www.w3schools.com/php/php_file_upload.asp
OK, merci bien pour l'URL, maintenant ça me donne :
Upload: Marie.png
Type: image/png
Size: 735.4677734375 kB
Stored in: /private/var/tmp/phpfcAocQ


MAIS, si je regarde au terminal :
.-[***@d620.local:~]-[08:11:32]


'->$ lal /private/var/tmp/phpfcAocQ
ls: /private/var/tmp/phpfcAocQ: No such file or directory

.-[***@d620.local:~]-[21:13:09]


'->$ lal /private/var/tmp/php*
fish: No matches for wildcard '/private/var/tmp/php*'.
lal /private/var/tmp/php*
^


le fichier '/private/var/tmp/phpfcAocQ' n'existe donc pas...
Une Bévue
2014-09-07 07:17:51 UTC
Permalink
Post by Une Bévue
'->$ lal /private/var/tmp/phpfcAocQ
ls: /private/var/tmp/phpfcAocQ: No such file or directory
'->$ lal /private/var/tmp/php*
fish: No matches for wildcard '/private/var/tmp/php*'.
lal /private/var/tmp/php*
^
le fichier '/private/var/tmp/phpfcAocQ' n'existe donc pas...
Bon, pigé, la page :
<http://www.w3schools.com/php/php_file_upload.asp>
dit expressément :
"The temporary copied files disappears when the script ends."

donc $_FILES["file"]["tmp_name"] ne donne que le path du fichier
temporaire...
Olivier Miakinen
2014-09-06 23:27:12 UTC
Permalink
Bonjour,
Post by Une Bévue
[...]
echo '<form id="file_upload_form" method="get"
enctype="multipart/form-data" action="choose_file.php">
<input name="file" id="file" size="27" type="file" /><br />
[...]
je ne reçois QUE le nom du fichier choisi (par exemple 'exemple.png') et
non pas le path entier ('/path/to/mon_fichier.png').
comment faire pour obtenir ce path ?
Pour des raisons de sécurité, je comprendrais que la machine du client
ne fournisse pas du tout ce path, et d'ailleurs que le nom du fichier
fourni puisse lui-même être n'importe quoi.

D'ailleurs, à en croire le RFC qui définit le multipart/form-data, ce
nom *PEUT* être fourni (MAY) mais ce n'est même pas un SHOULD, encore
moins un MUST : <http://tools.ietf.org/html/rfc2388#section-4.4>.

Par curiosité, que comptais-tu faire de cette info, alors qu'en tant
que serveur tu n'as évidemment pas accès à la machine du client ? Je
n'ose pas imagine que tu cherches à pirater les machines de tes
visiteurs, quand même !

Cordialement,
--
Olivier Miakinen
Une Bévue
2014-09-07 04:45:04 UTC
Permalink
Post by Olivier Miakinen
Par curiosité, que comptais-tu faire de cette info, alors qu'en tant
que serveur tu n'as évidemment pas accès à la machine du client ? Je
n'ose pas imagine que tu cherches à pirater les machines de tes
visiteurs, quand même !
ben non, le serveur est sur mon portable (Apache 2) et je souhaite
cataloguer les photos de mon répertoire
'/Volumes/SSD2/Users/yt/Pictures/Nikon Transfer 2'.
Dans ce répertoire les photos sont ordonnées par date, je souhaite
construire une base de recherche sur le contenu de la photo.

Donc, l'utilisateur (ie "moi") choisi une photo (ou un dossier) et pour
chaque photo il attribue des infos telles que Jules, Gertrude,
Hautes-Pyrénées etc...

Je ne veux pas faire d'upload vu que les photos sont au bon endroit.
Doug713705
2014-09-07 05:58:13 UTC
Permalink
Le 07-09-2014, Une Bévue nous expliquait dans
fr.comp.lang.php
Post by Une Bévue
Post by Olivier Miakinen
Par curiosité, que comptais-tu faire de cette info, alors qu'en tant
que serveur tu n'as évidemment pas accès à la machine du client ? Je
n'ose pas imagine que tu cherches à pirater les machines de tes
visiteurs, quand même !
ben non, le serveur est sur mon portable (Apache 2) et je souhaite
cataloguer les photos de mon répertoire
'/Volumes/SSD2/Users/yt/Pictures/Nikon Transfer 2'.
Dans ce répertoire les photos sont ordonnées par date, je souhaite
construire une base de recherche sur le contenu de la photo.
Donc, l'utilisateur (ie "moi") choisi une photo (ou un dossier) et pour
chaque photo il attribue des infos telles que Jules, Gertrude,
Hautes-Pyrénées etc...
Je ne veux pas faire d'upload vu que les photos sont au bon endroit.
Le serveur n'a aucun moyen de connaitre l'emplacement du fichier coté
client et c'est heureux ainsi.

Si ton but est d'associer des mots clefs à des photos stockées
_localement_ au client, ce n'est pas la bonne méthode.

Je ne suis pas féru de ce genre de logiciels mais il doit bien exister
des dizaines de logiciels de gestion de bibliothèques de photos.

Digikam, Darktable, Kphotoalbum, pour en citer trois, font ça et même
plus.
--
Et tu me dis "Reviens je suis ton jour de fête.
Reviens jouir mon amour dans ma bouche-agonie.
-- H.F. Thiéfaine, Loreleï Sebasto Cha
Une Bévue
2014-09-07 07:21:07 UTC
Permalink
Post by Doug713705
Le serveur n'a aucun moyen de connaitre l'emplacement du fichier coté
client et c'est heureux ainsi.
Oui, bien sûr, mais je suis dans un cas particulier où client et serveur
sont sur la même bécanne.
Post by Doug713705
Si ton but est d'associer des mots clefs à des photos stockées
_localement_ au client, ce n'est pas la bonne méthode.
OK, mais c'est quoi la bonne méthode ?
Post by Doug713705
Je ne suis pas féru de ce genre de logiciels mais il doit bien exister
des dizaines de logiciels de gestion de bibliothèques de photos.
Digikam, Darktable, Kphotoalbum, pour en citer trois, font ça et même
plus.
je vais regarder ça derechef.

merci beaucoup pour ces infos.
Doug713705
2014-09-07 07:41:36 UTC
Permalink
Le 07-09-2014, Une Bévue nous expliquait dans
fr.comp.lang.php
Post by Une Bévue
Post by Doug713705
Le serveur n'a aucun moyen de connaitre l'emplacement du fichier coté
client et c'est heureux ainsi.
Oui, bien sûr, mais je suis dans un cas particulier où client et serveur
sont sur la même bécanne.
Post by Doug713705
Si ton but est d'associer des mots clefs à des photos stockées
_localement_ au client, ce n'est pas la bonne méthode.
OK, mais c'est quoi la bonne méthode ?
Il n'y a pas vraiment de bonne ou mauvaise méthode, chacune ayant ses
avantages et inconvénients.

Tu peux très bien utiliser ta méthode mais cela va nécessairement
t'obliger à :
- Soit associer un mot clef au nom seul de l'image (sans le path
complet), ce qui en limitera probablement l'intérêt surtout si les noms
de fichiers sont du style IMG_000.JPG.
- Soit uploader le fichier pour le restocker dans un autre endroit
accessible par ton script (BDD, ou système de fichiers).
--
Dans le dernier écho de ton dernier silence
J'ai gardé pour la route ma rage, ma haine, et ma connerie
-- H.F. Thiéfaine, Redescente climatisée
Une Bévue
2014-09-07 08:55:19 UTC
Permalink
Post by Doug713705
Il n'y a pas vraiment de bonne ou mauvaise méthode, chacune ayant ses
avantages et inconvénients.
Tu peux très bien utiliser ta méthode mais cela va nécessairement
- Soit associer un mot clef au nom seul de l'image (sans le path
complet), ce qui en limitera probablement l'intérêt surtout si les noms
de fichiers sont du style IMG_000.JPG.
Non, mes noms de fichier sont de la forme :
'2014_08_12__10_37_26__DSC_0015.JPG'
(j'ai un script Ruby qui lit le createdate exif et range dans le bon
dossier avec le bon nom mes images dont le nom est de la forme
'DSC_xxx.JPEG ou .NEF)

il y a donc le "datetime" inclus dans le nom de fichier et, comme le
répertoire de rangement, pour celui-ci, est :

'/Volumes/SSD2/Users/yt/Pictures/Nikon Transfer 2/2014/08/12'

je peux déduire le path à partir du nom de fichier.
Post by Doug713705
- Soit uploader le fichier pour le restocker dans un autre endroit
accessible par ton script (BDD, ou système de fichiers).
pas utile.
Doug713705
2014-09-07 09:16:22 UTC
Permalink
Le 07-09-2014, Une Bévue nous expliquait dans
fr.comp.lang.php
Post by Une Bévue
il y a donc le "datetime" inclus dans le nom de fichier et, comme le
'/Volumes/SSD2/Users/yt/Pictures/Nikon Transfer 2/2014/08/12'
je peux déduire le path à partir du nom de fichier.
Ton problème est don résolu, non ?
--
J'suis la môme kaléidoscope.
C'est moi qu'j'faisais l'trottoir d'en face
Du temps ou j'avais dans l'carosse
Une chatte qu'était pas radada
-- H.F. Thiéfaine, La môme kaléïdoscope
Doug713705
2014-09-07 09:38:47 UTC
Permalink
(chouperchédèch)
Le 07-09-2014, Une Bévue nous expliquait dans
fr.comp.lang.php
Post by Une Bévue
il y a donc le "datetime" inclus dans le nom de fichier et, comme le
'/Volumes/SSD2/Users/yt/Pictures/Nikon Transfer 2/2014/08/12'
je peux déduire le path à partir du nom de fichier.
Ton problème est donc résolu, non ?
--
J'suis la môme kaléidoscope.
C'est moi qu'j'faisais l'trottoir d'en face
Du temps ou j'avais dans l'carosse
Une chatte qu'était pas radada
-- H.F. Thiéfaine, La môme kaléïdoscope
Une Bévue
2014-09-07 17:07:07 UTC
Permalink
Post by Doug713705
Ton problème est donc résolu, non ?
oui, par ma propre config ;-)
Fred
2014-09-07 09:55:58 UTC
Permalink
Post by Une Bévue
Post by Doug713705
Le serveur n'a aucun moyen de connaitre l'emplacement du fichier coté
client et c'est heureux ainsi.
Oui, bien sûr, mais je suis dans un cas particulier où client et serveur
sont sur la même bécanne.
Post by Doug713705
Si ton but est d'associer des mots clefs à des photos stockées
_localement_ au client, ce n'est pas la bonne méthode.
OK, mais c'est quoi la bonne méthode ?
Tu peux sans doute tout faire depuis le serveur en faisant une sorte
d'explorateur permettant de parcourir les dossiers de photos afin
d'afficher chaque photo avec ses infos dans un formulaire qui permettra
facilement d'ajouter ou modifier des infos.
Ce serait d'ailleurs bien plus rapide que de séléctionner une à une les
photos pour simuler un upload.

Fred
Une Bévue
2014-09-07 17:08:23 UTC
Permalink
Post by Fred
Tu peux sans doute tout faire depuis le serveur en faisant une sorte
d'explorateur permettant de parcourir les dossiers de photos afin
d'afficher chaque photo avec ses infos dans un formulaire qui permettra
facilement d'ajouter ou modifier des infos.
Ce serait d'ailleurs bien plus rapide que de séléctionner une à une les
photos pour simuler un upload.
Oui, c'est vrai, mais à fin de mise au point, je préfère travailler sur
une photo, genre dummy...
Denis Beauregard
2014-09-07 13:00:29 UTC
Permalink
Post by Doug713705
Le serveur n'a aucun moyen de connaitre l'emplacement du fichier coté
client et c'est heureux ainsi.
Sur mon serveur, il y a un gestionnaire de fichiers écrit en PHP.
Il y a donc moyen de connaître le contenu du disque local, ce qui
est le besoin ici.

Un utilitaire populaire sous DOS était Norton Commander. Il y a
peut-être un PHP Commander qui pourrait servir d'exemple ?


Denis
Une Bévue
2014-09-07 17:12:46 UTC
Permalink
Post by Denis Beauregard
Sur mon serveur, il y a un gestionnaire de fichiers écrit en PHP.
Il y a donc moyen de connaître le contenu du disque local, ce qui
est le besoin ici.
oui, en php on peut très bien balayer un répertoire par programme.
puisque php peut afficher une arborescence.
Oui, donc au lieu du "file chooser" de l'OS obtenu par :
<form action="php_file_upload.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>


je peux très bien implémenter mon propre file chooser en partant de la
racine de mon répertoire photo, et là j'aurai le path complet.
Post by Denis Beauregard
Un utilitaire populaire sous DOS était Norton Commander. Il y a
peut-être un PHP Commander qui pourrait servir d'exemple ?
je ne connais ni DOS ni Norton Commander, je roule sour OS X.
Doug713705
2014-09-10 19:57:27 UTC
Permalink
Le 07-09-2014, Denis Beauregard nous expliquait dans
fr.comp.lang.php
Post by Denis Beauregard
Post by Doug713705
Le serveur n'a aucun moyen de connaitre l'emplacement du fichier coté
client et c'est heureux ainsi.
Sur mon serveur, il y a un gestionnaire de fichiers écrit en PHP.
Il y a donc moyen de connaître le contenu du disque local, ce qui
est le besoin ici.
Bien sûr que PHP peut parcourir une arborescence locale (sous-réserve
qu'il dispose des droits suffisants) mais dans ce cas il est totalement
inutile d'uploader un fichier (upload qui ne permettra pas de récupérer
l'emplacement précis du fichier coté client, y compris si client et
serveur sont confondus sur la même machine physique).

Par contre on peut proposer au client de définir le répertoire local au
serveur à partir duquel commencer la recherche, par exemple avec une
plus ou moins jolie représentation graphique de l'arborescence locale
au serveur sur laquelle cliquouiller soit avec un simple champs de
saisie de texte.

Les deux cas ont leurs avantages et inconvénients.
--
On vit comme ça par habitude
Et surtout parce que c'est pratique
De pallier la solitude
En buvant à la même barrique
-- H.F. Thiéfaine, La dèche, le twist et le reste
Une Bévue
2014-09-11 05:15:45 UTC
Permalink
Post by Doug713705
Par contre on peut proposer au client de définir le répertoire local au
serveur à partir duquel commencer la recherche, par exemple avec une
plus ou moins jolie représentation graphique de l'arborescence locale
au serveur sur laquelle cliquouiller soit avec un simple champs de
saisie de texte.
Oui, c'est mon cas, la recherche commence dans mon dossier photos.
Le problème que je rencontre c'est comment mémoriser, avec php les
dossiers ouverts, je m'explique :

- dans un premier temps un script php, disons tree.php, représente une
hiérarchie de dossiers, disons le premier niveau ;
- l'utilisateur clique sur un dossier et appelle l'URL
tree.php?dossier=path-to-le-dossier-choisi ;
- tree.php renvoie l'arborescence précédente augmentée du contenu de
'path-to-le-dossier-choisi' ;
- ce dossier apparaît donc comme ouvert, ça roule ;
- supposons que l'utilisateur clique sur d'autres dossiers, c'est là
qu'apparaît, pour moi, un problème, comment transmettre par URL, ou
autre, à tree.php l'ensemble des dossiers ouverts ?

par variable de session, cookie ?

pour contourner ce pb, j'envisage d'utiliser XHR, avoir donc un script
JS qui demande à un script php uniquement le contenu d'un dossier, celui
sur lequel l'utilisateur a cliqué, ROOT au démarrage pour amorcer le
système.

là, c'est l'interface html + JS elle-même qui mémorise l'ensemble des
dossiers ouverts.
Fred
2014-09-11 10:16:41 UTC
Permalink
Post by Une Bévue
par variable de session, cookie ?
Les 2 sont valables, et pas plus dur à utiliser qu'ajax.

J'utiliserais plutôt un cookie avec une durée assez longue pour pouvoir
reprendre au même endroit après un arrêt.
Une Bévue
2014-09-12 04:59:23 UTC
Permalink
Post by Fred
Post by Une Bévue
par variable de session, cookie ?
Les 2 sont valables, et pas plus dur à utiliser qu'ajax.
J'utiliserais plutôt un cookie avec une durée assez longue pour pouvoir
reprendre au même endroit après un arrêt.
ouais, m'enfin, je suis passé à ajax, c'est plus efficace, amha, c'est
asynchrone et puis je fabrique mes thumbnail à la volée.

l'interaction JS/Php est, pour moi, plus facile avec ajax.

Loading...