Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2433 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Récupérer le chemin de fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] Récupérer le chemin de fichier

n°1173374
neo00neo
Posté le 09-08-2005 à 16:27:26  profilanswer
 

Bonjour, j'aimerai récupérer le chemin complet d'un fichier pour faireun upload avec le CGI.
Voici mon code :
 
if (defined(param('ok_depos'))){
 
 print "On dépose le fichier<br />";
 
 $donnees = param('file');
 
 print "Dans donnees : ".$donnees,p;
 
 open(ORIGINAL,'C:/Test/test_jsExemple.html') || die "Impossible de d'ouvrir le fichier original"; #C'est ici que j'ai un problème, si je remplace le chemin par $donnees, je n'ai rien qui se passe
 
 open COPIE, ">".$value."/".$donnees;
 print "On arrive ici...",p;
 
 while (<ORIGINAL> ){
      print COPIE $_;
     }
 close(COPIE);
 close(ORIGINAL);
 
 print "Fichier déposé";
}
 
En fait, j'utilise Firefox, et param('file'), ne me retourne que le nom du fichier, or j'aurais besoin du chemin complet pour copier ce fichier sur le serveur.
Merci d'avance

mood
Publicité
Posté le 09-08-2005 à 16:27:26  profilanswer
 

n°1173523
pospos
Posté le 09-08-2005 à 18:44:04  profilanswer
 

et le chemin tu le connais? Pasque sinon on peu pas l'inventer si ton formulaire ne le connait pas. c'est donc du coté de ton formulaire d'upload qu'il faut regarder:
- esque 'file' doit contenir le chemin complet?
- esqu'un autre parametre le contient?

n°1173524
pospos
Posté le 09-08-2005 à 18:44:46  profilanswer
 

deja test systematiquement la sortie de ton open:
 
open(COPIE, '>'....) || die "impossible d'ouvire le fichier: $!";

n°1173729
neo00neo
Posté le 10-08-2005 à 10:25:17  profilanswer
 

Le truc c'est que le open marche, vu qu'il me créé un fichier la ou il faut avec le bon nom.
Le chemin du fichier je le vois dans mon formulaire quand utilise le <INPUT type=file...>.
Malheureusement quand je fais param('file'), sous firefox il ne me retourne que le nom du fichier, et je voudrais qu'il me retourne le chemin complet.
Or je veux qu'il soit compatible tout type de navigateur.

n°1173765
pospos
Posté le 10-08-2005 à 11:02:14  profilanswer
 

si le fichier est copié c'est bien que le chemin complet est "$value/$donnees" non?

n°1173772
neo00neo
Posté le 10-08-2005 à 11:10:41  profilanswer
 

Oui ça c'est le fichier copié sur le serveur. En fait ça le copie au bon endroit.
Dans le copie ayant pour filehandle ORIGINAL, c'est là que je n'arrive pas à récupérer le chemin du fichier que je veux uploader. En utilisant un input type=text, non? en hidden?
En tout cas, c'est vraiment ce =)=)"=)'à" de chemin qui me manque, si je le rentre en dur ça marche nickel chrome d'acier trempé ! Merc ide ton aide !

n°1173793
pospos
Posté le 10-08-2005 à 11:35:56  profilanswer
 

je comprend pas trop ton histoire...
tu veux le chemin du fichier sur le post du client? pour koi faire?

n°1173797
neo00neo
Posté le 10-08-2005 à 11:39:45  profilanswer
 

En gros je veux faire un copier coller ( ou un upload ), or pour y arriver je dois faire un :
 open FICHIER_CLIENT #et la j'ai le chemin contenu de le input file#
 open FICHIER_SERVEUR "Ici le chemin que le client a spécifié, mais ça c'est bon#
 
Donc voilà, je n'arrive pas à faire ce open du fichier client.
Merci

n°1173882
pospos
Posté le 10-08-2005 à 14:02:27  profilanswer
 

c'est normal que tu ne puisse pas ouvire ce fichier: il est chez le client, et ton script s'execute sur le serveur!
Pour faire un upload il faut que le client t'envois le contenu de son fichier dans sa requete (dans le corps du POST).
Le module CGI gere ca.

n°1173893
neo00neo
Posté le 10-08-2005 à 14:12:50  profilanswer
 

Oui mais avec la fonction  
$mavariable = param('file')  
normalement je récupère le nom de fichier, seulement le nom, je veux tout le chemin.
Sinon peux tu me mettre un exemple stp? Parce que la j'avoue que je suis perdu !

mood
Publicité
Posté le 10-08-2005 à 14:12:50  profilanswer
 

n°1173922
pospos
Posté le 10-08-2005 à 14:59:11  profilanswer
 

le chemin ne te servira à rien: tu ne PEUX PAS aller ouvrire le fichier toi meme sur le poste du client!
evidemment tu peux le faire si le serveur et le client sont sur la meme machine, mais j'imagine que ca n'est pas ce que tu veux...
 
donc comme tu ne peux pas toi meme faire un open sur ce fichier, c'est le client qui doit t'en envoyer le contenu. Tu aura alors ce contnu dans une variable que tu pourra ensuite printer vers ton fichier de destination sur ton serveur.
Regarde la doc du module CGI, tout est explique:
http://search.cpan.org/~lds/CGI.pm-3.11/CGI.pm

n°1173943
neo00neo
Posté le 10-08-2005 à 15:23:21  profilanswer
 

Et comment je fais alors pour un upload? Aurais tu un srcipt dispo sous la main? Sinon c'est pas grave, merci bien !

n°1173960
pospos
Posté le 10-08-2005 à 15:34:13  profilanswer
 

regarde le lien que je t'ai filé

n°1173969
pospos
Posté le 10-08-2005 à 15:37:14  profilanswer
 

http://search.cpan.org/~lds/CGI.pm [...] LOAD_FIELD
 

Citation :

Different browsers will return slightly different things for the name. Some browsers return the filename only. Others return the full path to the file, using the path conventions of the user's machine. Regardless, the name returned is always the name of the file on the user's machine, and is unrelated to the name of the temporary file that CGI.pm creates during upload spooling (see below).


 
et just en dessous ils expliquent
 
en gros ton nom de fichier est en fait un filehandle perl, donc il te suffit de faire:
 
while my $line (<$donnees> ) {
  print OUTPUT $line;
}


Message édité par pospos le 10-08-2005 à 15:37:51
n°1173978
neo00neo
Posté le 10-08-2005 à 15:42:58  profilanswer
 

Désolé d'être relou, mais ton script que tu m'as filé ne marche pas, il comprend pas le : while my $line...
Si t'avais un autre système avec un for each peut être, ou un truc dans le genre.
En tout cas merci.
La doc que tu m'as filé existe en français, mais ça ne marche pas chez moi.

n°1173991
neo00neo
Posté le 10-08-2005 à 15:52:20  profilanswer
 

J'ai réalisé ça :
foreach my $line (<$donnees> ) {
    print COPIE $line;
 }
 
mais ça ne marche pas non plus, il me créé un fichier avec le bon nom, mais le fichier est vide.

n°1174042
pospos
Posté le 10-08-2005 à 16:36:27  profilanswer
 

j'ai pas testé, c'etait juste pour te montrer
 
lit la doc (je t'ai filé le lien qui pointe DIRECTEMENT sur la bonne section) !!!!!

n°1174043
neo00neo
Posté le 10-08-2005 à 16:37:15  profilanswer
 

Oui je l'ai lu la doc...Même en francais en plus. Mais ça ne marche pas, mon fichier créé est vide.

n°1174046
neo00neo
Posté le 10-08-2005 à 16:41:45  profilanswer
 

Regarde dans la doc il mette faire ça :
#J'ai changé pour mettre mes noms de variables
#ici je récupère le nom du fichier
$donnees = param('file');
 
 # Read a text file and print it out
        while (<$donnees> ) {
           print;
        }
 
 # Copy a binary file to somewhere safe
        open (COPIE,">>".$value."/".$donnees);
        while ($bytesread=read($donnees,$buffer,1024)) {
           print COPIE $buffer;
        }
 
Mais mon fichier est toujours vide...
$donnees ne m'affiche rien, pour moi en faisant print $donnees, j'obtiens le nom du fichier.
Et au final le fichier créé est vide.

n°1174061
pospos
Posté le 10-08-2005 à 16:54:46  profilanswer
 

en dessous ils expliquent une autre method pour chopper le handler
 
et puis met un "use strict;" dans ton code

n°1174359
neo00neo
Posté le 11-08-2005 à 10:29:58  profilanswer
 

Ouai je comprends que je ne récupère qu'une chaine de caractère et donc j'utilise $donnees = upload('file');
Mais je n'arrive pas à utiliser la suite, je ne comprends pas trop. Merci de ton aide

n°1174388
neo00neo
Posté le 11-08-2005 à 10:54:59  profilanswer
 

Je ne récupère rien dans mon filehandle...
Voilà la suite de mon code pourtant :
open (COPIE,">".$value."/".$donne);
        while ($bytesread=read($donnees,$buffer,1024)) {
           print COPIE $buffer;
        }
 
avec $donne = param('file');
 
J'ai donc toujours un fichier vide de créé.

n°1174590
neo00neo
Posté le 11-08-2005 à 14:30:15  profilanswer
 

Bon ben, si quelqu'un à un petit script perl pour uploader des fichiers?
Je n'y arrive pas malgré tout ce que j'ai pu trouvé, merci !


Message édité par neo00neo le 11-08-2005 à 14:30:40
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Récupérer le chemin de fichier

 

Sujets relatifs
FileExists > rechercher la présence de fichier dans un répertoire.[VB .NET]Attaquer une DLL C++ et lui passer et récupérer des Strings
fichier dans .jarEcrire dans un fichier sur un client
URL fichier distant[RESOLU] Récupérer résultat d'1 requête SQL dans 1 script bourne shell
imprimer un fichier distantRécupérer le nom de session windows du client dans un réseau local
[MySQL]Récupérer un seul enregistrement[Résolu] Récupérer valeur oui/non
Plus de sujets relatifs à : [Perl] Récupérer le chemin de fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR