Files
doc-fr/chapters/tutorial.xml
2024-09-17 04:51:16 +01:00

500 lines
20 KiB
XML
Executable File

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 8859c8b96cd9e80652813f7bcf561432a5e9f934 Maintainer: yannick Status: ready -->
<!-- Reviewed: yes -->
<chapter xml:id="tutorial" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Une introduction à PHP</title>
<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 vous pouvez les créer, éditer et effacer
tout comme vous le faites normalement avec des pages HTML
classiques.
</para>
<section xml:id="tutorial.requirements">
<title>Le nécessaire</title>
<para>
Dans ce tutoriel, nous présumons que vous avez un serveur
web avec le support PHP activé, et que les fichiers terminés
par l'extension <filename>.php</filename> sont traités par
PHP. Sur la plupart des serveurs, c'est la configuration par
défaut, mais n'hésitez pas à interroger votre administrateur
système en cas de doute. Si votre serveur web supporte PHP,
vous n'avez rien à faire. Simplement, créez un dossier,
puis créez un fichier texte, avec l'extension <filename>.php</filename> :
le serveur va automatiquement l'exécuter avec PHP. Il n'y a pas
de compilation, ou d'installation compliquée. Gardez en tête que
les fichiers sont comparables à des fichiers HTML, dans lesquels
vous allez utiliser des balises magiques, qui feront beaucoup
de choses pour vous.
</para>
<para>
Supposons que vous souhaitiez économiser du temps en ligne et travailler
localement. Dans ce cas, vous devez installer un serveur web comme
<link xlink:href="&url.apache;">Apache</link>, et bien sûr
<link xlink:href="&url.php.downloads;">PHP</link>. Vous souhaiterez
aussi installer une base de données comme
<link xlink:href="&url.mysql.docs;">MySQL</link>.
</para>
<para>
Vous pouvez soit installer ces logiciels individuellement ou bien d'une manière simplifiée.
Notre manuel contient les <link linkend="install">instructions d'installation de PHP</link>
(en supposant que vous ayez déjà un serveur web d'installé). Si vous
rencontrez des problèmes dans l'installation de PHP, nous vous suggérons
de poser vos questions sur notre
<link xlink:href="&url.php.mailing-lists;">liste de diffusions</link> réservée à cet usage.
Si vous choisissez une version simplifiée, vous pouvez utiliser des
<link xlink:href="&url.installkits;">installeurs</link>
qui prennent en charge l'ensemble de l'installation en quelques
clics. Il est facile de configurer un serveur web avec le support
de PHP sur n'importe quel système d'exploitation, y compris
Mac OS, Linux et Windows. Sous Linux, vous pouvez aussi trouver
des commandes comme <link xlink:href="&url.rpmfind;">rpmfind</link> et
<link xlink:href="&url.rpmfind.pbone;">PBone</link>
très pratiques pour rechercher les paquets pré-compilés.
Vous pouvez aussi visiter <link xlink:href="&url.apt-get;">apt-get</link>,
pour des paquets Debian.
</para>
</section>
<section xml:id="tutorial.firstpage">
<title>Votre première page PHP</title>
<para>
Créez un fichier appelé <filename>bonjour.php</filename> dans votre
dossier web racine (<varname>DOCUMENT_ROOT</varname>) avec le contenu suivant :
</para>
<para>
<example>
<title>Notre premier script PHP : <filename>bonjour.php</filename></title>
<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>
Utilisez votre navigateur pour accéder au fichier via votre serveur web,
en ajoutant le nom de fichier <literal>/bonjour.php</literal>. Si vous
développez localement,
votre URL ressemblera à <literal>http://localhost/bonjour.php</literal>
ou encore <literal>http://127.0.0.1/bonjour.php</literal> mais cela dépend
de la configuration de votre serveur web.
Si celui-ci est configuré correctement, le fichier sera analysé par PHP et
le résultat suivant sera envoyé à votre navigateur :
</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 vous n'avez pas besoin de PHP
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. Notez 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 vous utilisez l'extension ".php", et le serveur est configuré pour
les passer à PHP. Regardez cela comme une page HTML normale qui contient une série
de balises spéciales qui vont vous permettre de réaliser beaucoup de choses intéressantes.
</para>
<para>
Si vous avez essayé cet exemple et qu'il n'a rien affiché de spécial,
ou même qu'une boîte de dialogue a surgi pour vous proposer de le télécharger,
ou encore, vous avez vu le code tel que nous l'avons écrit dans le
fichier, alors votre serveur web ne supporte probablement pas PHP ou est mal configuré.
Demandez à votre administrateur de l'activer pour vous, en utilisant
le chapitre <link linkend="install">Installation</link>. Si vous développez localement,
lisez également le chapitre d'installation afin de vous assurer que tout est configuré correctement.
Assurez-vous que vous tentez d'accéder au fichier via http et que le serveur web vous fournit la
sortie. Si vous appelez votre fichier depuis votre gestionnaire de fichiers, il ne sera pas analysé
par PHP. Si le problème persiste malgré cela, n'hésitez pas à utiliser une
<link xlink:href="&url.php.support;">des options de support</link> de PHP.
</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>. Vous pouvez passer du mode PHP
au mode HTML et vice-versa, de cette manière, et à votre guise. Pour plus
d'informations, lisez la section du manuel sur la
<link linkend="language.basic-syntax">syntaxe basique de PHP</link>.
</para>
<note>
<title>Une note sur les retours à la ligne</title>
<para>
Les retours à la ligne ont une signification minime en HTML, cependant,
c'est toujours une bonne idée de rendre votre 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 lorsque vous
insérez 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. Vous pouvez ajouter un espace après la balise fermante
PHP (<literal>?&gt;</literal>) pour forcer l'espace et un retour à
la ligne à afficher, ou vous pouvez ajouter explicitement un retour à la ligne
dans le dernier echo/print de votre bloc PHP.
</para>
</note>
<note>
<title>Une note sur les éditeurs de texte</title>
<para>
Il existe de nombreux éditeurs de texte et environnements de
développement (IDE) que vous pouvez utiliser pour créer, éditer
et gérer vos applications PHP. Une liste partielle de ces outils
est entretenue à l'adresse
<link xlink:href="&url.phpeditorlist;">PHP Editor's List</link>.
Si vous voulez recommander un éditeur particulier, rendez donc une visite
à cette page et demandez au webmestre d'ajouter votre éditeur. Avoir au minimum
un éditeur de texte avec la coloration syntaxique est vivement recommandé.
</para>
</note>
<note>
<title>Une note sur les traitements de texte</title>
<para>
Les traitements de texte tels que StarOffice Writer, Microsoft Word et
Abiword sont de très mauvais choix pour éditer des scripts PHP.
Si vous voulez utiliser l'un d'entre eux, malgré tout, pour tester vos
scripts, vous devez vous assurer que vous sauvez 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 vous avez créé un script PHP qui fonctionne, c'est le moment
de créer le meilleur script PHP ! Faites un appel à la fonction
<function>phpinfo</function> et vous verrez beaucoup d'informations
intéressantes sur votre 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>.
Prenez du temps pour revoir ces informations importantes.
</para>
<para>
<example>
<title>Récupération des informations du système depuis PHP</title>
<programlisting role="php">
<![CDATA[
<?php phpinfo(); ?>
]]>
</programlisting>
</example>
</para>
</section>
<section xml:id="tutorial.useful">
<title>Trucs pratiques</title>
<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. Reportez-vous 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>
<title>Afficher le contenu d'une variable (élément de tableau)</title>
<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 votre 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> ou vous
pouvez aussi 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>
Vous pouvez 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>
<title>Exemple utilisant les
<link linkend="language.control-structures">structures de contrôle</link> et
les <link linkend="language.functions">fonctions</link></title>
<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, si vous utilisez 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>.
Si vous êtes familier avec les syntaxes de base du langage C, cela
ne vous surprendra pas. Si vous ne connaissez pas assez le langage C ou
un autre langage dont la syntaxe est similaire à celle ci-dessus, il
vaudrait mieux que vous lisiez une introduction à PHP, et assimiliez
les premiers chapitres, ou bien lisez 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> dans la chaîne
<varname>$_SERVER['HTTP_USER_AGENT']</varname>.
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é. N'hésitez pas à
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. Si vous n'êtes pas sûr de l'utilisation de ces fonctions, vous devez 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>
Nous pouvons maintenant progresser et vous montrer comment utiliser le mode PHP,
au milieu du code HTML :
</para>
<para>
<example>
<title>Passer du mode PHP au mode HTML et vice-versa</title>
<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, vous pouvez utiliser du code HTML pur. Le point important à noter
ici et 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">
<title>Utiliser un formulaire</title>
<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. Lisez 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>
<title>Un simple formulaire HTML</title>
<programlisting role="html">
<![CDATA[
<form action="action.php" method="post">
<label>Votre nom :</label>
<input name="nom" id="nom" type="text" />
<label>Votre âge :</label>
<input name="age" id="age" type="number" /></p>
<button type="submit">Valider</button>
</form>
]]>
</programlisting>
</example>
</para>
<para>
Il n'y 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 OK, le
fichier <filename>action.php</filename> est appelé. Dans ce
fichier, vous pouvez écrire le script suivant :
</para>
<para>
<example>
<title>Afficher des données issues d'un formulaire</title>
<programlisting role="php">
<![CDATA[
Bonjour, <?php echo htmlspecialchars($_POST['nom']); ?>.
Tu as <?php echo (int) $_POST['age']; ?> ans.
]]>
</programlisting>
<para>
Voici le résultat que vous pourriez obtenir, selon
les valeurs que vous avez 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 vos pages. Pour l'âge, vu que
nous savons que c'est un entier, vous pouvez le
<link linkend="language.types.typecasting">convertir</link> en un
&integer;. Vous pouvez également demander à PHP de le faire
automatiquement à votre place 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. Notez 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. Vous pouvez aussi utiliser la variable
<varname>$_REQUEST</varname>, si vous
ne souhaitez pas vous embarrasser de la méthode utilisée. Elle contient
un mélange des données de GET, POST, COOKIE et FILE.
</para>
</section>
<section xml:id="tutorial.whatsnext">
<title>Et après ?</title>
<para>
Avec ce que vous savez, vous êtes maintenant capable 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
-->