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

Web Perl Discussion :

[cgi] Créer un répertoire dynamiquement en perl


Sujet :

Web Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Par défaut [cgi] Créer un répertoire dynamiquement en perl
    Bonjour,
    J'essaie de faire le truc le plus simple du monde et je n'arrive pas... et j'ai vraiment plus d'idée...
    Voilà je souhaite lire la date et l'heure système et créer un répertoire avec ces paramètres

    le résultat de l'exécution est
    200612041934
    erreur création répertoire

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use CGI qw(:all);
    use Cwd;
    $datestr = `date /T` ;
    $heurestr = `time /T` ;
    ($jour, $date) = split (/ /, $datestr);
    ($jj, $mm,$aaaa) = split(/\//, $date);
    ($hh, $min,) = split(/:/, $heurestr);
    $mon_repertoire = "$aaaa"."$mm"."$jj"."$hh"."$min" ;
    print "$mon_repertoire" ;
    mkdir ($mon_repertoire) or die ("Erreur creation repertoire\n");
    Pouvez-vous m'aider s'il vous plaît ?
    Lors que je mets le nom du répertoire en dur ça marche ! On ne peut pas générer dynamiquement le nom d'un répertoire en PERL ?

    Merci pour votre aide
    Samuel

  2. #2
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    L'erreur vient surement du fait que tu crées un répertoire en chemin relatif et non en répertoire absolu.

    PS :

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Par défaut
    Citation Envoyé par MarneusCalgarXP
    L'erreur vient surement du fait que tu crées un répertoire en chemin relatif et non en répertoire absolu.

    PS :
    Non le problème est pas ça. J'ai le même résultat par contre cela m'a permis de comprendre mon problème mais je n'ai toujours pas de solution. Donc merci quand même de m'avoir aidé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    $che_chemin_1 = "C:/user/Attestation_XML";
    $sav_chemin_1 = "C:/user/Attestation_XML/Technique/trace_traitement";
    $datestr = `date /T` ;
    $heurestr = `time /T` ;
     
    ($hh, $min,) = split(/:/, $heurestr);
    $variable = "$aaaa"."$mm"."$jj"."$hh"."$min" ;
    $mon_repertoire = $sav_chemin_1 . "/" . $variable ;
    print "$mon_repertoire" ;
    mkdir ($mon_repertoire) or die ("Erreur creation repertoire\n");
     
    chdir($che_chemin_1) or die ("Erreur chdir pour aller dans le répertoire de l'application \n");
    while (<*.*>){
        $nom_fichier_dest =  $mon_repertoire . "/" . $_;
        print "$nom_fichier_dest \n" ;
        move("$_","$nom_fichier_dest") or die "erreur move : $_!";
    }
    J'ai toujours le message "Erreur creation repertoire". Mais le display (print "$nom_fichier_dest \n" montre que j'ai un saut de page après $variable. Résultat : C:/user/Attestation_XML/Technique/trace_traitement/20061205 734
    /1.bat
    Comment supprimer le saut de ligne entre 20061205 734 et /1.bat... j'ai essayé avec la commande chomp mais cela ne marche pas... pouvez-vous encore m'aider... désolé pour ma demande de contribution à mon problème. Bonne journée à tout le monde et merci pour la première réponse elle m'a permi de comprendre mon erreur. Bon je vais chercher de mon coté maintenant que j'ai une dirrection où chercher.

    Sinon j'ai une question secondaire... j'exécute mes scripts perl depuis un .bat... je fais une redirection pour mettre le compte rendu de l'éxécution perl dans un fichier. Niveau présentation c'est pas terrible il met tout l'un au bout de l'autre sans tenir compte des sauts de ligne... en plus il ne met même pas les erreurs. Quand j'exécute le script perl directement dans une invite msdos j'ai la présentation ci-dessous. Comment mettre les lignes ci-dessous dans un fichier avec la même présentation avez-vous une idée ? Voici la commande que j'exécute en DOS : PERL "C:\user\Attestation_XML\Technique\script_perl\sauvergarde_fichier_travail_1_v3.cgi" > sauvegarde.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    C:\USER\Attestation_XML>PERL "C:\user\Attestation_XML\Technique\script_perl\sauergarde_fichier_travail_1_v3.cgi"
    <--------------------------------------------------->
    <Debut de traitement PERL                           >
    <--------------------------------------------------->
      Deplacer les fichiers de travail
      Date du traitement  : mar. 05/12/2006
      Heure du traitement :  7:34
     
    variable : 20061205 734
     
    mon repertoire : C:/user/Attestation_XML/Technique/trace_traitement/20061205 734
     
     
    C:/user/Attestation_XML/Technique/trace_traitement/20061205 734
    /1.bat
    Unsuccessful stat on filename containing newline at C:/Perl/lib/File/Copy.pm li
    e 184.
    Unsuccessful stat on filename containing newline at C:/Perl/lib/File/Copy.pm li
    e 188.
    Unsuccessful stat on filename containing newline at C:/Perl/lib/File/Copy.pm li
    e 203.
    Unsuccessful stat on filename containing newline at C:/Perl/lib/File/Copy.pm li
    e 91.
    erreur move : 1.bat! at C:\user\Attestation_XML\Technique\script_perl\sauvergar
    e_fichier_travail_1_v3.cgi line 46.

  4. #4
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Par défaut
    Citation Envoyé par Samuel25_t
    Non le problème est pas ça. J'ai le même résultat par contre cela m'a permis de comprendre mon problème mais je n'ai toujours pas de solution. Donc merci quand même de m'avoir aidé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    $che_chemin_1 = "C:/user/Attestation_XML";
    $sav_chemin_1 = "C:/user/Attestation_XML/Technique/trace_traitement";
    $datestr = `date /T` ;
    $heurestr = `time /T` ;
     
    ($hh, $min,) = split(/:/, $heurestr);
    $variable = "$aaaa"."$mm"."$jj"."$hh"."$min" ;
    $mon_repertoire = $sav_chemin_1 . "/" . $variable ;
    print "$mon_repertoire" ;
    mkdir ($mon_repertoire) or die ("Erreur creation repertoire\n");
     
    chdir($che_chemin_1) or die ("Erreur chdir pour aller dans le répertoire de l'application \n");
    while (<*.*>){
        $nom_fichier_dest =  $mon_repertoire . "/" . $_;
        print "$nom_fichier_dest \n" ;
        move("$_","$nom_fichier_dest") or die "erreur move : $_!";
    }
    J'ai toujours le message "Erreur creation repertoire". Mais le display (print "$nom_fichier_dest \n" montre que j'ai un saut de page après $variable. Résultat : C:/user/Attestation_XML/Technique/trace_traitement/20061205 734
    /1.bat
    Comment supprimer le saut de ligne entre 20061205 734 et /1.bat... j'ai essayé avec la commande chomp mais cela ne marche pas... pouvez-vous encore m'aider... désolé pour ma demande de contribution à mon problème. Bonne journée à tout le monde et merci pour la première réponse elle m'a permi de comprendre mon erreur. Bon je vais chercher de mon coté maintenant que j'ai une dirrection où chercher.

    Sinon j'ai une question secondaire... j'exécute mes scripts perl depuis un .bat... je fais une redirection pour mettre le compte rendu de l'éxécution perl dans un fichier. Niveau présentation c'est pas terrible il met tout l'un au bout de l'autre sans tenir compte des sauts de ligne... en plus il ne met même pas les erreurs. Quand j'exécute le script perl directement dans une invite msdos j'ai la présentation ci-dessous. Comment mettre les lignes ci-dessous dans un fichier avec la même présentation avez-vous une idée ? Voici la commande que j'exécute en DOS : PERL "C:\user\Attestation_XML\Technique\script_perl\sauvergarde_fichier_travail_1_v3.cgi" > sauvegarde.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    C:\USER\Attestation_XML>PERL "C:\user\Attestation_XML\Technique\script_perl\sauergarde_fichier_travail_1_v3.cgi"
    <--------------------------------------------------->
    <Debut de traitement PERL                           >
    <--------------------------------------------------->
      Deplacer les fichiers de travail
      Date du traitement  : mar. 05/12/2006
      Heure du traitement :  7:34
     
    variable : 20061205 734
     
    mon repertoire : C:/user/Attestation_XML/Technique/trace_traitement/20061205 734
     
     
    C:/user/Attestation_XML/Technique/trace_traitement/20061205 734
    /1.bat
    Unsuccessful stat on filename containing newline at C:/Perl/lib/File/Copy.pm li
    e 184.
    Unsuccessful stat on filename containing newline at C:/Perl/lib/File/Copy.pm li
    e 188.
    Unsuccessful stat on filename containing newline at C:/Perl/lib/File/Copy.pm li
    e 203.
    Unsuccessful stat on filename containing newline at C:/Perl/lib/File/Copy.pm li
    e 91.
    erreur move : 1.bat! at C:\user\Attestation_XML\Technique\script_perl\sauvergar
    e_fichier_travail_1_v3.cgi line 46.
    J'ai trouvé. Désolé de vous avoir ennuyé...

    Voilà j'ai ajouté les 2 lignes suivantes et ça marche
    $variable =~ s/\n//gs;
    $variable =~ s/ //gs;
    Merci à MarneusCalgarXP pour m'avoir mis sur la piste


    Je vais ouvrir un nouveau message pour ma question secondaire...

  5. #5
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Ah oui, j'avais pas grillé !
    Le fait d'appeler une méthode système ajoute un retour à la ligne.
    Pour faire propre, remplacer simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $datestr = `date /T` ;
    $heurestr = `time /T` ;
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chomp($datestr = `date /T` );
    chomp($heurestr = `time /T`) ;

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Par défaut
    Bonsoir a vous,
    j'essaye d'utiliser votre solution pour permettre que a chaque fois qu'un de mes clients depose un fichier dans mon serveur celui-ci soit automatiquement uploade dans un nouveau dossier ceci afin d'eviter d'avoir trop de fichiers dans le dossier definit dans le $upload_dir. Malheureusement je n'ai pas de connaissance particuliere en cgi, j'ai bien essaye differentes solutions mais j'avoue caler un peu. Est-ce que l'un d'entre vous pourrait m'aider ? Voici le code cgi que j'utilise pour l'upload des fichiers :
    #!/usr/bin/perl -w

    use CGI;

    print "Upload result:<br>"; # At least one symbol should be sent to response!!!

    $upload_dir = "upload/";
    $query = new CGI;

    print $query->header ( );
    print $query->start_html();
    @names = $query->param;
    foreach $param (@names) {
    my $filename = $query->param($param);
    $filename =~ s/.*[\/\\](.*)/$1/;
    my $upload_filehandle = $query->upload($param);

    if(!defined($upload_filehandle))
    {
    print "can't open param $filename";
    }
    else
    {
    open UPLOADFILE, ">$upload_dir/$filename";
    binmode UPLOADFILE;
    while ( <$upload_filehandle> )
    {
    print UPLOADFILE;
    }
    close UPLOADFILE;
    print "file \"$filename\" uploaded";
    }
    print $query->br();
    }

    print "--------------";
    print $query->end_html();
    Merci d'avance pour votre reponse
    Jerome

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

Discussions similaires

  1. [DisplayTag] Créer un lien dynamique avec javascript
    Par babylone7 dans le forum Taglibs
    Réponses: 3
    Dernier message: 20/04/2005, 10h23
  2. [DisplayTag] Comment créer un lien dynamique
    Par tscoops dans le forum Taglibs
    Réponses: 3
    Dernier message: 17/02/2005, 09h53
  3. [langage] Table Dynamique sous PERL ?
    Par Slippers dans le forum Langage
    Réponses: 9
    Dernier message: 09/02/2005, 08h30
  4. Comment créer un répertoire en asp
    Par PrinceMaster77 dans le forum ASP
    Réponses: 11
    Dernier message: 28/10/2004, 16h31
  5. [MFC] créer un répertoire
    Par bigboomshakala dans le forum MFC
    Réponses: 8
    Dernier message: 13/05/2004, 15h33

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