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

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 8 : Ligne 8 :
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.


La déclaration <code>ScriptAlias /cgi-bin ''chemin'' </code> précise le nom du répertoire autorisé à contenir des scripts CGI.
La directive <code>ScriptAlias /cgi-bin ''chemin'' </code> précise le nom du répertoire autorisé à contenir 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 :
Exemple Windows :
ScriptAlias /cgi-bin /var/www/cgi-bin
ScriptAlias C:\Program Files (x86)\EasyPHP\data\localweb\scripts


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>.
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>.
Ligne 22 : Ligne 22 :


Exemple : vous écrivez un script <code>essai.cgi</code>, et vous voulez que <code>/home/httpd/cgi-bin</code> contienne les scripts.
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 :
<pre>
<pre>
ScriptAlias /cgi-bin /home/httpd/cgi-bin
ScriptAlias /cgi-bin /home/httpd/cgi-bin
Ligne 60 : Ligne 60 :
* couldn't create child process
* couldn't create child process
* End of script output before headers
* End of script output before headers

<noinclude>
== Références ==
{{Références}}
</noinclude>

Version du 20 juillet 2014 à 18:33



Scripts CGI

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.

La directive ScriptAlias /cgi-bin chemin précise le nom du répertoire autorisé à contenir des scripts CGI<[1]. Exemple Unix :

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

Exemple Windows :

ScriptAlias C:\Program Files (x86)\EasyPHP\data\localweb\scripts

Le chemin /cgi-bin n'existe pas vraiment, il est dirigé vers /var/www/cgi-bin, et cela permet d'écrire des URL comme http://serveur/cgi-bin/mon_script.

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>

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

Écrire un programme CGI

Le CGI (Common Gateway Interface) n'est pas un langage, c'est une norme. Un programme CGI peut être écrit en n'importe quel langage (C, Java, PHP, bash...), du moment qu'il est exécutable et qu'il respecte certaines contraintes d'entrées/sortie.

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

  • 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