Sign in Join
Wiki copytemporary

CGI Web Programming/fr: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: CGI Web Programming/fr

OldNewLine
1+Ceci est le début d'un tutorial relatif à la programmation cgi web. A remarquer que l'utilisation d'un cadre d'application (framework) sera sans doute plus productif. Tout le monde est invité à contribuer.
2+
3+## A propos de CGI
4+
5+[**CGI** (Common Gateway Interface)](http://fr.wikipedia.org/wiki/Common_Gateway_Interface) fonctionne simplement comme ceci :
6+
7+Nous avons deux ordinateurs :
8+
9+- Ordinateur serveur - Cet ordinateur stockera les fichiers hébergés (pages web, images et CGI);
10+- Ordinateur client - En général, cet ordinateur utilise un navigateur pour demander les fichiers hébergés sur l'ordinateur serveur.
11+
12+Vous pouvez employer les CGI seulement si votre serveur d'hébergement supporte les CGI. Après avoir hébergé vos fichiers, le CGI est généralement utilisé ainsi : **http://www.yourserver.com\[.xx\]/yourlogin/cgi-bin/cginame.exe**
13+
14+**Notes:**
15+
16+- Le fichier CGI n'a pas besoin de l'extension **.exe**.
17+- Le CGI devra être (évidemment) compilé pour la plateforme de l'ordinateur serveur (Linux, Windows ...)
18+
19+## A propos des CGI FreePascal et comment tester vos CGI
20+
21+Un CGI Free Pascal est un programme exécutable normal, comme tout programme sur votre ordinateur. Contrairement aux CGI en Perl, un CGI Free Pascal n'est pas interprété. C'est un programme exécutable indépendant.
22+
23+Pour tester un CGI, vous devez avoir installé sur votre ordianteur un **serveur HTTP** avec support pour les CGI. Un bon, et recommandé, [serveur HTTP](http://fr.wikipedia.org/wiki/Serveur_HTTP) est [Apache](http://fr.wikipedia.org/wiki/Apache_HTTP_Server), disponible pour Windows et Linux. Un autre **serveur HTTP** est [Xitami](http://en.wikipedia.org/wiki/Xitami) qui supporte les CGI en perl et les 16bits (mais **Xitami** est vraiment archaïque).
24+
25+## Un exemple simple
26+
27+Ceci est un exemple de programme CGI minimal de démonstration...
28+
29+1. Définir un cookie
30+2. Préciser le type de contenu (c-à-d prévoir que le contenu devra être du texte pour HTTP)
31+3. Lire les Cookies
32+4. Lire les données du formulaire via GET
33+5. Lire les données du formulaire via POST
34+
35+``` pascal
36+program mini;
37+
38+uses dos;
39+
40+var
41+ a:string;
42+ c:char;
43+begin
44+ // set a cookie (must come before content-type line below)
45+ // don't forget to change the expires date
46+writeln('Set-cookie:widget=value; path=/; expires= Mon, 21-Mar-2005 18:37:00 GMT');
47+
48+ // output legal http page
49+ writeln('Content-Type:text/html',#10#13);
50+
51+ // demonstrate get cookies
52+ a:= GetEnv('HTTP_COOKIE');
53+ writeln('cookies:',a);
54+
55+ // demonstrate GET result
56+ a:='';
57+ a:= GetEnv('QUERY_STRING');
58+ writeln('GET: ',a);
59+
60+ // demonstrate POST result
61+ a:='';
62+ while not eof(input) do
63+ begin
64+ read(c);
65+ a:= a+c;
66+ end;
67+ writeln('POST: ',a);
68+end.
69+```
70+
71+## Un simple compteur de visites
72+
73+L'application **hitcounter** présente un simple compteur de visite pour votre site web. Il est possible d'entrer des listes de blocages dans un fichier de configuration. Ainsi, les robots et votre propre ordinateur pourront être exclus des statistiques. Il y a encore beaucoup d'améliorations possibles bien sûr, comme un cookie afin que vous obteniez un seul hit par session, mais il donne une bonne introduction à la programmation CGI. Si vous utilisez le code et le modifiez, s'il vous plaît envoyez-moi un patch pour que je puisse le mettre à jour.
74+
75+Vous pouvez trouver le code ici : [1](http://modelbuilder.svn.sourceforge.net/viewvc/modelbuilder/html/cgi/)
76+
77+## Débogage de CGI
78+
79+Parce qu'une application CGI n'écrit pas sur l'écran, et est démarré depuis un autre processus (le serveru web), le débogage est plus difficile que pour une application de bureau.
80+
81+Une solution consiste à laisser l'application CGI démarrer un débogueur: Quand elle est utilisée par un programme, cette unité, comme partie de l'initialisation, lancera un nouveau processus qui ouvre un terminal (Windows:cmd, Linux:xterm...) et démarre le débogueur gdb en l'attachant au processus appelant.
82+
83+Un court "sleep" garantit que gdb interrompt le programme pendant l'initialisation.
84+
85+A été testé sur :
86+
87+- Windows XP32 avaec Apache 2.2 s'exécutant comme une application ou un service (ne fonctionne plus sur les versions plus récentes de Windows, voir [2](http://forum.lazarus.freepascal.org/index.php/topic,21931.msg128849.html#msg128849).
88+- Ubuntu 10.04 x64 avec Apache 2.2
89+- Debian unstable x64 avec Apache 2 (Fév. 2013)
90+
91+D'autres instructions sont dans l'unité:
92+
93+``` pascal
94+unit SelfDebug;
95+
96+{
97+Instructions:
98+-Include unit anywhere in the program.
99+-Change DEBUGGER constant to match your debugger (gdb, ddd,gdbtui...)
100+-For Windows, if the program to debug is running as a service (e.g. CGI application
101+ from Apache running as a service), make sure the service is configured with
102+ "Interact with desktop" checked. Failing to do so, the debugger will be started
103+ without a console, break the program and hang waiting for input. Killing the debugger
104+ is your only option.
105+-For Linux, if the program to debug is running as a different user (e.g. CGI application),
106+ run "xhost +" in a terminal to enable all users to connect to xserver.
107+ If needed, change DISPLAY to match your DISPLAY environment variable
108+}
109+
110+{$mode objfpc}{$H+}
111+
112+interface
113+
114+uses
115+ Classes, SysUtils,Process;
116+
117+implementation
118+
119+const
120+ {$ifdef windows}
121+ DEBUGGER='C:\lazarus\mingw\bin\7.3\gdb.exe';
122+ {$endif}
123+ {$ifdef linux}
124+ DEBUGGER='gdb';
125+ DISPLAY=':0.0';
126+ {$endif}
127+ MSWAIT=2000;
128+
129+var
130+ AProcess: TProcess;
131+
132+initialization
133+AProcess := TProcess.Create(nil);
134+{$ifdef windows}
135+AProcess.CommandLine := format('cmd /C START "Debugging %s" /WAIT "%s" "%s" %d"',[paramstr(0),debugger,paramstr(0),GetProcessID]);
136+{$endif}
137+{$ifdef linux}
138+AProcess.CommandLine := format('xterm -display %s -T "Debugging %s" -e "%s" "%s" %d',[DISPLAY,paramstr(0),DEBUGGER,paramstr(0),GetProcessID]);
139+{$endif}
140+AProcess.Execute;
141+sleep(MSWAIT);
142+finalization
143+AProcess.Free;
144+end.
145+```
146+
147+[Source](http://www.hu.freepascal.org/lists/fpc-pascal/2011-October/030752.html)
148+
149+D'autres solutions sont l'écriture vers un fichier ou un événement log/syslog.
150+
151+## Existing CGI Frameworks
152+
153+Il existe des unités CGI et des cadre d'application qui rendent trivial le travail avec CGI (et permet à chacun de définir des cookies, des sessions, traiter les méthodes POST et les GET).
154+
155+Il y aussi un CGIModule pour Lazarus, et quelques unités CGI et HTML dans la FCL de Free Pascal.
156+
157+Voir :
158+
159+- [[Brook for Free Pascal/fr|Cadre d'application Brook]], le cadre d'application Free Pascal parfait pour vos applications Web.
160+- [FastPlaz](http://www.fastplaz.com/), Cadre d'application Free Pascal pour vos applications Web avec un style MVC.
161+- [[fcl-web/fr|fcl-web]], un cadre d'application FPC et Lazarus (WebLaz)
162+- [Powtils](http://z505.com/powtils/idx.shtml)
163+- [ExtPascal](http://extpascal.googlecode.com) une enveloppe (wrapper) Ext JS.
164+- [Fano Framework](https://fanoframework.github.io/), cadre d'application Web pour la programmation moderne en Pascal. C'est écrit en Free Pascal.
165+
166+---
167+*From the Free Pascal wiki, page "CGI Web Programming/fr", as it stood on 2020-05-01 after a change by E-ric, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history