Naissance du PHP
Installer Apache, PHP4 et MySQL sous Windows
Fonctionnement
Un premier script
Les variables
Les commentaires
Les chaînes de caractères
Naissance du PHP
Le PHP est un langage de script utilisé du coté
serveur (par opposition à des langages executés coté client comme le JavaScript).
Officiellement, on dit "PHP : Hypertext Preprocessor", mais PHP voulait aussi
ancienement dire "Personal HomePage".
La syntaxe de ce langage est fortement inspirée du C, mais aussi du Perl et
permet une inclusion directe au sein d'une page Web. Il permet également
l'utilisation de bases de données, la création d'images à la volée, de document
PDF, d'animations Flash, de communiquer avec des serveurs externes...
La toute première version du PHP a été développée durant l'automne 1994, par
Rasmus Ledorf. Au départ, le PHP ne lui servait qu'à comptabiliser les visiteurs
qui venait lire son CV sur sa page personnelle. Les premières versions étaient
privées et seul Rasmus Ledorf pouvait les utiliser.
Mais devant le nombre grandissant de visiteurs lui reclamant les sources de son
extra-ordinaire projet, Rasmus Ledorf ceda et publia une version publique en
début d'année 1995, sous le nom de Personal Sommaire Page Tools. L'archive
contenait un interpreteur très simple, ainsi que quelques exemples de scripts
désormais classiques, comme un livre d'or ou un compteur.
La version 2 du PHP naquit durant l'été 1995, lors de la ré-écriture d'un
interpréteur plus puissant. Le PHP s'appelait alors PHP/FI Version 2, le
FI étant l'acronyme d'un autre package (Form Interpreter) destiné
à interpréter les formulaires HTML. Mais ce n'était pas encore suffisant et
Rasmus Ledorf ajouta un support d'accès aux bases de données mSQL. Le PHP/FI
pouvait alors prendre son envol...
Le succès est phenomenal et sans cesse grandissant : 15 000 sites web
l'utiliseraient fin 1996 et 50 000 à la fin de l'été 1997.
Durant ce même été, le PHP passa un nouveau stade et devient un projet d'équipe.
Zeev Suraski et Andi Gutmans ré-écrire une nouvelle fois l'interpreteur, qui
servat de base au PHP 3. La dernière version en date est le PHP 4. Il utilise
désormais le moteur d'analyse Zend.
Aujourd'hui, la puissance du PHP n'est plus a démontrée. En effet, le PHP serait
à ce jour utilisé par plus de 5 millions de sites Web.
Le PHP est generalement couplé à un serveur du
type Apache, et à une base de données MySQL. L'utilisation et l'installation de
ce type d'application est très commune sous Unix ou Linux, mais assez mal
documentée pour les utilisateurs de Windows.
Installation d'Apache
Comme on l'a vu, PHP s'execute coté serveur. Donc, il nous faut trouver un
"serveur". Windows est normalement fourni avec Microsoft Personnel Web
Serveur. On peut aussi utiliser Microsoft Internet Information Server.
Mais il existe une solution alternative qui est Apache. L'utilisation
d'Apache est la plus répandue et il y a fort à parier que votre hébergeur
utilise celui-ci. Vous serez ainsi plus proche des conditions réels
d'utilisation de vos scripts.
Pour installer Apache, il vous faut tout d'abord le télécharger à l'adresse
suivante :
http://httpd.apache.org/dist/httpd/binaries/win32/.
La version que j'utilise est la 1.3.12.
Une fois téléchargé, lancez l'executable et suivez les instructions (jusque là,
c'est pas bien compliqué :-))
Une fois que tout les fichiers ont été copiés, vous devez vous munir d'un
éditeur de texte simple, comme le bloc-notes par exemple.
Vous devez alors éditer le fichier nommé httpd.conf. Il est placé dans le
répertoire conf de Apache (Si vous avez choisi d'installer Apache dans le
répertoire par défaut, le répertoire est le suivant :
C:\Program Files\Apache Group\Apache\conf).
Vous devez trouver une ligne qui ressemble à celle-ci :
ServerAdmin you@your.address
Vous devez remplacer par votre adresse :
ServerAdmin webmaster@cybwarrior.com
Ensuite, changez la ligne suivante :
#ServerName new.host.name
En :
ServerName localhost
Maintenant, fermez le fichier. Nous allons tester si Apache fonctionne.
Pour cela, vous devez sélectionner le racourci qui s'est normalement créé dans
le menu démarrer de Windows : Start Apache.
Une sorte d'émulation MS-Dos s'execute. La fenêtre doit rester ouverte, ne la
fermez pas.
Tout en gardant cette fenêtre ouverte, lancez votre navigateur préféré :
Netscape, Internet Explorer, Opéra (bouah!)...
Saisissez l'URL suivante : http://localhost/.
Tada! La page Web suivante doit normalement s'afficher :
Pour arreter Apache, vous devez executer le racourci Stop Apache.
Installation de PHP4
Maintenant que Apache est installé, il ne manque plus que PHP. Il vous faut
pour cela l'archive regroupant PHP 4.0.0 pour Win32. Elle est disponible sur
http://www.php.net/ dans la rubrique
Downloads
"Dé-zipez" tout les fichiers dans un répertoire de votre choix, par exemple
C:\PHP4.
Dans ce répertoire, un fichier nommé php.ini-dist devrait se trouver.
Renommez le en php.ini et déplacez le dans le répertoire Windows (en
général, C:\Windows, C:\Win98...)
Vous devez également déplacer les deux fichiers nommés Msvcrt.dll et
php4ts.dll dans le répertoire system de Windows (en général,
C:\Windows\System). Si une erreur se produit lors du déplacement du fichier
Msvcrt.dll comme Msvcrt.dll est utilisé par le système, pas de panique :
ça veut juste dire qu'il n'y a pas besoin de déplacer ce fichier.
Et maintenant, rebelote : vous devez, à l'aide de votre éditeur de texte, éditer
à nouveau le fichier httpd.conf.
Cherchez la section suivante :
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Please read the file README.DSO in the Apache 1.3 distribution for more
# details about the DSO mechanism and run `apache -l' for the list of already
# built-in (statically linked and thus always available) modules in your Apache
# binary.
#
# Note: The order in which modules are loaded is important. Don't change
# the order below without expert advice.
#
#LoadModule anon_auth_module modules/ApacheModuleAuthAnon.dll
#LoadModule cern_meta_module modules/ApacheModuleCERNMeta.dll
#LoadModule digest_module modules/ApacheModuleDigest.dll
#LoadModule expires_module modules/ApacheModuleExpires.dll
#LoadModule headers_module modules/ApacheModuleHeaders.dll
#LoadModule proxy_module modules/ApacheModuleProxy.dll
#LoadModule rewrite_module modules/ApacheModuleRewrite.dll
#LoadModule speling_module modules/ApacheModuleSpeling.dll
#LoadModule status_module modules/ApacheModuleStatus.dll
#LoadModule usertrack_module modules/ApacheModuleUserTrack.dll
Dans la mesure où vous avez dé-zipé PHP dans le répertoire C:\PHP4.
Maintenant, cherchez la section suivante :
#
# AddType allows you to tweak mime.types without actually editing it, or to
# make certain files to be certain types.
#
# For example, the PHP3 module (not part of the Apache distribution)
# will typically use:
#
#AddType application/x-httpd-php3 .phtml
#AddType application/x-httpd-php3-source .phps
C'est lignes spécifient les extensions qui vont permettrent de différencier
vos scripts PHP des autres fichiers. Si vous voulez que vos pages soient des
.bob, ils n'y a qu'à le rajouter ici.
Nous allons maintenant tester si tout fonctionne correctement. Pour cela, créer
un fichier que vous nommerez par exemple info.php et écrivez simplement
ces trois lignes à l'interieur :
<?php
phpinfo();
?>
Ce fichier doit être situé dans le répertoire htdocs de Apache. Si
vous avez installé Apache au chemin par défaut, ce sera C:\Program
Files\Apache Group\Apache\htdocs.
Lancez Apache, puis votre navigateur Web préferé. Saisissez l'URL suivante dans
la barre d'adresse :
http://localhost/info.php En toute logique, la page Web suivante doit
apparaitre (il n'y a ici qu'une partie) :
Installation de MySQL
Dernière étape : l'installation de MySQL qui fera de PHP un outil puissant.
Comme pour Apache et PHP, vous devez disposez de MySQL. Rendez-vous pour cela à
l'adresse suivante : http://www.mysql.com/
et téléchargez la version adéquate pour Windows.
Vous devez alors dé-ziper tout les fichiers dans un répertoire de votre choix
sur votre disque, par exemple, C:\mysql.
Vous devez alors éditer de fichier de commandes MS-Dos (les .bat).
Appellez le premier start.bat ou demarrer.bat, bref, comme vous
voulez. Ecrivez les lignes suivantes à l'intérieur :
Dans la mesure où c:\mysql est le répertoire de votre choix.
Dans la même logique, vous devez créer un autre fichier de commandes que vous
nommerez stop.bat ou arreter.bat.
Ecrivez les lignes suivantes à l'interieur :
c:\mysql\bin\mysqladmin.exe -u root shutdown
Ça y est! Le tout est joué. Pour lancer MySQL, executez le fichier Start.bat,
pour l'arreter, le fichier Stop.bat.
Bien sur, vous pouvez aussi créér 2 racourcis : un pointant vers
mysqld-shareware.exe et l'autre vers mysqladmin.exe dont vous
modifierez les propriétés. C'est même plus simple...
Voila! Vous êtes désormais prêt à réaliser des pages Web dynamiques et
efficaces.
Fonctionnement
Inclusion du code
Un script PHP n'est rien d'autre que du code écrit dans un fichier texte.
Aucune compilation n'est necessaire, puisque ce langage est interprété (donc
plus lent que les JSP).
Si vous avez definit dans le fichier httpd.conf
que les extensions des scripts PHP sont .php,
alors vos scripts PHP doivent obligatoirement se trouver dans des fichiers ayant
pour extension .php si vous voulez que
ceux-ci soit normalement interprétés.
Mais ce n'est pas tout. Le code doit se trouver au sein de balises HTML
spéciales pour pouvoir être analysé par l'interpreteur. Suivant la configuration
du fichier php.ini, vous pourez utilisez
l'une des syntaxes suivantes :
<?php
[Mon code PHP]
?>
<?
[Mon code PHP]
?>
<SCRIPT language="PHP">
[Mon code PHP]
</SCRIPT>
<%
[Mon code PHP]
%>
La syntaxe la plus utilisée est la première (<?php
et ?>), car elle permet d'assurer une
portabilité excellente du code lors d'un changement de version du PHP.
Un des avantages majeures qu'a le PHP face aux CGI écrits en C ou en Perl, c'est
que celui-ci peut être directement inclus dans un document HTML!
Ainsi, il est tout à fait courant de rencontrer des scripts PHP ayant la
structure suivante :
<!-- Nom du fichier 'index.php' -->
<HTML>
<HEAD>
<TITLE>Bienvenue sur le site de Titou la Bibine :-)</TITLE>
</HEAD>
<BODY>
<H2 align="center">Bienvenue sur le site de Titou la Bibine :-)</H2>
<?php
print "Vous êtes notre 50000 visiteurs";
?>
</BODY>
</HTML>
Lorsque un client, c'est à dire un internaute, va vouloir consulter la page
ci-dessus nommée index.php, le serveur
Apache va s'apercevoir que l'extension du fichier est
.php.
Il va alors envoyer le document à l'analyseur PHP, qui va interpréter toutes les
lignes de codes situées dans les balises adequates (c'est à dire entre
<?php et ?>).
Dans notre cas, le script va tout simplement écrire la phrase
Vous êtes notre 50000 visiteurs dans le
document.
Une fois toutes ces opérations effectuées, Apache va transmettre le document au
client (ouf! parce que ça faisait un bon moment qu'il attendait ce client :-)).
Ensuite, si le client s'amuse à analyser le code HTML, voici ce qu'il va
découvrir :
<!-- Nom du fichier 'index.php' -->
<HTML>
<HEAD>
<TITLE>Bienvenue sur le site de Titou la Bibine :-)</TITLE>
</HEAD>
<BODY>
<H2 align="center">Bienvenue sur le site de Titou la Bibine :-)</H2>
Vous êtes notre 50000 visiteurs
</BODY>
</HTML>
On constate que le code PHP est inacessible au client, ce qui fait que rien
ne permet au client de savoir que la page qu'il lit est en fait un script PHP,
si ce n'est l'extension .php du document.
Un premier script
La syntaxe des fontions en PHP est la même que en
C :
fonction(argument1, argument2, ..., argumentX);
Le nombre d'argument est variable selon la fonction.
Tient ? C'est étrange : pourquoi n'avons nous pas utiliser de parenthèses dans
le script de la page précédente ?
Pour rappel, voici le code :
<!-- Nom du fichier 'index.php' -->
<HTML>
<HEAD>
<TITLE>Bienvenue sur le site de Titou la Bibine :-)</TITLE>
</HEAD>
<BODY>
<H2 align="center">Bienvenue sur le site de Titou la Bibine :-)</H2>
<?php
print "Vous êtes notre 50000 visiteurs";
?>
</BODY>
</HTML>
La fonction print, qui permet d'écrire dans le document, est une
exception. En effet, on peut lui omettre des parentèses, ce qui va plus vite à
écrire. Mais notre code aurait aussi pu s'écrire :
Une autre exception à cette rêgle des fonctions est la fonction echo.
La fonction echo réalise exactement la même
chose que print, avec ou sans parenthèses.
Pour s'en convaincre, l'exemple suivant suffit :
La seule différence entre print et
echo est que cette dernière peut prendre
plusieurs arguments, séparés par des virgules. Mais là, paradoxe du PHP, il ne
faudra pas mettre de parenthèses, sinon une erreur se produira :
La plupart du temps, une fonction ne se contente pas d'agir. Elle peut
également renvoyer une valeur. Le code ci-dessous affiche un nombre de visiteurs
aleatoire :
<?php
echo "Bienvenue à notre ", rand(), "<sup>ème</sup> visiteur!";
?>
Ce qui donnera :
Bienvenue à notre 23697ème visiteur!
LES VARIABLES
Introduction
Une variable sert à stocker des données temporaires. C'est à dire que ces
données seront perdues entre deux appels du script.
En PHP, la syntaxe des variables est très étendue, car elle est inpirée de
plusieurs langages, notament du Perl et du C.
Ainsi, les Perliens ne seront pas dépaysés, puisqu'en PHP, les variables
débutent par le symbole $ (dollars). Les noms des variables peuvent être
composés des lettres de l'alphabet, de nombres, et du caractère de soulignement.
Voici des noms de variables corrects :
$i
$premier_passage
$telephone1
$telephone2
Pour affecter une valeur à une variable, on utilise l'opérateur =
(égal).
Le PHP est un langage non typé. Il n'y a donc pas de déclaration de type comme
il peut y en avoir en C. Il suffit d'indiquer la variable, et de lui affecter
une valeur :
$password = "jamesbond007";
print $password;
Cette exemple affiche :
jamesbond007
On peut aussi affecter la valeur d'une variable à une autre variable :
$var1 = "JO";
$var2 = $var1;
print $var2;
Cela affiche :
JO
On peut aussi affecter une même valeur à plusieurs variables d'un seul coup,
comme en C :
En C, on entend par variable dynamique (ou plutôt par tableau dynamique), une
variable qui peut avoir une taille modifiable dans le temps.
En PHP, le dynamisme des variables n'a pas le même sens. Il s'agit en fait de
pouvoir jouer avec les noms des variables.
En effet, regarder cet exemple :
$citation = "T'es comme le H de Hawai, tu sers à rien :-)";
print ${"citation"};
Résultat :
T'es comme le H de Hawai, tu sers à rien :-)
En peut faire encore plus fort :
$citation = "T'es comme le H de Hawai, tu sers à rien :-)";
$var = "citation";
print $$var;
Cela nous donne encore :
T'es comme le H de Hawai, tu sers à rien :-)
Ou encore mieux :
$citation = "T'es comme le H de Hawai, tu sers à rien :-)";
$var = "citation";
$finalement = "var";
print $$$finalement;
Nous pourrions multiplier les exemples à l'infini (ou presque : ça dépend de
la memoire et de la place disponible sur la pile de votre machine).
Vu comme ça, cela peut paraitre inutile. Mais il peut y avoir quelques
applications interessantes, notament avec l'utilisation de boucles.
Références
Le PHP permet d'établir des références entre variables. Cela peut paraitre
similaire aux pointeurs du C, mais il y a quelques petites différences. En fait,
comme il est écrit dans le manuel officiel de PHP, "les références sont des
alias dans la table des symboles. Le nom de la variable et son contenu ont des
noms différents, ce qui fait que l'on peut donner plusieurs noms au même
contenu."
Pour établir une référence, on utilise l'opérateur & (et commercial, ou
esperluette :-) devant la variable.
Ainsi :
HelloBonjour
BonjourBonjour
Buenos DiasBuenos Dias
Guten TagGuten Tag
On se rend compte qu'après la ligne $hello =
&$bonjour;, on peut utiliser soit la variable
$hello, soit la variable
$bonjour, cela revient au même : elles
désignent le même contenu.
Cela peut sembler inutile, mais lorsque nous étudierons les fonctions, cela sera
plus parlant.
Types de données
Bien que le PHP soit non typé, les données ont cependant des types. Ainsi, on
distinguera 8 de
"8", 4
de 4.00.
Il existe 6 types de données :
Les types de données dans PHP
Type
Description
Exemple
integer
Nombres entiers
8
string
Chaînes de caractères
"8"
double
Nombre à virgules flottante (nombres décimaux)
8.00
boolean
Valeur logique, soit true,
soit false
true
array
Tableaux
array(1, 2, 3);
integer
Nombres entiers
8
object
Objets
class myclass {};
new myclass();
Nous étudierons les types boolean,
array et
object plus loin.
Pour connaitre le type d'une donnée, on utilise la fonction
gettype(). Cette fonction ne prend qu'un
seul argument qui doit être la variable ou la donnée à tester.
Voici un exemple :
Note : on a utilisé la fonction echo
sur plusieurs lignes, ce qui est possible et simplifie les choses.
On peut aussi modifier le type d'une variable. En C, on appelle ceci le casting.
Pour modifier le type de la variable lui même, on utilise la fonction settype().
Voici la syntaxe de cette fonction, d'après le manuel PHP :
int settype(mixed var, string type)
Le premier argument, var, peut être de
n'importe quel type (c'est le but). Le deuxième argument doit être une chaîne de
caractères representant le type dans lequel convertir la variable. La fonction
renvoi true si l'opération de transtypage a
été réussie, sinon false.
Exemple :
Les commentaires permettent de donner des
indications dans le script, afin de faciliter sa compréhension au lecteur.
Ils sont particuliérement utiles lorsque l'on travaille à plusieurs sur un même
site web, ou bien lorsque l'on doit parfois relire un script écrit il y a
plusieurs mois.
Certaines personnes, faisant surtout partie de la communauté Linux, soutiennent
qu'un code écrit clairement, sans astuces de programmeurs n'a pas besoin de
commentaires. Chacun son école...
La syntaxe des commentaires en PHP est à la fois inspirée du C, du C++ et du
système d'exploitation Unix/linux.
Voici les differents types. Les commentaires sont ecrits en vert :
# Début du script
/*
Voici un script merveilleux
qui sert à donner l'heure à
laquelle la page à été chargée
*/
print date("H:M:S"); // On écrit l'heure sous le format H:M:S
# Fin du script
Tous ce qui se trouve à l'interieur d'un commentaire est tout simplement
ignoré par l'interpréteur.
Les commentaires avec /* et
*/ sont hérités du langage C. Comme on le
voit, ils permettent de commenter du code sur plusieurs lignes. Ce type de
commentaire peut être utile lors de la mise au point d'un script. On peut avoir
besoin d'ignorer plusieurs lignes de code, sans pour autant avoir envie de les
supprimer.
Les commentaires en // (qui nous viennent
du C++) s'achevent avec la fin de la ligne, comme pour les commentaires débutant
avec #. Ces derniers sont souvent utilisés
dans des fichiers de configuration qui initialisent de nombreuses variables
(dans des scripts comme phpBB, phpNuke, phpMyAdmin, etc...), ceci afin de garder
un style Unix.
LES CHAÎNES DE CARACTÈRES
Apostrophes ou guillemets ?
Un chaîne de caractères est contenue soit entre des guillemets ("),
soit entre des apostrophes (').
Les deux lignes suivantes sont donc equivalentes :
print "Hello!"; // Avec des guillemets
print 'Hello!'; // Avec des apostrophes
Quelle est la différence ? La voici : en utilisant des guillemets, les
variables contenues à l'interieur de la chaîne seront évaluées et remplacées par
leur valeur à l'instant t.
Ainsi :
Par contre si on veut pouvoir être tout à fait
libre d'utiliser n'importe quel caractère dans une chaîne, comme les guillemets
par exemple, on peut utiliser la syntaxe Here Doc heritée de Perl (que
j'aime bien :-). On débute la chaîne par <<< et un identifiant quelconque. On
écrit ensuite notre texte, puis on termine en ré-écrivant l'identifiant choisi
en DEBUT d'une nouvelle ligne, sans oublier le point-virgule bien sur.
Par exemple :