Outils pour utilisateurs

Outils du site


perl:programmation_web_cgi

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
perl:programmation_web_cgi [2009/03/15 01:13] – modification externe 127.0.0.1perl:programmation_web_cgi [2013/03/13 11:12] (Version actuelle) root
Ligne 1: Ligne 1:
 +====== CGI ======
 +
 ====== 1. Programmation CGI simple ====== ====== 1. Programmation CGI simple ======
  
Ligne 6: Ligne 8:
  
 Un serveur web peut être configuré pour exécuter à la demande un script sous certaines conditions. Par exemple, avec Apache on peut utiliser cette directive pour exécuter automatiquement les fichiers //*.cgi// : Un serveur web peut être configuré pour exécuter à la demande un script sous certaines conditions. Par exemple, avec Apache on peut utiliser cette directive pour exécuter automatiquement les fichiers //*.cgi// :
 +<code apache>
   AddHandler cgi-script .cgi   AddHandler cgi-script .cgi
   Options ExecCGI   Options ExecCGI
 +</code>
  
 Si l'adresse http://localhost/test.cgi correspond au fichier local suivant : Si l'adresse http://localhost/test.cgi correspond au fichier local suivant :
 +<code perl>
   #!/usr/bin/perl -w   #!/usr/bin/perl -w
      
Ligne 15: Ligne 20:
   print "Content-Type: text/plain\r\n\r\n";   print "Content-Type: text/plain\r\n\r\n";
   print Dumper(\%ENV);   print Dumper(\%ENV);
 +</code>
  
 Alors la consultation de l'URL exécutera notre script et nous verrons les informations suivantes : Alors la consultation de l'URL exécutera notre script et nous verrons les informations suivantes :
 +<code php>
   $VAR1 = {   $VAR1 = {
   'SCRIPT_NAME' => '/~zerodeux/test.cgi',   'SCRIPT_NAME' => '/~zerodeux/test.cgi',
Ligne 30: Ligne 37:
   'HTTP_HOST' => 'localhost'   'HTTP_HOST' => 'localhost'
   };   };
 +</code>
  
 On constate alors que la communication **en entrée** avec le programme s'effectue via les variables d'environnement, à l'instar de //@ARGV// dans un programme. Le nom des variables et leur contenu est précisément défini par l'interface **CGI/1.1**. On constate alors que la communication **en entrée** avec le programme s'effectue via les variables d'environnement, à l'instar de //@ARGV// dans un programme. Le nom des variables et leur contenu est précisément défini par l'interface **CGI/1.1**.
Ligne 36: Ligne 44:
  
 Enfin, le résultat correspond simplement à la **sortie standard** du programme, avec une contrainte importante: elle commence par les entêtes HTTP de la réponse (optionnels, bien que //Content-Type// soit incontournable). Ces entêtes finissent toujours par une ligne vide, la convention du retour chariot étant en //\r\n//. Enfin, le résultat correspond simplement à la **sortie standard** du programme, avec une contrainte importante: elle commence par les entêtes HTTP de la réponse (optionnels, bien que //Content-Type// soit incontournable). Ces entêtes finissent toujours par une ligne vide, la convention du retour chariot étant en //\r\n//.
- 
 ===== Module CGI ===== ===== Module CGI =====
  
Ligne 42: Ligne 49:
  
 Exemple : Exemple :
 +<code perl>
   #!/usr/bin/perl -w   #!/usr/bin/perl -w
      
Ligne 60: Ligne 68:
      
   print end_html();   print end_html();
 +</code>
  
 La gestion des paramètres du CGI est très similaire à celle de //getopt//, sous la forme de paires clé/valeur. On obtient la liste des paramètres avec //@names = param()// et la valeur de chacun d'eux avec //$val = param('name')//. La gestion des paramètres du CGI est très similaire à celle de //getopt//, sous la forme de paires clé/valeur. On obtient la liste des paramètres avec //@names = param()// et la valeur de chacun d'eux avec //$val = param('name')//.
Ligne 77: Ligne 86:
  
 Pour se préserver de surprises, Perl possède un mode de sécurité automatique appelé **taint mode**: toutes les informations en entrée (paramètres, entrée standard, variables d'environnement, etc) sont considérées par défaut //tainted// (colorées) et il faudra explicitement les "blanchir" avant de pouvoir les utiliser. Appliquer une expression régulière pour vérifier le contenu d'une variable est par exemple considéré comme une opération de blanchiement : Pour se préserver de surprises, Perl possède un mode de sécurité automatique appelé **taint mode**: toutes les informations en entrée (paramètres, entrée standard, variables d'environnement, etc) sont considérées par défaut //tainted// (colorées) et il faudra explicitement les "blanchir" avant de pouvoir les utiliser. Appliquer une expression régulière pour vérifier le contenu d'une variable est par exemple considéré comme une opération de blanchiement :
 +<code perl>
   #!/usr/bin/perl -wT   #!/usr/bin/perl -wT
      
Ligne 88: Ligne 98:
   $ENV{'PATH'} = '/usr/bin';   $ENV{'PATH'} = '/usr/bin';
   system("cat doc/$file");   system("cat doc/$file");
 +</code>
  
 ====== 2. mod_perl ====== ====== 2. mod_perl ======
Ligne 101: Ligne 111:
  
 L'utilisation du module //CGI// est transparente dans le contexte de mod_perl, vous pouvez donc profiter des gains de performance et des économies de ressources tout en continuant à utiliser la simplicité de ce module pour programmer. Exemple de configuration permettant d'utiliser ses CGIs sous mod_perl avec Apache : L'utilisation du module //CGI// est transparente dans le contexte de mod_perl, vous pouvez donc profiter des gains de performance et des économies de ressources tout en continuant à utiliser la simplicité de ce module pour programmer. Exemple de configuration permettant d'utiliser ses CGIs sous mod_perl avec Apache :
 +<code apache>
   SetHandler perl-script   SetHandler perl-script
   PerlHandler Apache::Registry   PerlHandler Apache::Registry
   Options ExecCGI   Options ExecCGI
 +</code>
  
 Pour programmer des applications plus complexes basées sur mod_perl, la méthode la plus efficace est très probablement d'adopter un //framework//, c'est-à-dire un ensemble de modules cohérents qui répondent à la majorité des scenarii dont vous aurez besoins (sessions, formulaires, base de données, persistence, etc). Le framework attitré de Perl (comme //Rails// pour Ruby) est http://www.catalystframework.org/ Catalyst. Pour programmer des applications plus complexes basées sur mod_perl, la méthode la plus efficace est très probablement d'adopter un //framework//, c'est-à-dire un ensemble de modules cohérents qui répondent à la majorité des scenarii dont vous aurez besoins (sessions, formulaires, base de données, persistence, etc). Le framework attitré de Perl (comme //Rails// pour Ruby) est http://www.catalystframework.org/ Catalyst.
- 
perl/programmation_web_cgi.1237079591.txt.gz · Dernière modification : 2013/03/13 11:10 (modification externe)