Ouvrir le menu principal


Le CGI (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.

Sections

Configurer l'accès aux scripts CGIModifier

Pour qu'Apache prenne en charge les scripts, il est nécessaire d'effectuer un minimum de paramétrage dans la configuration du site.

Activer le moduleModifier

a2enmod cgi

ScriptAliasModifier

La directive (de httpd.conf) :

ScriptAlias /cgi-bin/ /chemin des scripts/

précise le nom du répertoire où Apache est autorisé à exécuter des scripts CGI[1].

Exemple Unix :

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

Exemple Windows, utiliser le format URL (pas d'antislash) :

ScriptAlias /cgi-bin/ "C:/wamp/bin/apache/apache2.2.27/cgi-bin/"

En fait le chemin /cgi-bin/ 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 http://serveur/cgi-bin/mon_script.

ExecCGIModifier

La clause suivante active l'option ExecCGI dans /var/www/cgi-bin, ce qui autorise Apache à exécuter les scripts sur le serveur :

<Directory /var/www/cgi-bin>
  Options ExecCGI
</Directory>

Par exemple : vous écrivez un script essai.cgi, et vous voulez que /home/httpd/cgi-bin contienne les scripts.

Il faut donc au moins écrire :

<Directory /home/httpd/cgi-bin>
  Options ExecCGI
</Directory>

L'appel à un script essai.cgi sera effectué par l'URL : http://serveur/cgi-bin/essai.cgi

AddHandlerModifier

Cette clause permet de choisir les extensions de fichiers qui seront autorisés, ex :

AddHandler cgi-script .cgi .exe .pl .py .vbs

RécapitulatifModifier

Exemple complet sur Windows, dans la configuration Apache :

ScriptAlias /cgi-bin/ "E:/www/cgi-bin/"
<Directory "E:/www/cgi-bin/">
  Options FollowSymLinks Indexes
  AllowOverride All
  Order deny,allow
  Allow from all
  Require all granted		
</Directory>

Dans E:/www/cgi-bin/.htaccess :

AddHandler cgi-script .cgi .exe .pl .py .vbs

Écrire un programme CGIModifier

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.

BashModifier

Voici un exemple de programme CGI écrit en bash :

#!/bin/bash

# Header
echo "Content-type: text/html"

# Fin du header
echo ""

# Contenu à afficher dans le navigateur
echo "<html><body>Hello World!</body></html>"

Ce script génère une page HTML.

PerlModifier

#!c:/perl/perl/bin/perl.exe -w
use CGI;
my $query = new CGI;
my $Name = $query->param('Name');
print $query->header();
print "Hello World!"

PythonModifier

#!C:\Program Files (x86)\Python\python.exe
# -*- coding: UTF-8 -*-
print "Content-Type: text/plain;charset=utf-8"
print
print "Hello World!"
Pour plus de détails voir : Programmation Python/L'interface CGI.

VBSModifier

Pour Windows[2].

'!c:/windows/system32/cscript //nologo
Wscript.Echo "Content-type: text/html" & vbLF & vbLF
WScript.Echo "Hello World!"
Wscript.Quit 0

RéférencesModifier