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 :

Enregistrer une page HTML sur Excel


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    Bonjour, j'ai réalisé des scripts cgi qui tourne sur le serveur IIS. J'accède aux résultats de ces scripts sur une page Web.
    J'aimerai enregistrer ma page web (qui contient résultat de script) dans un fichier excel par l'intermédiaire d'un bouton (en cliquant sur le bouton le fichier xls est automatiquement créé sur mon bureau par exemple).

    Merci à vous tous. J'attends une réponse dans les plus brefs délais c'est assez urgent.

  2. #2
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Je te montre le principe, à toi de voir et de poster tes essais et questions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/perl -wT 
    use CGI ':standard';
    use CGI::Carp;
     
    my $files_location = '/home/webdata/files';
    open my $fh, '<', "$files_location/$filename";
    my @fileholder = <$fh>;
    close $fh; 
     
    print "Content-Type:application/x-download\n";  
    print "Content-Disposition:attachment;filename=$filename\n\n";
    print @fileholder;
    Ensuite dans ta page tu peux bien sûr avoir un form (et le traiter). Ou un simple lien :

    Code html :
    <a href="/cgi-bin/script.cgi?filename=file.xsl">Excel file</a>


    PS Tu peux peut-être aussi avoir un "Content-type: application/x-msexcel" mais je ne sais pas trop si c'est une bonne pratique.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    Je te remercie Iblis. J'ai oublié de préciser que je travail sur Windows et non pas sur linux.

    Voici le script si ça peut aider:

    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
    51
    52
      
    
    #!C:\perl\bin\perl		
    use strict;				
    use warnings;			
    
    use CGI::Carp qw(fatalsToBrowser);	
    use CGI;				
    use VMware::VIRuntime;	
    use VMware::VILib;
    
    my $q = new CGI;		
    
    Opts::parse();			
    Opts::validate();		
    Util::connect();		
    
    # creation de l'en-tete HTTP et début du HTML
    print $q->header( "text/html" ), $q->start_html( "Script VMware" );
    			
    
    my $counter = 0;
    my $sum = 0;
    my $count = 0;
    
    # On récupère toutes les machines virtuelles 
    my $vm_views = Vim::find_entity_views(view_type => 'VirtualMachine');
    
    # On affiche les machines virtuelles inactives et une alerte si la machine virtuelle est inactive depuis  # plus de 6 mois 
    print $q->h1("Machine Virtuelles Inactives");
    
    foreach my $vm (@$vm_views)	{
    if ($vm->runtime->powerState->val eq 'poweredOff') 	{
    
    print $q->p("$sum: <B><FONT color='red'>" . $vm->name . "</FONT></B> est : <B>INACTIVE.</B> Ressources réservées :  CPU " . $vm->config->hardware->numCPU . "  --    RAM " . $vm->config->hardware->memoryMB . " MB");
    if (defined ($vm->runtime->bootTime))	{
    print $q->p("--  Dernière activation récente, le : " . $vm->runtime->bootTime);
    }
    else { print $q->p("||  Attention ! Dernière activation de la machine date de plus de 6 mois ( > 16/12/2008)");	}
    $sum++;
    }
    }
    
    print $q->p("<B>Nombre Total de VMs INACTIVE = $sum</B>");
    
    
    print $q->p("<form action='http://128.94.201.224/cgi-bin/excel.pl' method='post'>
    <input type=submit value='Enregistrer la page sous Excel'><br /> <br /><br /></form>");
    
    print $q->end_html;		# fin du HTML
    Util::disconnect();		# Déconnexion du serveur
    En appuyant sur le bouton 'Enregistrer la page sous Excel', je voudrais lancer la création d'un fichier xls contenant le résultat du script qui se trouve sur la page Web.

    Merci

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    HELP!!!!! SVP

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    Différentes étapes possibles après avoir cliqué sur le bouton :

    - Enregistrer le fichier html
    - Ouvrir le fichier html
    - Parser le fichier html sur un fichier excel (creation du fichier excel)
    - Enfin... Ouvrir le fichier excel

  6. #6
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    As-tu essayé la solution que je te propose (pour le download) ?

    Pour l'enregistrement, c'est à peu près pareil : tu transmets les infos collectés sur la page au script qui les récupère et formate un fichier xls.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    La fenêtre de download s'ouvre bien mais elle ne me permet pas d'enregistrer le contenu de ma page.

  8. #8
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Tu dois bien sûr d'abord sauvegarder dans un répertoire temporaire le fichier xls avec les données que tu souhaites transmettre au téléchargement puis produire le lien vers le fichier comme montré plus haut.

    Ça devrait donner quelque chose comme ça (avec fichier CVS plutôt que Excel mais c'est du pareil au même pour comprendre comment ça marche) :
    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
    #!/usr/bin/perl -wT 
    use CGI ':standard';
    use CGI::Carp;
    use Text::CSV;
     
    my $files_location = '/path/to/temp';
    my $filename = 'test.csv';
    open my $fh, '>', "$files_location/$filename";
    my $csv = Text::CSV->new;
    $csv->print($fh, ['number', 'data']);
    $csv->print($fh, ['1', 'a']);
    $csv->print($fh, ['2', 'a']);
    close $fh;
     
    open $fh, '<', "$files_location/$filename";
    my @fileholder = <$fh>;
    close $fh; 
     
    my $cgi->new;
     
    print cgi->header(-type => 'application/x-download', -attachment => $filename);  
    print @fileholder;

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    Bonjour Iblis,;

    J'ai apporté quelques correctifs à ton script, maintenant il n'y a plus d'erreur.
    J'ai créé un répertoire et fichier en indiquant le chemin d'accès :

    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
     
    #!C:/Perl/bin/perl 
    use CGI ':standard';
    use CGI::Carp qw(fatalsToBrowser);
    use CGI::Carp;
    use Text::CSV;
     
    my $files_location = 'C:perl-scripts/excel';
    my $filename = 'test.csv';
    open my $fh, '>', "$files_location/$filename";
    my $csv = new Text::CSV;
    $csv->print($fh, ['number', 'data']);
    $csv->print($fh, ['1', 'a']);
    $csv->print($fh, ['2', 'a']);
    close $fh;
     
    open $fh, '<', "$files_location/$filename";
    my @fileholder = <$fh>;
    close $fh; 
     
    my $cgi = new CGI;
     
    print $cgi->header(-type => 'application/x-download', -attachment => $filename);  
    print @fileholder;
    J'ai ceci qui s'affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Content-Disposition: attachment; filename="test.csv" Content-Type: application/x-download
    Je ne comprends pas trop ta démarche et ces 3 lignes de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $csv->print($fh, ['number', 'data']);
    $csv->print($fh, ['1', 'a']);
    $csv->print($fh, ['2', 'a']);

  10. #10
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    On est bien d'accord qu'il s'agit d'un script CGI exécuté par ton serveur ? N'oublie pas le taint mode (le -T sur le shebang)

    Tu vois le résultat des prints dans le browser (ou j'ai mal compris) ?

    Sinon l'exemple que je t'ai posté :

    1. Crée un fichier CSV bidon (d'où les prints vers le fichier)
    2. Puis lit le contenu du dit fichier ligne à ligne
    3. Et enfin imprime le contenu (vers serveur) avec header pour download

    Bien sûr le point 1 était juste didactique pour te montrer que tu dois produire ton fichier Excel (ou CSV) et comment faire dans le cas d'un CSV.

    (Oui, j'avais laissé une coquille dans mon exemple ; pardon, je corrige le $ manquant)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    Je t'explique le fonctionnement de l'outil:

    J'ai une page HTML toute simple sur laquelle je lance l'exécution (avec un bouton) d'un script wrapper.pl . Ce wrapper va faire appel et lancer l'exécution du script CGI. Ce script CGI implanté sur IIS me renvoit alors une page HTML contenant le résultat de son exécution (le résultat est : nombre total de machines virtuelles inactives).

    J'ai "inséré" ton script dans le serveur dans un fichier excel.pl. Ton script est automatiquement exécuté lors de l'exécution du script CGI.
    J'ai inséré ce bout de code dans le script cgi:
    system('perl ./excel.pl').

    J'ai créé manuellement un répertoire "excel" comme tu as pu le voir dans: C:\perl-scripts\excel et le fichier test.csv ne se cré tjrs pas.

    Merci pour ton aide.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    Je rectifie après avoir corrigée une erreur sur le script le fichier est bien créé bien.

    On y trouve ceci :


    number,data1,a2,a


    Mais pas le contenu de ma page Html qui est ceci:

    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
     
     
     La liste des VM INACTIVE
     
    0: Ref_Ora_10G_W2K3_32 est : INACTIVE
     
    -- Dernière activation récente, le : 2009-08-12T08:52:13.980128Z
     
    1: clone-pele-prod-app est : INACTIVE
     
    || Attention ! Dernière activation de la machine date de plus de 6 mois ( > 16/12/2008)
     
    2: sisa-dev-test est : INACTIVE
     
    || Attention ! Dernière activation de la machine date de plus de 6 mois ( > 16/12/2008)
     
    3: clone-port-dev-app est : INACTIVE
     
    || Attention ! Dernière activation de la machine date de plus de 6 mois ( > 16/12/2008)
     
    4: Test_update_vmtools_CSC est : INACTIVE
     
    || Attention ! Dernière activation de la machine date de plus de 6 mois ( > 16/12/2008)
     
    5: clone-port-dev-my est : INACTIVE
     
    || Attention ! Dernière activation de la machine date de plus de 6 mois ( > 16/12/2008)
     
    6: prcv-dev-app est : INACTIVE
     
    || Attention ! Dernière activation de la machine date de plus de 6 mois ( > 16/12/2008)
     
    7: xp-bcdi est : INACTIVE
     
    || Attention ! Dernière activation de la machine date de plus de 6 mois ( > 16/12/2008)

  13. #13
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Citation Envoyé par Pedro87 Voir le message
    Je rectifie après avoir corrigée une erreur sur le script le fichier est bien créé bien.

    On y trouve ceci :

    number,data1,a2,a


    Mais pas le contenu de ma page Html qui est ceci:
    Ben oui, je n'ai pas prétendu écrire ton code : je te montre juste comment faire pour créer dynamiquement un fichier (CVS parce que tu demandais de l'Excel) et l'offrir au téléchargement.

    Mais rien ne t'empèche de récupérer le contenu de ta page lors de sa création, de l'engegistrer puis de l'offrir au téléchargement. Tu n'as pas montré comment tu créais la dite page...

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    Voila je ne sais pas ce qu'il faut utiliser pour récupérer le contenu de ma page lors de sa création. Faut-il d'abord l'enregistrer puis récupérer les infos à transmettre au format csv ?

    Le résultat de ma page web n'est pas une base de données, mais un texte brut que je veux récupérer tout bêtement. Est-ce que l'enregistrer au format CSV (avec la présence de délimiteur ",") est la bonne méthode ?

    Merci Iblis.

  15. #15
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Le résultat de ma page web n'est pas une base de données, mais un texte brut que je veux récupérer tout bêtement. Est-ce que l'enregistrer au format CSV (avec la présence de délimiteur ",") est la bonne méthode ?
    Si le contenu de ta page est du texte non formatté ou dont le formatage importe peu, je la sauvegarderais en format texte. Si le formattage est important autant sauvegardé le html que tu as produit, non ?

    Pour l'export CSV (ou XLS) cela dépend de la structure de tes données et/ou de ce que tu veux que l'utilisateur en fasse.

    Voila je ne sais pas ce qu'il faut utiliser pour récupérer le contenu de ma page lors de sa création.
    Tu peux écrire ton html dans un fichier au fur et à mesure que tu l'envoies au browser, par exemple.

    Faudrait voir comment tu produis ta page.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Voila à quoi resemble ma page html en code :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
     
     
       <head>
           <title>Script VMware</title>
           <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
       </head>
       <body>
      <BODY BGCOLOR="azure">
     
    <h1> <strong><center>Extraction d'informations à propos des Machines Virtuelles </h1>
    <hr>
     
    <h2> Machines Virtuels </h2>
     
     <p>1) Nombre total de machines virtuelles et serveurs</p>
     <form action="http://128.94.201.224/cgi-bin/vm1.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
     <p>2) Machines virtuelles actives</p>
     <form action="http://128.94.201.224/cgi-bin/vm2.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
     <p>3) Machines virtuelles inactives</p>
     <form action="http://128.94.201.224/cgi-bin/vm3.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
     <p>4) Macaddress, IP et environnement par machine virtuelle</p>
     <form action="http://128.94.201.224/cgi-bin/vm4.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
    <p> 5) Nombre de machine virtuelle de 'Référence'</p>
     <form action="http://128.94.201.224/cgi-bin/vm5.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
    <p> 6) Nombre de VM par environnement</p>
     <form action="http://128.94.201.224/cgi-bin/vm6.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
     
     <h2> Serveurs VMware </h2>
     
     <p>1) Nombre de serveurs par environnement</p>
      <form action="http://128.94.201.224/cgi-bin/esx1.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
     <p>2) Nombre de processeurs par serveur</p>
     <form action="http://128.94.201.224/cgi-bin/esx2.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
     <p>3) Nombre de cartes réseaux par serveur</p>
     <form action="http://128.94.201.224/cgi-bin/esx3.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
     
    <h2> Licences </h2>
     
     <p>1) Nombre de Licences par Système</p>
     <form action="http://128.94.201.224/cgi-bin/vm1.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
    <h2> Répartition des licences par environnement </h2>
     
    <p>2) Windows Server 2003 </p>
     <form action="http://128.94.201.224/cgi-bin/vm1.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
    <p>3) Windows 2000 Server</p>
     <form action="http://128.94.201.224/cgi-bin/vm1.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
    <p>4) Windows XP</p>
     <form action="http://128.94.201.224/cgi-bin/vm1.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
    <p>5) Linux</p>
     <form action="http://128.94.201.224/cgi-bin/vm1.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
    <p>6) ORACLE</p>
     <form action="http://128.94.201.224/cgi-bin/vm1.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
    <p>7) SQL</p>
     <form action="http://128.94.201.224/cgi-bin/vm1.pl" method="post">
    <input type = submit value = "EXECUTER"></form><br />
     
     </body>
    </html>
    Je fais appel à cette page avec le lien : http:<ip_machine>/cgi-bin/index.html


    Lorsque je clique sur un bouton "exécuter", mon script s'exécute et j'obtiens un rendu html.
    J'ai mis un exemple de script auquel on pourrait faire appel au 3ème message posté.

    Merci encore.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    Vu que d'avoir une sauvegarde de l'information en csv ou xls s'avère compliqué, est-il possible d'avoir ce rendu au format word par exemple ? Quelqu'un aurait il un script qui peut faire sa en mm temps que ma page html est créée.

    Je précise que le texte recueilli après l'exécution du script vient entièrement du script, donc je pense qu'il est formaté. ( à l'aide de print)

  18. #18
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Tu ne montres pas comment ta page est créée (i.e. le script cgi qui crache ton html) , humm... .

    Dès que j'ai un quart d'heure, je te fais un exemple détaillé de production dynamique de page html avec sauvegarde des données dans un fichier temporaire et script de téléchargement.

  19. #19
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Bon voilà un exemple détaillé (et testé ) pour que tu comprennes comment faire.

    Le principe est le suivant.

    Le script principal (report.pl) liste pour chaque machine de mon réseau l'état de leur port 22 (un exemple un peu bidon mais suffisamment proche de ce que tu veux pour être didactique sans faire ton boulot). Le résultat est formaté en HTML et envoyé vers le navigateur. Deux fichiers temporaires avec les mêmes données, l'un au format texte, l'autre au format CSV, sont écrits sur le disque. Deux liens vers le script de téléchargement sont affichés dans le navigateur.
    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
    #!/usr/bin/perl -wT
    use CGI;
    use File::Temp 'tempfile';
    use Text::CSV;
    use strict;
     
    $ENV{'PATH'} =~ /(.*)/; $ENV{'PATH'} = $1; # pour pouvoir faire un appel système en mode "protégé" (taint) 
     
    # initialise les requètes CGI
    my $q = CGI->new();
    print $q->header(-type => 'text/html');
    print $q->start_html( -title => 'SSH port status on the network');
     
    # crée les fichiers temporaires
    my ($text_file, $text_filename) = tempfile('temp_XXXX', DIR => '/tmp', SUFFIX => '.txt', UNLINK => 0);
    my ($csv_file, $csv_filename) = tempfile('temp_XXXX', DIR => '/tmp', SUFFIX => '.csv', UNLINK => 0);
    my $csv = Text::CSV->new;
    $csv->print($csv_file, ['ip', 'status']);
     
    # scanne les machines de mon réseau avec nmap (parsing brutal !)
    my %status = map { $1, $2 if  m/((?:\d+\.){3}\d+).*?((open|closed|filtered))/s   } 
      split /\n\nInteresting/, `/usr/local/bin/nmap -p 22 192.168.2.*`;
     
    # affiche les données dans le navigateur et écrit les fichiers texte et CSV
    print $q->h1("Report");
    for my $ip (keys %status) {
      print $q->p("SSH port is $status{$ip} on host $ip");
      print $text_file "SSH port is $status{$ip} on host $ip\n";
      $csv->print($csv_file, [$ip, $status{$ip}]);
    }
     
    # affiche les liens de téléchargement dans le navigateur
    print $q->h1("Download");
    print $q->a( {-href => "/cgi-bin/download.pl?filename=$csv_filename"}, 'CSV file' );
    print $q->br;
    print $q->a( {-href => "/cgi-bin/download.pl?filename=$text_filename"}, 'Text file' );
    print $q->end_html;
     
    __END__
    Un second script (download.pl) prend en charge le téléchargement depuis le navigateur. Le nom du fichier à télécharger est passé en paramètre.
    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
    #!/usr/bin/perl -wT
    use CGI;
    use strict;
     
    my $q = CGI->new();
     
    # grab the filename and read out the file
    my $temp_filename = $q->param('filename');
    open my $fh, '<', $temp_filename;
    my $content = do { local $/; <$fh> };
     
    # output content with download header and smart filename
    my $suffix = $temp_filename =~ /(\.\w+)$/ ? $1 : '.dat'; 
    print $q->header( -type => 'application/x-download', -attachment => 'report' . $suffix );  
    print $content;
     
    __END__
    Quelques remarques :

    1. Utilisation du mode "protégé" (taint mode) -T pour éviter que les entrées de l'utilisateur (ici principalement le nom de fichier) soient utilisées avec des commandes sensibles.
    2. On crée les fichiers temporaires avec File::Temp dans un répertoire convenable pour ça (ils ne sont pas effacés à la fin de l'exécution du script pour pouvoir être downloader après).
    3. Pour débugguer pense à ajouter
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      use CGI::Carp qw(fatalsToBrowser);
      Cela te permet de voir les erreurs dans le navigateur.
    4. Le passage à Windows ne doit pas poser de problème.
    5. Cela devrait répondre exactement à ton problème mais n'hésite pas à demander ce que tu ne comprends pas.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Points : 25
    Points
    25
    Par défaut
    Merci beaucoup Iblis pour le temps que tu me consacres. J'ai repris ce que tu as fait en modifiant par rapport à mon boulot. J'ai enfin réussi à avoir un rendu CSV, mais il reste le problème de la mise en page: impossible de faire des retours chariots, j'ai tt essayé : \n \n\r ...

    Petit bout de code :
    [code]

    my ($csv_file, $csv_filename) = tempfile('vm_XXXX', DIR => 'C:\excel', SUFFIX => '.csv', UNLINK => 0);
    my $csv = Text::CSV->new;
    foreach my $vm (@$vm_views) {
    if ($vm->runtime->powerState->val eq 'poweredOff') {
    $csv->print($csv_file, ["$count: " . $vm->name . " est : INACTIVE. Ressources utilisees: CPU " . $vm->summary->config->numCpu . " -- Ram " . $vm->summary->config->memorySizeMB . " -- Memoire disque\n"]);
    if (defined ($vm->runtime->bootTime)) {
    $csv->print($csv_file, ["-- Derniere activation recente, le : " . $vm->runtime->bootTime] . "\n");
    }
    else { $csv->print($csv_file, ["|| Attention ! Derniere activation de la machine date de plus de 6 mois ( > 16/12/2008)\n"]);
    }
    $count++;

    }
    }
    $csv->print($csv_file, ["Nombre total de VM inactives: $count\n"]);

    [code]

    Aurais-tu une idée ?? merci bcp

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Enregistrer une page html sous vba
    Par scofild20 dans le forum Général VBA
    Réponses: 8
    Dernier message: 10/08/2007, 14h52
  2. Webbrowser : enregistrer une page html sur le disque
    Par Taurëndil dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 23/03/2007, 09h32
  3. [HTML] Lien d'une page html sur une iframe
    Par cosycorner dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 20/02/2007, 08h34
  4. Enregistrer une page html publiée sur Internet
    Par creezeer dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 20/11/2006, 17h43
  5. Lancer une page HTML sur un serveur distant
    Par Larion dans le forum VBScript
    Réponses: 5
    Dernier message: 14/08/2006, 08h34

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