-
Notifications
You must be signed in to change notification settings - Fork 167
Expand file tree
/
Copy pathtutorial.xml
More file actions
executable file
·474 lines (452 loc) · 17.6 KB
/
tutorial.xml
File metadata and controls
executable file
·474 lines (452 loc) · 17.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 876557ae38f6ca5035618f7cea48ca627118b437 Maintainer: lacatoire Status: ready -->
<!-- Reviewed: yes -->
<chapter xml:id="tutorial" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<info><title>Une introduction à PHP</title></info>
<para>
Dans cette section, nous voulons illustrer les principes de base
de PHP dans une courte introduction. Ce chapitre traite uniquement
de création de pages web dynamiques avec PHP, laissant de côté
temporairement les autres possibilités de PHP. Voir la section
<link linkend="intro-whatcando">Ce que peut faire PHP</link> pour
plus d'informations.
</para>
<para>
Les pages web qui exploitent PHP sont traitées comme des pages
HTML standards, et il est possible de les créer, éditer et effacer
de la même façon qu'avec des pages HTML classiques.
</para>
<section xml:id="tutorial.firstpage">
<info><title>La première page PHP</title></info>
<simpara>
Ce tutoriel suppose que PHP est déjà installé.
Les instructions d'installation sont disponibles sur la
<link xlink:href="&url.php.downloads;">page de téléchargement</link>.
</simpara>
<para>
Créer un fichier appelé <filename>hello.php</filename>
avec le contenu suivant :
</para>
<para>
<example>
<info><title>Notre premier script PHP : <filename>hello.php</filename></title></info>
<programlisting role="php">
<![CDATA[
<?php
echo "Hello World!";
?>
]]>
</programlisting>
<simpara>
Depuis le terminal, il faut se rendre dans le répertoire contenant ce fichier et
démarrer un serveur de développement avec la commande suivante :
</simpara>
<programlisting role="shell">
<![CDATA[
php -S localhost:8000
]]>
</programlisting>
<simpara>
Il faut utiliser un navigateur pour accéder au fichier en utilisant l'URL du serveur web, se terminant
avec la référence au fichier <literal>/hello.php</literal>.
Selon la commande précédente exécutée, l'URL sera
<literal>http://localhost:8000/hello.php</literal>.
Si tout est configuré correctement, ce fichier sera analysé par PHP
et la sortie "Hello World!" sera affichée dans le navigateur.
</simpara>
<simpara>
PHP peut être intégré dans une page web HTML normale. Cela signifie que, dans le document HTML,
il est possible d'écrire des instructions PHP, comme démontré dans l'exemple suivant :
</simpara>
<programlisting role="php">
<![CDATA[
<!DOCTYPE html>
<html>
<head>
<title>Test PHP</title>
</head>
<body>
<?php echo '<p>Bonjour le monde</p>'; ?>
</body>
</html>
]]>
</programlisting>
<simpara>
Cela produira le résultat suivant :
</simpara>
<screen role="html">
<![CDATA[
<!DOCTYPE html>
<html>
<head>
<title>Test PHP</title>
</head>
<body>
<p>Bonjour le monde</p>
</body>
</html>
]]>
</screen>
</example>
</para>
<para>
Ce programme est extrêmement simple et PHP n'est pas nécessaire
pour créer une page web comme ceci. Elle ne fait qu'afficher
<literal>Bonjour le monde</literal>, grâce à la fonction
<function>echo</function>
de PHP. Il est à noter que ce fichier <emphasis>n'a pas besoin d'être exécutable</emphasis>
ou autre, dans aucun cas. Le serveur sait que ce fichier a besoin d'être interprété
par PHP, car l'extension ".php" est utilisée, et le serveur est configuré pour
les passer à PHP. Il s'agit d'une page HTML normale qui contient une série
de balises spéciales qui permettent de réaliser beaucoup de choses intéressantes.
</para>
<para>
Le point important de cet exemple était de montrer le format des
balises spéciales PHP. Nous avons utilisé ici
<literal><?php</literal> pour indiquer le début de la balise PHP.
Puis, nous avons introduit les commandes PHP et refermé les balises
PHP avec <literal>?></literal>. Il est possible de passer du mode PHP
au mode HTML et vice-versa, de cette manière, à volonté. Pour plus
d'informations, consulter la section du manuel sur la
<link linkend="language.basic-syntax">syntaxe basique de PHP</link>.
</para>
<note>
<info><title>Une note sur les retours à la ligne</title></info>
<para>
Les retours à la ligne ont une signification minime en HTML, cependant,
c'est toujours une bonne idée de rendre le HTML aussi joli et proche
que possible en y ajoutant des retours à la ligne. Un retour à la ligne
suivant immédiatement une balise de fermeture PHP (<literal>?></literal>)
sera supprimé par PHP. Ceci peut être vraiment très utile lors de
l'insertion de plusieurs blocs PHP ou fichiers inclus contenant du PHP qui
n'est pas supposé afficher quoi que ce soit. En même temps, ce peut
être confus. Il est possible d'ajouter un espace après la balise fermante
PHP (<literal>?></literal>) pour forcer l'espace et un retour à
la ligne à afficher, ou d'ajouter explicitement un retour à la ligne
dans le dernier echo/print du bloc PHP.
</para>
</note>
<note>
<info><title>Une note sur les éditeurs de texte</title></info>
<para>
Il existe de nombreux éditeurs de texte et environnements de
développement (IDE) utilisables pour créer, éditer
et gérer des applications PHP. Une liste partielle de ces outils
est entretenue à l'adresse
<link xlink:href="&url.phpeditorlist;">PHP Editor's List</link>.
Pour recommander un éditeur particulier, il suffit de visiter
cette page et de demander au webmestre de l'ajouter. Avoir au minimum
un éditeur de texte avec la coloration syntaxique peut être utile.
</para>
</note>
<note>
<info><title>Une note sur les traitements de texte</title></info>
<para>
Les traitements de texte tels que StarOffice Writer, Microsoft Word et
Abiword sont de très mauvais choix pour éditer des scripts PHP.
Pour utiliser l'un d'entre eux malgré tout pour tester des
scripts, il faut s'assurer de sauver les fichiers au format
texte seul (<emphasis>plain text</emphasis>) : sinon, PHP ne sera pas capable de lire
et d'exécuter ces scripts.
</para>
</note>
<para>
Maintenant que le script PHP précédent fonctionne, c'est le moment
de créer le meilleur script PHP ! Un appel à la fonction
<function>phpinfo</function> affichera beaucoup d'informations
intéressantes sur le système et sa configuration comme les
<link
linkend="language.variables.predefined">variables pré-définies disponibles</link>,
les modules PHP chargés ainsi que la <link linkend="configuration">configuration</link>.
Prendre le temps de revoir ces informations importantes.
</para>
<para>
<example>
<info><title>Récupération des informations du système depuis PHP</title></info>
<programlisting role="php">
<![CDATA[
<?php
phpinfo();
?>
]]>
</programlisting>
</example>
</para>
</section>
<section xml:id="tutorial.useful">
<info><title>Trucs pratiques</title></info>
<para>
Réalisons maintenant quelque chose de plus puissant. Nous allons
vérifier le type de navigateur que le visiteur de notre site utilise.
Pour cela, nous allons accéder aux informations que le navigateur
du visiteur nous envoie, lors de sa requête HTTP. Cette information
est stockée dans une <link linkend="language.variables">variable</link>.
Les variables sont faciles à repérer, car elles commencent toutes par
un signe dollar. La variable qui nous intéresse ici est
<varname>$_SERVER['HTTP_USER_AGENT']</varname>.
</para>
<note>
<para>
<varname>$_SERVER</varname> est une
variable spéciale de PHP, qui contient toutes les informations
relatives au serveur web. C'est une variable réservée de PHP,
et une superglobale. Se reporter aux pages du manuel traitant des
<link linkend="language.variables.superglobals">Auto-globales</link>
(aussi connues sous le nom de super-globales).
</para>
</note>
<para>
Pour afficher cette variable, nous pouvons simplement faire :
</para>
<para>
<example>
<info><title>Afficher le contenu d'une variable (élément de tableau)</title></info>
<programlisting role="php">
<![CDATA[
<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>
]]>
</programlisting>
<para>
Un résultat possible du script pourra alors être :
</para>
<screen role="html">
<![CDATA[
Mozilla/5.0 (Linux) Firefox/112.0
]]>
</screen>
</example>
</para>
<para>
Il y a de nombreux <link linkend="language.types">types</link> de
variables disponibles en PHP. Dans l'exemple ci-dessus, nous avons affiché
un élément d'une variable <link linkend="language.types.array">Tableau (Array)</link>.
Les tableaux peuvent être très utiles.
</para>
<para>
<varname>$_SERVER</varname> est juste une variable qui est automatiquement
disponible dans le script. Une liste de toutes les variables qui sont
rendues disponibles est fournie dans la section
<link linkend="reserved.variables">Variables réservées</link> ; il est
également possible d'en obtenir une liste complète en lisant l'affichage de la fonction
<function>phpinfo</function> utilisée dans l'exemple de la section précédente.
</para>
<para>
Il est possible d'ajouter plusieurs commandes PHP dans une balise PHP, et créer
de petits blocs de code qui réalisent des opérations plus complexes
qu'un simple affichage. Par exemple, si nous voulons vérifier que le
navigateur est bien de la famille Firefox, nous pouvons
faire cela :
</para>
<para>
<example>
<info><title>Exemple utilisant les
<link linkend="language.control-structures">structures de contrôle</link> et
les <link linkend="language.functions">fonctions</link></title></info>
<programlisting role="php">
<![CDATA[
<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
echo 'Vous utilisez Firefox.';
}
?>
]]>
</programlisting>
<para>
Le résultat de ce script, avec Firefox, sera :
</para>
<screen role="html">
<![CDATA[
Vous utilisez Firefox.
]]>
</screen>
</example>
</para>
<para>
Ici, nous introduisons plusieurs nouveaux concepts. Nous avons une
structure <link linkend="control-structures.if">if</link>.
Les personnes familières avec les syntaxes de base du langage C ne seront
pas surprises. Dans le cas contraire, il est recommandé de lire une
introduction à PHP et d'assimiler les premiers chapitres, ou bien
de consulter le chapitre consacré à
<link linkend="langref">la référence du langage</link>.
</para>
<para>
Le second concept que nous avons introduit est la fonction <function>str_contains</function>.
<function>str_contains</function> est une fonction intégrée à PHP, qui détermine
la présence d'une chaîne donnée dans une autre. Dans notre cas, nous
avons recherché la chaîne <literal>"Firefox"</literal> (appelée needle)
dans <varname>$_SERVER['HTTP_USER_AGENT']</varname> (appelée haystack).
Si la chaîne recherchée est trouvée, la fonction retourne &true;. Sinon, elle retourne &false;.
Si elle retourne &true;, la structure <link linkend="control-structures.if">if</link>
reçoit &true; et le code entre accolades {} est exécuté. Sinon, le code n'est pas
exécuté. Il est recommandé d'expérimenter d'autres exemples, à l'aide de
<link linkend="control-structures.if">if</link>,
<link linkend="control-structures.else">else</link>, et d'autres
fonctions comme <function>strtoupper</function> et
<function>strlen</function>. Chaque page de la documentation contient aussi
des exemples. En cas de doute sur l'utilisation de ces fonctions, il est recommandé de lire
la page du manuel
"<link linkend="about.prototypes">comment lire une définition de fonction</link>"
ainsi que la <link linkend="language.functions">section sur les fonctions PHP</link>.
</para>
<para>
Il est maintenant possible de progresser et de montrer comment utiliser le mode PHP,
au milieu du code HTML :
</para>
<para>
<example>
<info><title>Passer du mode PHP au mode HTML et vice-versa</title></info>
<programlisting role="php">
<![CDATA[
<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
?>
<h3>str_contains() a retourné true</h3>
<p>Vous utilisez Firefox</p>
<?php
} else {
?>
<h3>str_contains() a retourné false</h3>
<p>Vous n'utilisez pas Firefox</p>
<?php
}
?>
]]>
</programlisting>
<para>
Un exemple de résultat obtenu dans ce script est :
</para>
<screen role="html">
<![CDATA[
<h3>str_contains() a retourné true</h3>
<p>Vous utilisez Firefox</p>
]]>
</screen>
</example>
</para>
<para>
Au lieu d'utiliser une commande <function>echo</function> pour afficher
du texte, il est possible d'utiliser du code HTML pur. Le point important à noter
ici est que la logique de programmation est conservée. Seul un des deux
blocs HTML sera affiché, suivant le résultat de la fonction <function>str_contains</function>.
En d'autres termes, cela dépend si la chaîne <literal>Firefox</literal>
a été trouvée ou non.
</para>
</section>
<section xml:id="tutorial.forms">
<info><title>Utiliser un formulaire</title></info>
<para>
L'un des points forts de PHP est sa capacité à gérer les formulaires.
Le concept de base qui est important à comprendre est que tous les
champs d'un formulaire seront automatiquement disponibles dans le
script PHP d'action. Consulter le chapitre du manuel concernant les
<link linkend="language.variables.external">variables depuis des sources externes à PHP</link>
pour plus d'informations et d'exemples sur la façon d'utiliser les
formulaires. Voici un exemple de formulaire HTML :
</para>
<para>
<example>
<info><title>Un simple formulaire HTML</title></info>
<programlisting role="html">
<![CDATA[
<form action="action.php" method="post">
<label for="nom">Votre nom :</label>
<input name="nom" id="nom" type="text">
<label for="age">Votre âge :</label>
<input name="age" id="age" type="number">
<button type="submit">Valider</button>
</form>
]]>
</programlisting>
</example>
</para>
<para>
Il n'y a rien de particulier dans ce formulaire. Il est en HTML
pur, sans aucune configuration particulière. Lorsque le visiteur
remplit le formulaire et clique sur le bouton Valider, le
fichier <filename>action.php</filename> est appelé. Dans ce
fichier, il est possible d'écrire le script suivant :
</para>
<para>
<example>
<info><title>Afficher des données issues d'un formulaire</title></info>
<programlisting role="php">
<![CDATA[
Bonjour, <?php echo htmlspecialchars($_POST['nom']); ?>.
Tu as <?php echo (int) $_POST['age']; ?> ans.
]]>
</programlisting>
<para>
Voici le résultat possible, selon
les valeurs saisies :
</para>
<screen role="html">
<![CDATA[
Bonjour Jean.
Tu as 29 ans.
]]>
</screen>
</example>
</para>
<para>
Mis à part les parties <function>htmlspecialchars</function> et
<literal>(int)</literal>, ce script ne fait que des choses évidentes.
<function>htmlspecialchars</function> s'assure que tous les caractères
spéciaux HTML sont proprement encodés afin d'éviter des injections
de balises HTML et de Javascript dans les pages. Pour l'âge, vu que
c'est un entier, il est possible de le
<link linkend="language.types.typecasting">convertir</link> en un
&integer;. PHP peut également le faire
automatiquement en utilisant l'extension
<link linkend="ref.filter">filter</link>.
Les variables <varname>$_POST['nom']</varname> et
<varname>$_POST['age']</varname> sont automatiquement créées par PHP.
Un peu plus tôt dans ce tutoriel, nous avons utilisé la variable
<varname>$_SERVER</varname>, une superglobale. Maintenant, nous avons
introduit une autre superglobale <varname>$_POST</varname>
qui contient toutes les données envoyées par la méthode POST. Il est à noter que
dans notre formulaire, nous avons choisi la <emphasis>méthode</emphasis> POST.
Si nous avions utilisé la méthode <emphasis>GET</emphasis> alors notre formulaire
aurait placé ces informations dans la variable <varname>$_GET</varname>,
une autre superglobale. Il est également possible d'utiliser la variable
<varname>$_REQUEST</varname>,
pour ne pas se soucier de la méthode utilisée. Elle contient
un mélange des données de GET, POST et COOKIE.
</para>
</section>
<section xml:id="tutorial.whatsnext">
<info><title>Et après ?</title></info>
<para>
Avec ces connaissances, il est maintenant possible de comprendre
l'essentiel de la documentation PHP, et les différents scripts d'exemples
disponibles dans les archives.
</para>
<para>
Différentes présentations des capacités de PHP sont disponibles sur le
site des conférences PHP :
<link xlink:href="&url.php.talks;">&url.php.talks;</link>.
</para>
</section>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->