« Apache/CGI » : différence entre les versions
mAucun résumé des modifications |
intro plus pédagogue |
||
Ligne 5 : | Ligne 5 : | ||
==Scripts CGI== |
==Scripts CGI== |
||
⚫ | |||
===Configurer l'accès aux 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. |
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 <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 <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>. |
||
Exemple Unix : |
Exemple Unix : |
||
Ligne 17 : | Ligne 19 : | ||
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>. |
||
La clause suivante active l'option ExecCGI 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> |
||
Options ExecCGI |
Options ExecCGI |
||
Ligne 34 : | Ligne 36 : | ||
===Écrire un programme CGI=== |
===Écrire un programme CGI=== |
||
Le CGI (Common Gateway Interface) n'est pas un langage, c'est une norme. |
|||
⚫ | |||
La contrainte principale concerne la sortie du programme. |
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. |
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. |
Version du 20 juillet 2014 à 22:59
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.
La directive ScriptAlias /cgi-bin/ /chemin des scripts/
(de httpd.conf) 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 :
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
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