| Qui est en ligne ? |
| Il y a : 12 utilisateurs en ligne, consultez le détail |
Forum » Documentation Linux » Module : CGI+SSI |
Forum modéré par : Jul |
| Même auteur |
|
Score ( voter ) : ![]() ![]() ![]()
|
|
|
|
|
| Page : [1] |
| Auteur | Message |
|---|---|
|
|
#0 Message posté le : 17-09-2006 à 00:00:00 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 04-07-2003 Nombre de messages : 171 |
1. IntroductionVoici comment modifier la configuration de votre serveur web afin d'activer les CGI et exploiter les SSI. CGI: Common gateway interface. Une cgi est un programme dont le flux de sortie sera renvoyé au client via le serveur web.
2. Configuration d'apacheCommencons d'abord par "activer" les cgi , pour cela, il suffit de modifier le fichier httpd.conf, et trouvez la ligne ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" Le deuxième argument peut être différent, cherchez dans le fichier simplement la ligne qui contient ScriptAlias, et remplacer /var/www/cgi-bin/ par le répertoire qui contiendra les cgi, si cette ligne est manquante ajouter la simplement. AddHandler cgi-script .pl AddHandler cgi-script .cgi AddHandler cgi-script .exe Ces lignes permettent au serveur de savoir que les fichiers ayant des extensions en .pl, .cgi et .exe sont des CGI à executer. Ensuite faites un petit test, tapez ceci dans un fichier que vous nommez par exemple test.cgi #!/bin/sh # disable filename globbing set -f echo Content-type: text/html echo echo "<b>Les cgi ont l air de fonctionner</b>" echo Vous devez également systématiquement attribuer les droits nécéssaires a votre fichier pour qu'il puisse etre executé, pour cela tapez simplement:
chmod a+x /votre/site/cgi-bin/test.cgi Ensuite testez via votre navigateur en tapant dans la barre d'adresse: http://localhost/cgi-bin/test.cgi Et vous devriez vois apparaitre un texte en gras. Maintenant nous allons "activer" les ssi dans un répertoire. Pour cela, verifier que la ligne LoadModule includes_module libexec/mod_include.so est bien décommentée. Ensuite ajouter (toujours dans httpd.conf) les lignes : AddType text/html .shtml AddHandler server-parsed .shtml Et ensuite pour chaque répertoire qui contiendront des fichiers contenant des SSI ajoutez : <Directory /votre/site/> Options Indexes Includes FollowSymLinks MultiViews </Directory> Vous pouvez simplement rajouter cette ligne à la fin du fichier. Supposons que vous ayez activé les SSI dans le root du serveur web. Testons le bon fonctionnement des SSI en créant par exemple ce fichier: <html> <head><title>test SSI</title></head> <body> <div><!--#echo var="REMOTE_ADDR" --></div> <div><!--#exec cgi="cgi-bin/test.cgi" --></div> </body> </html> Que vous enregistrez sous test.shtml (attention a l'extension). Si vous l'avez placé a la racine du serveur Vous devriez pouvoir l'atteindre en tapant http://localhost/test.shtml dans votre navigateur. 3. Ecrire des CGILes cgi peuvent être écrites dans divers languages, les plus courants sont perl,python,C/C++ mais des tas d'autre language permettent d'implémenter des CGI. Le concept est toujours le même, une cgi emploie le flux de donnée standart ou l'on spécifie une entete relative au contenu généré par votre CGI. Pour du html il s'agit simplement de "Content-type: text/html". Vous devez donc effectuer une sortie de cette constante avant toutes autres sorties. Vous disposez ci-dessus d'un exemple en bash. Voici un exemple en C++ et perl: 3.1 en perl :une CGI de base en Perl serait : #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<div>Hello world!!!</div>"; Tout simplement. Enregistrez ce code dans un fichier que vous nommez par exemple test.pl dans le repertoire cgi-bin n'oubliez pas la commande chmod a+x /votre/site/cgi-bin/test.pl Pour exploiter les variables d'environnement de apache, vous pouvez utiliser le module CGI.pm soit la variable global $ENV, modifiez test.pl de cette facon: #!/usr/bin/perl
use CGI;
$co = new CGI;
$test = $co->param('test');
#on recupere les variables postées ou transmises par l'url
print "Content-type: text/html\n\n";
print "<div><b>test = ".$test."</b></div>";
print "<div>votre ip:".$ENV{'REMOTE_ADDR'}."</div>";
#on affiche l'adresse ip sans le module CGIPour comprendre au mieux ce dernier script, tapez par exemple http://localhost:80/cgi-bin/test.pl?test=foo dans votre navigateur, de sotre que perl puisse assigner une valeur a $test lors de l'instruction $test = $co->param('test'); 3.2 en cpp :Le "hello world" typique: #include <iostream.h>
int main()
{
cout<<"Content-type: text/html\n\n"<<endl;
cout<<"<b>Hello world!!!</b>"<<endl;
return 0;
}enregistrer ceci dans un fichier test.cpp par exemple ensuite taper la commande
g++ test.cpp -o testcpp.cgi copier testcpp.cgi dans votre repertoire cgi-bin ( n'oubliez pas la commande chmod), et tapez dans votre navigateur http://localhost/cgi-bin/testcpp.cgi Pour exploiter les variables d'environnement, il suffit d'inclure stdlib.h pour disposer de la fonction getenv ,modifier testcpp.cpp : #include <iostream.h>
#include <stdlib.h>
int main()
{
char * ip = getenv("REMOTE_ADDR");
cout<<"Content-type: text/html\n\n"<<endl;
cout<<"<b>Hello world!!!</b>"<<endl;
cout<<"<div>votre ip: "<<ip<<"</div>"<<endl;
return 0;
}recompilez et recopiez testcpp.cgi au bon endroit et réexecutez le programme via votre navigateur vous devriez voir "hello world" suivi de votre adresse ip. Les variables postées peuvent également etre lu sur le flux d'entrée standart avec la fonction cin par exemple: Créer d'abord un fichier form.html que vous ne placez pas dans votre repertoire cgi-bin pour éviter tout problème de droit, par exemple a la racine : form.html : <html> <form action ="cgi-bin/testcpp.cgi" method="post"> <input type="text" name="test" /> <input type="submit" value="envoyer" /> </form> </html> et modifier test.cpp de cette facon: #include <iostream.h>
#include <stdlib.h>
int main()
{
char * ip = getenv("REMOTE_ADDR");
int length = atoi(getenv("CONTENT_LENGTH"));
char i[10];
cout<<"Content-type: text/html\n\n"<<endl;
cout<<"<div>hello world</div>";
cout<<"<div>";
for (int j = 0;j< length;j++)
cin >> i[j];
for (int j = 0;j< length;j++)
cout<< i[j];
cout<<"</div>";
return 0;
}Vous devriez voir "hello world" puis un retour a la ligne puis encore "test=" suivi de ce que vous avez entré dans le formulaire. 4. Variable d'environnement :Voici une liste non-exhaustive des variables d'environnement d'apache: (que vous pouvez passer en arguments aux méthodes getenv et $ENV des codes ci-dessus)
Remarques :
--Message édité par TrustRobot le 17-09-2006 à 00:00:00-- |
|
|
#1 Message posté le : 23-06-2007 à 04:10:03 |
Petit scarabée Forum : Inscrit Association : Arrivé(e) le : 23-06-2007 Nombre de messages : 1 |
Bonsoir, bon petit article auquel je met une note quasi-maximal mais, concernant SSI, est-t-il normal qu'un code comme celui-ci (testé sur mon serveur de production et qui fonctionne) ne soit pas interprété par la machine de test ou j'ai appliqué cette article. ## DEB <!--#if expr="\"$QUERY_STRING\" != \"i\=3\"" --> <div class="section"><b>⠋</b> <a href="formations.multimedia?i=3" tabindex="36">MULTIMÉDIA</a> <!--#else --> <div class="section"><b>⠏</b> <a href="formations.multimedia?i=3" tabindex="37">MULTIMÉDIA</a> <div class="soussection"><a href="formations.multimedia.webmester-niveau-1?i=3" tabindex="38">Webmester niveau 1</a></div> <div class="soussection"><a href="formations.multimedia.webmester-niveau-2?i=3" tabindex="39">Webmester niveau 2</a></div> <div class="soussection"><a href="formations.multimedia.webmester-niveau-3.1?i=3" tabindex="40">Webmester niveau 3.1</a></div> <div class="soussection"><a href="formations.multimedia.webmester-niveau-3.2?i=3" tabindex="41">Webmester niveau 3.2</a></div> <div class="soussection"><a href="formations.multimedia.webmester-niveau-3.3?i=3" tabindex="42">Webmester niveau 3.3</a></div> <!--#endif --> </div> ## END Au lieu sortir un code HTML du type : <div> <div></div> <div></div> </div> Il sort : <div> <div> <div></div> <div></div> </div> </div> Cordialement. |
| Page : [1] |
Forum » Documentation Linux » Module : CGI+SSI |
Forum modéré par : Jul |
| Même auteur |
|
Score ( voter ) : ![]() ![]() ![]()
|
|
|
|
|
- Petit scarabée : 0 pastille, moins de 100 messages
- Scarabée : 0 pastille, plus de 100 messages
- Hobbit : 1 pastille, plus de 1000 messages
- Naboo : 2 pastilles, plus de 2000 messages
- Elfe : 3 pastilles, plus de 3000 messages
- Jedi : 4 pastilles, plus de 4000 messages
- Maître Jedi : 5 pastilles, plus de 5000 messages
