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 :

Compter le nombre de fichiers et gérer l'affichage avec SSI


Sujet :

Langage Perl

  1. #1
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut Compter le nombre de fichiers et gérer l'affichage avec SSI
    Bonjour

    J'ai une page .shtml avec un menu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div id="navigation">
     <ul>
      <li><a href="#m_1">Mes scripts</a>
       <ul class="sous-menu">
        <li><a href="#sm_1_1">Apache ( 0 )</a></li>
        <li><a href="#sm_1_2">Perl ( 1 )</a></li>
       </ul>
      </li>
     </ul>
    </div>
    Je viens d'écrire un script qui permet de compter le nombre de scripts présents dans un seul répertoire et affiche le résultat avec SSI comme le montre l'exemple ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <div id="navigation">
     <ul>
      <li><a href="#m_1">Mes scripts</a>
       <ul class="sous-menu">
        <li><a href="#sm_1_1">Apache ( <!--#include virtual="/cgi-bin/comptefic.cgi"--> )</a></li>
       </ul>
      </li>
     </ul>
    </div>
    Voici le scripts CGI:
    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
    27
    28
    29
    30
    31
    32
    33
    #!/usr/bin/perl -w
    # ne pas oublier un chmod 755
     
    # -- déclarations -- #
    use strict;
    use diagnostics;
    use warnings;
    use CGI qw(:standard);
    use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
     
    # -- CGI sécurité -- #
    $CGI::POST_MAX=1024*100;
    $CGI::DISABLE_UPLOADS=1;
     
    # -- variables -- #
    my $path_apache="/chemin/www/scripts/apache";
    my $nbapache;
     
    &compte_apache;
     
    sub compte_apache {
    	opendir (my $REP,$path_apache);
    	 my @tableau=readdir $REP;
    	  foreach my $fic (@tableau) {
    	  	$nbapache++ if (-f "$path_apache/$fic")
    	  }
    	closedir $REP;
    	return $nbapache;
    }
     
    # -- résultats -- #
    print "Content-type: text/html\n\n";
    print "$nbapache";
    A ce stade, je compte un seul répertoire. L'objectif étant de compter plusieurs répertoires. J'ai continué à écrire mon script CGI, voici le résultat:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #!/usr/bin/perl -w
    # ne pas oublier un chmod 755
     
    # -- déclarations -- #
    use strict;
    use diagnostics;
    use warnings;
    use CGI qw(:standard);
    use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
     
    # -- CGI sécurité -- #
    $CGI::POST_MAX=1024*100;
    $CGI::DISABLE_UPLOADS=1;
     
    # -- variables -- #
    my $path_apache="/chemin/www/scripts/apache";
    my $path_perl="/chemin/www/scripts/perl";
    my ($nbapache,$nbperl);
     
    &compte_apache;
    &compte_perl;
     
    sub compte_apache {
    	opendir (my $REP,$path_apache);
    	 my @tableau=readdir $REP;
    	  foreach my $fic (@tableau) {
    	  	$nbapache++ if (-f "$path_apache/$fic")
    	  }
    	closedir $REP;
    	return $nbapache;
    }
     
    sub compte_perl {
    	opendir (my $REP,$path_perl);
    	 my @tableau=readdir $REP;
    	  foreach my $fic (@tableau) {
    	  	$nbperl++ if (-f "$path_perl/$fic");
    	  }
    	closedir $REP;
    	return $nbperl;
    }
     
    # -- résultats -- #
    print "Content-type: text/html\n\n";
    print "$nbapache";
    print "$nbperl";
    Concernant l'affichage avec SSI, je souhaiterai que cela se présente sous la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div id="navigation">
     <ul>
      <li><a href="#m_1">Mes scripts</a>
       <ul class="sous-menu">
        <li><a href="#sm_1_1">Apache ( <!--#include virtual="/cgi-bin/comptefic.cgi?id=apache"--> )</a></li>
        <li><a href="#sm_1_2">Perl ( <!--#include virtual="/cgi-bin/comptefic.cgi?id=perl"--> )</a></li>
       </ul>
      </li>
     </ul>
    </div>
    Pour cette partie, je bloque

    Un petit coup de main s'il vous plaît ?

    Merci
    .Olivier

  2. #2
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    J'ai trouvé mais j'ai besoin d'une petite correction

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my %affiche=(
      "apache"=>"$nbapache",
      "perl"=>"$nbperl",
    );
     
    my $cgi=new CGI;
     
    my $categorie=$cgi->param("id");
    print $cgi->header(-charset=>'ISO-8859-1');
    print "$affiche{$categorie}";
    Qu'en pensez-vous ?

    Je peux appeller ce script de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /cgi-bin/comptfic.cgi?id=apache
    .Olivier

  3. #3
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Lorsque je saisis dans la barre d'adresse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /cgi-bin/comptfic.cgi?id=apache
    il me retourne 0.

    mais si je saisis ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /cgi-bin/comptfic.cgi?id=cgi
    il ne me retourne rien

    Pourtant les variables sont initialisées à 0 comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($nbapache,$nbcgi)=0;
    Un petit coup de main s'il vous plaît ?

    Merci

    PS: les deux répertoires sont vides.
    .Olivier

  4. #4
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Ou alors, il faut l'écrire de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($nbapache,$nbcgi)=(0,0);


    S'il y a 10 variables
    .Olivier

  5. #5
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    J'ai une petite question ave code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    my %affiche=(
      "apache"=>"$nb_apache",
      "cgi"=>"$nb_cgi",
      "css"=>"$nb_css",
      "javascript"=>"$nb_javascript",
      "perl"=>"$nb_perl",
      "php"=>"$nb_php",
      "ruby"=>"$nb_ruby",
      "shell"=>"$nb_shell",
      "ssi"=>"$nb_ssi",
      "xhtml"=>"$nb_xhtml",
    );
    Si par exemple, j'exécute ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /cgi-bin/comptfic.cgi?id=truc
    Vu que l'élément truc n'existe pas, je souhaiterai qu'il me retourne un message du genre, la catégorie spécifiée n'existe pas

    Qu'en pensez-vous ?
    .Olivier

  6. #6
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    J'ai refais le script.

    J'aimerai avoir vos avis s'il vous plaît ? Existe-t-il une solution plus propre que la série de if elsif else ?

    Merki
    .Olivier

  7. #7
    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
    exists() te permet de vérifier si une clé existe dans un hash, tu n'as pas besoin de ta série de if/elsif.

    Par ailleurs ton code est extrêmement redondant et peut être réduit à :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #!/usr/bin/perl -w
    # ne pas oublier un chmod 755
     
    # -- déclarations -- #
    use strict;
    use diagnostics;
    use warnings;
    use CGI qw(:standard);
    use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
     
    # -- CGI sécurité -- #
    $CGI::POST_MAX=1024*100;
    $CGI::DISABLE_UPLOADS=1;
     
    # -- variables -- #
    my $id= param('id');
     
    my @languages = qw(apache perl cgi css javascript php ruby shell ssi xhtml);
     
    # -- opérations -- #
    sub count_files {
      my $language = shift;
      my $path = get_path($language);
      my $count = 0;
      opendir my($dir), $path
        or die "$path n'existe pas !";
      while( my $filename = readdir $dir ) {
        $count++ if (-f "$path/$filename")
      }
      closedir $dir;
      return $count;
    }
     
    sub get_path {
      my $language = shift;
      return "/chemin/www/scripts/" . $language;
    }
     
    # -- résultats -- #
    print header(-charset=>'ISO-8859-1'), start_html("Compte de fichiers");
     
    if ($id eq "") {
      print p("Vous devez absolument spécifier une catégorie.\n");
    } elsif ( grep {m/^$id$/i} @languages ) {
      print p("Il y a ", count_files(lc $id), " fichiers dans cette catégorie.\n");
    } else {
      print p("Aucune catégorie ne correspond à celle indiquée : $id.\n");
    }
     
    print end_html;
    --
    Jedaï

  8. #8
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Je ne sais pas comment te remercier, un gros boujou

    Sincèrement, un grand merci

    Je viens de tester et tout fonctionne correctement.

    .Olivier

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 26/11/2008, 16h41
  2. Compter le nombre de fichier dans un repertoire.
    Par parp1 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/05/2007, 12h01
  3. Réponses: 4
    Dernier message: 15/08/2006, 13h30
  4. compter le nombre de fichiers dans un répertoire !
    Par lehic dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 20/11/2005, 17h59
  5. Réponses: 6
    Dernier message: 11/02/2005, 06h41

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