« Apache/CGI » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
 
Ligne 59 : Ligne 59 :
=== Bash ===
=== Bash ===
Voici un exemple de programme CGI écrit en bash :
Voici un exemple de programme CGI écrit en bash :
<source lang="bash">
<syntaxhighlight lang="bash">
#!/bin/bash
#!/bin/bash


Ligne 70 : Ligne 70 :
# Contenu à afficher dans le navigateur
# Contenu à afficher dans le navigateur
echo "<html><body>Hello World!</body></html>"
echo "<html><body>Hello World!</body></html>"
</syntaxhighlight>
</source>


Ce script génère une page HTML.
Ce script génère une page HTML.


=== Perl ===
=== Perl ===
<source lang="perl">
<syntaxhighlight lang="perl">
#!c:/perl/perl/bin/perl.exe -w
#!c:/perl/perl/bin/perl.exe -w
use CGI;
use CGI;
Ligne 82 : Ligne 82 :
print $query->header();
print $query->header();
print "Hello World!"
print "Hello World!"
</syntaxhighlight>
</source>


=== Python ===
=== Python ===
<source lang="python">
<syntaxhighlight lang="python">
#!C:\Program Files (x86)\Python\python.exe
#!C:\Program Files (x86)\Python\python.exe
# -*- coding: UTF-8 -*-
# -*- coding: UTF-8 -*-
Ligne 91 : Ligne 91 :
print
print
print "Hello World!"
print "Hello World!"
</syntaxhighlight>
</source>
{{article détaillé|Programmation Python/L'interface CGI}}
{{article détaillé|Programmation Python/L'interface CGI}}


=== VBS ===
=== VBS ===
Pour Windows<ref>http://wiki.uniformserver.com/index.php/CGI:_VBScript_CGI</ref>.
Pour Windows<ref>http://wiki.uniformserver.com/index.php/CGI:_VBScript_CGI</ref>.
<source lang="vb">
<syntaxhighlight lang="vb">
'!c:/windows/system32/cscript //nologo
'!c:/windows/system32/cscript //nologo
Wscript.Echo "Content-type: text/html" & vbLF & vbLF
Wscript.Echo "Content-type: text/html" & vbLF & vbLF
WScript.Echo "Hello World!"
WScript.Echo "Hello World!"
Wscript.Quit 0
Wscript.Quit 0
</syntaxhighlight>
</source>


== Références ==
== Références ==

Version actuelle du 16 avril 2020 à 09:37

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.

Configurer l'accès aux scripts CGI[modifier | modifier le wikicode]

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 module[modifier | modifier le wikicode]

a2enmod cgi

ScriptAlias[modifier | modifier le wikicode]

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.

ExecCGI[modifier | modifier le wikicode]

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

AddHandler[modifier | modifier le wikicode]

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

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

Récapitulatif[modifier | modifier le wikicode]

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 CGI[modifier | modifier le wikicode]

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.

Bash[modifier | modifier le wikicode]

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.

Perl[modifier | modifier le wikicode]

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

Python[modifier | modifier le wikicode]

#!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.

VBS[modifier | modifier le wikicode]

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érences[modifier | modifier le wikicode]