35 529
modifications
Aucun résumé des modifications |
|||
Le CGI ({{w|Common Gateway Interface}}) est une norme permettant à Apache d'exécuter des programmes écrits en n'importe quel langage ([[Bash]], [[C]], [[Java]], [[Perl]], [[PHP]], [[Python]]...), du moment qu'il est exécutable et qu'il respecte certaines contraintes d'entrées/sortie.
Pour qu'Apache prenne en charge les scripts, il est nécessaire d'effectuer un minimum de paramétrage dans la configuration du site.
La directive (de httpd.conf) :
ScriptAlias /cgi-bin/ ''/chemin des scripts/''
En fait le chemin <code>/cgi-bin/</code> n'existe pas vraiment, il est dirigé vers le chemin des scripts défini par la directive, et cela permet d'écrire des URL comme <code><nowiki>http://serveur/cgi-bin/mon_script</nowiki></code>.
La clause suivante active l'option <code>ExecCGI</code> dans <code>/var/www/cgi-bin</code>, ce qui autorise Apache à exécuter les scripts sur le serveur :
<Directory /var/www/cgi-bin>
L'appel à un script essai.cgi sera effectué par l'URL : <code><nowiki>http://serveur/cgi-bin/essai.cgi</nowiki></code>
Cette clause permet de choisir les extensions de fichiers qui seront autorisés, ex :
AddHandler cgi-script .cgi .exe .pl .py .vbs
Exemple complet sur Windows, dans la configuration Apache :
ScriptAlias /cgi-bin/ "E:/www/cgi-bin/"
AddHandler cgi-script .cgi .exe .pl .py .vbs
La contrainte principale concerne la sortie du programme. Si un programme CGI génère des données sur sa sortie standard, il doit les précéder d'un en-tête HTTP permettant de les identifier.
Voici un exemple de programme CGI écrit en bash :
<source lang="bash">
Ce script génère une page HTML.
<source lang="perl">
#!c:/perl/perl/bin/perl.exe -w
</source>
<source lang="python">
#!C:\Program Files (x86)\Python\python.exe
{{article détaillé|Programmation Python/L'interface CGI}}
Pour Windows<ref>http://wiki.uniformserver.com/index.php/CGI:_VBScript_CGI</ref>.
<source lang="vb">
</source>
* {{rouge|Error 500 ''Erreur du serveur!''}} : remplacer un <code>Deny from all</code> par un <code>Allow from all</code>.
* {{rouge|Error 403 ''Accès interdit''}} : lister ce répertoire est interdit, il faut donc connaitre l'URL des fichiers qu'il contient.
|
modifications