Files
doc-fr/chapters/tutorial.xml
Mehdi Achour 31eb3dc129 pas de comme par exemple
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@160562 c90b9560-bf6c-de11-be94-00142212c4b1
2004-06-04 19:43:32 +00:00

563 lines
24 KiB
XML
Executable File

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.24 $ -->
<!-- EN-Revision: 1.34 Maintainer: dams Status: ready -->
<chapter id="tutorial">
<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éations de pages web dynamiques avec &php;, laissant de coté
temporairement les autres possibilités de &php;. Voyez 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 faîtes normalement avec des pages HTML
classiques.
</para>
<sect1 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 lequels
vous allez utiliser des balises magiques, qui feront beaucoup
de choses pour vous. Beaucoup d'hébergeurs web proposent
&php; mais si votre hébergeur ne le propose pas, lisez la section des
<ulink url="&url.php.links;">liens &php;</ulink> pour trouver un hébergeur web
le proposant.
</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 linkend="install.apache">Apache</link>, et bien sur
<ulink url="&url.php.downloads;">&php;</ulink>. Vous souhaiterez
aussi installer une base de données comme
<ulink url="&url.mysql.docs;">MySQL</ulink>.
</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 avez déjà un serveur web d'installer). Dans le cas où vous
rencontrez des problèmes dans l'installation de &php;, nous vous suggérons
de poser vos questions sur notre
<ulink url="&url.php.mailing-lists;">liste de diffusions</ulink> réservée à cette usage.
Si vous choisissez une version simplifiée, vous pouvez utiliser des
<ulink url="&url.installkits;">des installeurs</ulink>
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
MacOs, Linux et Windows. Sous Linux, vous pouvez aussi trouver
des commandes comme <ulink url="&url.rpmfind;">rpmfind</ulink> et
<ulink url="&url.rpmfind.pbone;">PBone</ulink>
très pratique pour rechercher les paquets pré-compilés.
Vous pouvez aussi visiter <ulink url="&url.apt-get;">apt-get</ulink>,
pour des paquets Debian.
</para>
</sect1>
<sect1 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[
<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 ceci est configuré correctement, le fichier sera analysé par &php; et
le résultat suivant sera affiché :
</simpara>
<para>
<screen role="html">
<![CDATA[
<html>
<head>
<title>Test PHP</title>
</head>
<body>
<p>Bonjour le monde</p>
</body>
</html>
]]>
</screen>
</para>
</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écutables</emphasis>
ou autres, 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. Voyez celà comme une page HTML normale qui contient une série
de balises spéciales qui va 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="installation">Installation</link>. Si vous développer 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 fournie la
sortie. Si vous appelez votre fichier depuis votre gestionnaire de fichiers, il ne sera pas analyzé
par &php;. Si le problème persiste malgré celà, n'hésitez pas à utiliser une
<ulink url="&url.php.support;">des options de support</ulink> 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">synthaxe basique de &php;</link>.
</para>
<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
<ulink url="&url.phpeditorlist;"><literal>PHP Editor's List</literal></ulink>.
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 synthaxique 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>
<note>
<title>Une note sur le Notepad de Windows</title>
<para>
Si vous écrivez vos scripts &php; avec Windows Notepad, vous devez
vous assurer que vos fichiers sont sauvés avec l'extension
<filename>.php</filename>
(Notepad ajoute automatiquement une extension <filename>.txt</filename>
à vos fichiers, à moins que vous ne preniez l'une des mesures suivantes).
Lorsque vous sauvez un fichier, et que vous êtes invité à lui donner
un nom, placez le nom du fichier entre doubles guillemets
(i.e. "<literal>hello.php</literal>").
Vous pouvez également cliquer dans le menu 'Documents texte' du dialogue
de sauvegarde, et choisir l'option 'Tous les fichiers'. Vous pourrez alors saisir
le nom de votre fichier sans les doubles guillemets.
</para>
</note>
<para>
Maintenant vous avez créé un script &php; fonctionnant, c'est le moment
de créer le meilleur script &php; ! Faîtes 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>
</sect1>
<sect1 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 interesse ici est
<varname>$_SERVER['HTTP_USER_AGENT']</varname>.
</para>
<note>
<para>
<link linkend="reserved.variables.server">$_SERVER</link> 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 auto-globale. Reportez-vous aux pages du manuel traitant des
<link linkend="language.variables.superglobals">Auto-globales</link>
(aussi connues sous le nom de super-globales). Ces
variables spéciales ont été introduites en
<ulink url="&url.php.release4.1.0;">&php; 4.1.0</ulink>. Auparavant,
il fallait utiliser les variables <varname>$HTTP_*_VARS</varname>, comme
<varname>$HTTP_SERVER_VARS</varname>. Bien qu'obsolètes, ces
variables existent toujours. (Voir aussi la note sur
<link linkend="tutorial.oldcode">l'ancien code</link>.)
</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">
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
</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 de <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 des Internet Explorer, 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 (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
echo 'Vous utilisez Internet Explorer<br />';
}
?>
]]>
</programlisting>
<para>
Le résultat de ce script, si vous utilisez Internet Explorer, sera :
</para>
<screen role="html">
<![CDATA[
Vous utilisez Internet Explorer<br />
]]>
</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 où 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>. Vous pouvez trouver
une liste de livres &php; à <ulink url="&url.php.books;">&url.php.books;</ulink>.
</para>
<para>
Le second concept que nous avons introduit est la fonction <function>strpos</function>.
<function>strpos</function> est une fonction intégrée à &php;, qui recherche
la présence d'une chaîne dans une autre. Dans notre cas, nous
avons recherché la chaîne <literal>"MSIE"</literal> dans la chaîne
<varname>$_SERVER['HTTP_USER_AGENT']</varname>. Si cette
chaîne est trouvée, la fonction retourne sa position dans la chaîne et sinon, &false;.
Si elle ne retourne pas &false;, 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 (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() n'a pas retourné FALSE</h3>
<p>Vous utilisez Internet Explorer</p>
<?php
} else {
?>
<h3>strpos() a retourné FALSE</h3>
<p>Vous n'utilisez pas Internet Explorer</p>
<?php
}
?>
]]>
</programlisting>
<para>
Un exemple de résultat obtenu dans ce script est :
</para>
<screen role="html">
<![CDATA[
<h3>strpos() n'a pas retourné FALSE</h3>
<p>Vous utilisez Internet Explorer</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 a 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>strpos</function>.
En d'autres termes, celà dépend si la chaîne <literal>MSIE</literal>
a été trouvée ou non.
</para>
</sect1>
<sect1 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 d'origine externe à &php;</link>
pour plus d'informations et d'exemples sur comment 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">
<p>Votre nom : <input type="text" name="nom" /></p>
<p>Votre age : <input type="text" name="age" /></p>
<p><input type="submit" value="OK"></p>
</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 $_POST['nom']; ?>.
Tu as <?php echo $_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>
Le fonctionnement du script devrait être évident. Il n'y a rien de plus
simple. Les variables <varname>$_POST['nom']</varname> et
<varname>$_POST['age']</varname> sont automatiquement créés par &php;.
Un peu plus tôt dans ce tutorial, nous avons utilisé la variable
<varname>$_SERVER</varname>, une auto-globale. Maintenant, nous avons
introduit une autre auto-globale <link linkend="reserved.variables.post">$_POST</link>
qui contient toutes les données envoyées par la méthode
<emphasis>POST</emphasis>. Notez que
dans notre formulaire, nous avons choisi la méthode <emphasis>POST</emphasis>.
Si vous avions utilisé la méthode
<emphasis>GET</emphasis> alors notre formulaire aurait placé ses informations
dans la variable <link linkend="reserved.variables.get">$_GET</link>,
une autre auto-globale. Vous pouvez aussi utiliser la variable
<link linkend="reserved.variables.request">$_REQUEST</link>, 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. Voyez aussi la fonction
<function>import_request_variables</function>.
</para>
<para>
Vous pouvez également utiliser champs XForms dans &php;, même si vous vous
sentez bien dans l'utilisation des formulaires HTML.
Bien que le travail avec XForms ne soit pas fait pour les débutants, vous pourriez être
intéressé par cette technologie. Nous avons également une
<link linkend="features.xforms">courte introduction sur le traitement des données
reçues par XForms</link> dans notre section sur les fonctionnalité.
</para>
</sect1>
<sect1 id="tutorial.oldcode">
<title>Utiliser des codes anciens avec les nouvelles versions de &php;</title>
<para>
Maintenant que &php; est devenu un langage de script populaire, il
existe de nombreuses ressources qui vous proposent des portions de
code que vous pouvez réutiliser dans vos codes. Pour la plupart,
les développeurs de &php; ont tâché d'assurer la compatibilité
ascendante, ce qui fait que de nombreux scripts écrits pour les
anciennes versions sont aussi valables pour les nouvelles versions
de &php;, idéalement sans modifications. En pratique, certaines
modifications doivent être apportées.
</para>
<para>
Les deux modifications récentes les plus importantes qui affectent les anciens
codes sont :
<itemizedlist>
<listitem>
<simpara>
Les anciennes variables <varname>$HTTP_*_VARS</varname>
(qui devaient être indiquées comme globales pour être utilisées dans une fonction
ou une méthode) sont obsolètes. Les nouveaux
<link linkend="language.variables.superglobals">tableaux auto-globaux</link>
ont été introduits en
<ulink url="&url.php.release4.1.0;">&php; 4.1.0</ulink>. Ce sont les variables suivantes :
<varname>$_GET</varname>, <varname>$_POST</varname>,
<varname>$_FILES</varname>, <varname>$_COOKIE</varname>,
<varname>$_SERVER</varname>, <varname>$_ENV</varname>,
<varname>$_REQUEST</varname> et <varname>$_SESSION</varname>.
Les vieux tableaux <varname>$HTTP_*_VARS</varname>,
tels que <varname>$HTTP_POST_VARS</varname> existent toujours depuis
&php; 3.
&avail.register-long-arrays;
</simpara>
</listitem>
<listitem>
<simpara>
Les variables externes ne sont plus enregistrées dans l'environnement
par défaut. En d'autres termes, depuis &php;
<ulink url="&url.php.release4.2.0;">4.2.0</ulink>, la directive
&php; <link linkend="ini.register-globals">register_globals</link> vaut
<emphasis>off</emphasis> par défaut dans le &php.ini;. La méthode recommandée
pour accéder à ces valeurs, est via les tableaux auto-globaux mentionnés
ci-dessus. Les anciens scripts, livres et tutoriaux continuent de
considérer que cette directive devrait être à <literal>on</literal>. Lorsque
cette directive est à <literal>on</literal>, vous pouvez utiliser la variable
<varname>$id</varname>, si l'URL
<literal>http://www.example.com/foo.php?id=42</literal>
a été appelée. Quelle que soit la valeur de la directive,
<varname>$_GET['id']</varname> est toujours disponible.
</simpara>
</listitem>
</itemizedlist>
Pour plus de détails sur ces modifications, reportez-vous à la section sur les
<link linkend="language.variables.predefined">variables prédéfinies</link>.
</para>
</sect1>
<sect1 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. Vous pouvez aussi trouver d'autres exemples
dans la section liens ("links", en anglais) du site
<ulink url="&url.php.links;">&url.php.links;</ulink>.
</para>
<para>
Différentes présentations des capacités de &php; sont disponibles sur le
site des conférences &php; : <ulink url="&url.php.conf;">&url.php.conf;</ulink>
et <ulink url="&url.php.talks;">&url.php.talks;</ulink>.
</para>
</sect1>
</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:"../../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
-->