mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-25 17:32:07 +01:00
500 lines
20 KiB
XML
Executable File
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><?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>. 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>?></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>?></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
|
|
-->
|