IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Quel est le chemin du fichier associé à mon Filehandle ?


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Quel est le chemin du fichier associé à mon Filehandle ?
    Tout est un peu dit dans le titre.

    Après un upload de fichier vers mon script CGI, il me serait commode de connaître le chemin du fichier qui se cache derrière le descripteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use CGI;
    $CGI_query = new CGI;
    my $fh = $CGI_query->upload('champ_input_file');
     
    # $fh est un filehandle
    # visiblement selon la doc du cpan le fichier uploadé
    # est quelque part sur /tmp et $fh est un descripteur
    # vers ce fichier.
    # Je suppose que le chemin complet du fichier est "/tmp/foo/bar".
    # Comment retrouver ce chemin à partir de $fh ? please help !
    J'imagine que comme à chaque fois il y a différentes façons de faire mais au moins une pas trop gourmande me rendrait bien service :o

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Il suffit d'utiliser param() comme pour les autres paramètres d'un formulaire. Selon les systèmes, param() te renverra le chemin complet ou seulement le nom du fichier.

    --
    Jedaï

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    J'ai été revérifier tes conseils pour voir si ce que j'avais lu sur la doc je l'avais bien lu et en fait ce que tu me propose ne correspond pas vraiment à mon attente. Ceci dit c'est sympa de proposer.

    Selon la doc :
    Quand le formulaire est traité, vous pouvez retrouver le nom du fichier téléchargé en appelant la méthode param()

    ...

    Ceci étant, le nom retourné est toujours le nom du fichier sur la machine de l'utilisateur. Il n'a aucun rapport avec le nom du fichier temporaire que CGI.pm crée pendant le téléchargement.
    Moi c'est bien le nom du fichier temporaire et son chemin sur le serveur que je cherche et pas celui sur lequel le navigateur tourne.

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Bon finalement j'ai glané une astuce qui fonctionne sous Unix et ça me va plutôt.
    Je ne sais pas vraiment s'il y a des effets de bord par contre car l'astuce relève plus du système que de Perl.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    use CGI;
     
    $CGI_query = new CGI;
     
    my $fullpath = readlink "/proc/$$/fd/" . fileno $CGI_query->param('champ_input_file');
    warn $fullpath;
    Les remarques sont les bienvenues ! Ou des autres façons de faire ?

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Ah ok... Mais pour quoi faire ? Tu n'en as absolument pas besoin a priori... :

    --
    Jedaï

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Si tu veux tout savoir, mon script CGI sert de relais.
    1/ Je reçois le formulaire du navigateur,
    2/ Je traite les infos qui m'interessent avec quelques enregistrements vers MySQL
    3/ Je détermine vers quel(s) autre(s) serveur(s) je dois stocker les fichiers du formulaire.
    4/ En conséquence, j'envoie les fichiers que j'ai reçu vers un (des) autre(s) serveur(s) via LWP.

    Donc mon but est de travailler sur le fichier que j'ai reçu pour pouvoir le réemettre sans en faire une copie inutile.

    Voilà l'affaire.

    C'est vrai que je n'ai pas regardé du côté de LWP pour savoir si on pouvait envoyer un formulaire POST avec un input file provenant d'un filehandle ...
    Ce serait peut être mieux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/10/2013, 08h46
  2. Quel est le chemin de msconfig avec XP !
    Par cincap dans le forum Débuter
    Réponses: 4
    Dernier message: 10/12/2012, 10h31
  3. quel est le role du fichier security2.fdb?
    Par aek_gh dans le forum Administration
    Réponses: 1
    Dernier message: 16/04/2010, 01h02
  4. Réponses: 1
    Dernier message: 01/01/2010, 20h31
  5. Quel est le type de RAM de mon pc?
    Par toitonline dans le forum Composants
    Réponses: 10
    Dernier message: 29/11/2007, 18h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo