1
0
mirror of https://github.com/php/doc-fr.git synced 2026-03-24 07:02:06 +01:00
Files
archived-doc-fr/chapters/tutorial.xml
Louis-Arnaud 26c1ce9f8f En sync#2572
2026-03-02 14:30:00 +01:00

475 lines
18 KiB
XML
Executable File

<?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>&lt;?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>?&gt;</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>?&gt;</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>?&gt;</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
-->