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

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Ligne 10 : Ligne 10 :
Pour qu'Apache prenne en charge les scripts, il est nécessaire d'effectuer un minimum de paramétrage dans la configuration du site.
Pour qu'Apache prenne en charge les scripts, il est nécessaire d'effectuer un minimum de paramétrage dans la configuration du site.


==== ScriptAlias ====
La directive <code>ScriptAlias /cgi-bin/ ''/chemin des scripts/''</code> (de httpd.conf) précise le nom du répertoire où Apache est autorisé à exécuter des scripts CGI<ref>http://httpd.apache.org/docs/current/fr/howto/cgi.html</ref>.
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<ref>http://httpd.apache.org/docs/current/fr/howto/cgi.html</ref>.


Exemple Unix :
Exemple Unix :
ScriptAlias /cgi-bin /var/www/cgi-bin
ScriptAlias /cgi-bin/ /var/www/cgi-bin
Exemple Windows, utiliser le format URL :
Exemple Windows, utiliser le format URL (pas d'antislash) :
ScriptAlias /cgi-bin
ScriptAlias /cgi-bin/ "cgi-bin"


Le chemin <code>/cgi-bin</code> n'existe pas vraiment, il est dirigé vers <code>/var/www/cgi-bin</code>, et cela permet d'écrire des URL comme <code><nowiki>http://serveur/cgi-bin/mon_script</nowiki></code>.
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>.


==== ExecCGI ====
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 :
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>
<Directory /var/www/cgi-bin>
Ligne 24 : Ligne 28 :
</Directory>
</Directory>


Exemple : vous écrivez un script <code>essai.cgi</code>, et vous voulez que <code>/home/httpd/cgi-bin</code> contienne les scripts.
Par exemple : vous écrivez un script <code>essai.cgi</code>, et vous voulez que <code>/home/httpd/cgi-bin</code> contienne les scripts.
Il faut donc au moins écrire :
Il faut donc au moins écrire :
ScriptAlias /cgi-bin /home/httpd/cgi-bin
<pre>
ScriptAlias /cgi-bin /home/httpd/cgi-bin
<Directory /home/httpd/cgi-bin>
Options ExecCGI
<Directory /home/httpd/cgi-bin>
</Directory>
Options ExecCGI
</Directory>
</pre>


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

==== AddHandler ====
Cette clause permet de choisir les extensions de fichiers qui seront autorisés, ex :
AddHandler cgi-script .cgi .exe .pl .py .vbs


===Écrire un programme CGI===
===Écrire un programme CGI===

Version du 20 juillet 2014 à 23:17



Scripts CGI

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

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

ScriptAlias

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/ "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

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 :

ScriptAlias /cgi-bin /home/httpd/cgi-bin
<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

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

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

Écrire un programme CGI

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 header http permettant de les identifier. Voici un exemple de programme CGI écrit en bash :

#!/bin/bash

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

# Fin de l'header
echo ""

# Contenu à afficher dans le navigateur
echo "<html><body>Bonjour</body></html>"

Ce script génère une page HTML.


Erreurs connues

  • Accès interdit : lister ce répertoire est interdit, il faut donc connaitre l'URL des fichiers qu'il contient.
  • Le code source du fichier à exécuter s'affiche dans le navigateur : le .htaccess n'est pas bien configuré.
  • couldn't create child process
  • End of script output before headers


Références