Copyright c 2000 Julien Gaulmin , Alcôve
Ce document peut être reproduit, distribué et/ou modifié selon les termes de la Licence GNU de Documentation Libre (GNU Free Documentation Licence) dans sa version 1.1 ou ultérieure telle que publiée, en anglais, par la Free Software Foundation; sans partie invariante, avec comme première de couverture (front cover texts) les deux premières pages, et sans partie considérée comme quatrième de couverture (back cover texts)
Une copie de la licence est fournie en annexe et peut être consultée à l’url :
http
Alcôve
Centre Paris Pleyel Tél. : +33 1 49 22 68 00 153 bd Anatole France Fax : +33 1 49 22 68 01
93200 Saint-Denis, France E-mail : , Toile :
1
Table des matières
Chapitre 1 Introduction au langage 3
1.1 La programmation web 5
1.2 Présentation de PHP 18
1.3 Installation et configuration de PHP 29
Chapitre 2 Les bases du langage 38
2.1 Syntaxe du langage 40
2.2 Les structures de contrôle 78
2.3 Fonctions 112
2.4 Programmation orientée objet 126
Chapitre 3 Fonctionnalités essentielles 138
3.1 Connexions et utilisateurs 140
3.2 Gestion des sessions 149
3.3 Autres fonctionnalités 169
Chapitre 4 Utilisation avancée 180
2
4.1 Interopérabilité avec des applicatifs 182
4.2 Traitement des chaînes de caractères 202
4.3 Fonctionnalités utiles 217
4.4 Conclusion 254
3
Alcôve - Programmer en PHP
4
Alcôve - Programmer en PHP
Principes de la programmation web ;
Présentation de PHP ;
Installation et configuration.
5
6
Alcôve - Programmer en PHP
Rappels d’HTML ;
Le web interactif ;
Notions de CGI ;
Distinction PHP/CGI.
7
H yper T ext M arkup L anguage ;
Définit la structure logique d’un document web ;
Composé d’un ensemble de commandes de formatage ;
Basé sur la notion d’ environnement possédant un début et une fin -> délimiteurs : tags ou marqueurs.
8
Alcôve - Programmer en PHP
Les marqueurs sont définis entre <> ;
Ex : <marqueur>...</marqueur>
La plupart des environnements peuvent être imbriqués selon des règles bien définies ;
Ex : <H1><B>Mon titre</B></H1>
Il n’est pas permis de faire chevaucher des environnements.
Ex : <H1><B>Mon titre</H1></B>
9
Structure générale d’une page HTML :
<HTML>
<HEAD>
<TITLE>Mon titre</TITLE>
<!-- Mes commentaires -->
</HEAD>
<BODY>
<H1>Mon chapitre</H1>
<P>Mon paragraphe</P>
<ADDRESS>Mes coordonnées</ADDRESS>
</BODY>
</HTML>
10
Alcôve - Programmer en PHP
Deux principaux types d’interactions : – côté serveur ( Server-side scripting ), – côté client ( Client-side scripting ).
Chacun des types précédents se divise encore en sous-catégories.
11
Côté client :
– scripts embarqués dans la page HTML ( HTML-embedded scripting ) -> Javascript..., – applets -> Java, ActiveX..., – plugins propriétaires.
12
Alcôve - Programmer en PHP
Côté serveur :
– CGI -> Perl, C, Shell...,
– Interpréteurs intégrés au serveur HTTP scripts embarqués dans la page HTML ( HTTPD modules , HTML-embedded scripting ) -> PHP , ASP-VBScript..., scripts à la CGI ( CGI-like ) -> mod_perl/Apache – Servlets -> Java.
13
14
Alcôve - Programmer en PHP
C ommon G ateway I nterface ;
Interface de communication pour la création de programmes capables d’être exécutés par un serveur HTTP ;
Permet la création dynamique de pages du côté serveur ;
Généralement utilisé pour servir les requêtes en provenance d’une page de formulaire HTML.
15
Principe de la CGI :
16
Alcôve - Programmer en PHP
if ($want_page==1){ $want_page=0 ; }
Scénario de génération dynamique de page via la CGI :
– l’utilisateur remplit un formulaire HTML et le valide,
– le navigateur ouvre une connexion vers le serveur HTTP et lui envoie la requête correspondante (nom du CGI + paramètres),
– le serveur HTTP invoque le script CGI en lui transmettant les paramètres de la requête,
– le script CGI génère une page correspondant aux paramètres, – le serveur envoie la page au navigateur et ferme la connexion, – le navigateur affiche la page.
17
Tous les deux sont situés côté serveur mais :
PHP : le code PHP est contenu dans les pages HTML
Ex : <?php $username = "toto";?> <HTML><BODY><H1>
Bonjour monsieur <?php print $username?> </H1></BODY></HTML>
CGI : le code HTML est contenu dans le code du CGI
Ex : #!/usr/bin/perl -w $username = "toto"; print "Content-Type : text/html\n\n"; <HTML><BODY><H1>Bonjour monsieur
$username</H1></BODY></HTML>";
18
Alcôve - Programmer en PHP
19
Vue d’ensemble du PHP ;
L’histoire du langage ;
Ses avantages ;
Et ses inconvénients.
20
Alcôve - Programmer en PHP
A server-side, HTML-embedded scripting language
Langage de script côté serveur ;
Embarqué dans les pages HTML ;
Syntaxe héritée du C et du Perl ;
Extensible (nombreuses bibliothèques) ;
Supporte pratiquement tous les standards du web ; Logiciel Open Source (Licence PHP de type BSD).
21
Créé par Rasmus Lerdorf en 1994 pour des besoins personnels
( P ersonnal H ome P age) ;
Première version publique en 1995 sous le nom de Personnal Home Page Tools capable de gérer un livre d’or, un compteur d’accès... ;
22
Alcôve - Programmer en PHP
Deuxième version plus complète (PHP/FI) en 1995 avec gestion des formulaires HTML et des bases mSQL ainsi qu’un nouvel interpréteur ;
PHP/FI est utilisé par environ 50000 sites web en 1997 ;
23
En 1997, le projet devient un travail d’équipe et l’interpréteur est réécrit par Zeev Suraski et Andi Gutmans pour donner la version PHP3 ;
La version 3 de PHP s’est rapidement imposée pour atteindre environ 150000 sites web durant l’été 1999 (source : Netcraft) et devenir P HP : H ypertext P reProcessor ;
24
Alcôve - Programmer en PHP
Aujourd’hui le projet est chapeauté par Zend, une société privée créée par Suraskyi et Gutmans, qui commercialise des logiciels complémentaires à PHP ;
La dernière version en date est la PHP4 (2000). Elle possède un interpréteur optimisé par Zend et s’ouvre à d’autres serveurs HTTP qu’Apache.
25
26
Alcôve - Programmer en PHP
Le client n’a pas accès au code source puisque celui-ci est interprété avant envoi ( != Javascript) ;
Le client ne reçoit que le résultat de l’exécution du script ;
On peut configurer le serveur HTTP pour masquer complètement la qualité dynamique des pages ;
Le code n’est pas alourdi par des commandes destinées à générer la page HTML ( != CGI) ;
27
Le langage possède de nombreuses bibliothèques/modules pour :
– le calcul mathématique,
– la création dynamique d’images,
– la gestion de sessions,
– les connexions sécurisées (SSL),
– l’accès à la plupart des SGBD, – l’accès aux bases LDAP...
28
Alcôve - Programmer en PHP
Pas aussi rapide que mod_perl ou certains CGI mais plus portable ;
Pas aussi simple que ASP-VBScript mais plus respectueux des standards web et sous licence Open Source (-> plus facilement extensible);
Pas d’interactivité au niveau du client (-> on doit quand même utiliser du Javascript dans ces cas là).
29
30
Alcôve - Programmer en PHP
Installation de PHP ;
Configuration via ;
Premier test ;
Ajout de nouveaux modules.
31
Trois types d’installation :
– module dynamique du serveur HTTP (ex : mod_php pour Apache),
– module statique du serveur HTTP (20% plus rapide que mod_php) qui nécessite de patcher le serveur HTTP et de tout recompiler,
– sous forme de CGI (pour les serveurs HTTP non supportés).
32
Alcôve - Programmer en PHP
Télécharger des sources sur http (mirroir français du site officiel de PHP) ;
Installer les sources dans un répertoire différent de celui du serveur HTTP (ex : /usr/local/src/php/) avec la commande
tar -zxvf php-<version> -C /usr/local/src/php/ ;
Configuration de l’installation :
– ./setup (configuration interactive), ou
– ./configure <options> (./configure --help pour connaître toutes les options).
33
Compilation et installation :
make; su; make install
Association des fichiers contenant du code PHP avec l’interpréteur
PHP dans la configuration du serveur HTTP
Ex : serveur Apache ( ou )
PHP3 -> AddType application/x-httpd-php3 .php
PHP4 -> AddType application/x-httpd-php .php
Sous Debian, tout ceci est simplifié grâce à l’utilitaire apt-get (remplacer php3 par php4 pour PHP4) :
– apt-get install php3 pour le module dynamique Apache, ou – apt-get install php3-cgi pour le CGI.
34
Alcôve - Programmer en PHP
Généralement dans /etc/php<version>/apache/ ou
/usr/lib/php<version>/ ;
Ce fichier ( pour PHP3 et pour PHP4) contrôle les principaux comportements de PHP ;
Très clair et facilement configurable ;
Syntaxe :
– clef = valeur,
– clef = "valeur complexe",
– ; commentaire,
– booléen -> 1, On, True, Yes / 0, Off, False, No.
35
Segmenté en parties :
– options du langage,
– ressources maximales allouées à PHP,
– gestion des erreurs,
– gestion des données HTTP,
– fichiers et répertoires,
– extensions dynamiques (modules), – configuration des modules.
Pour que PHP prenne les modifications en compte il faut relancer le serveur HTTP (ex : serveur Apache -> apachectl restart).
36
Alcôve - Programmer en PHP
Créer le fichier :
<?php phpinfo();?>
Placer ce fichier à la racine du serveur HTTP (ou dans le répertoire doc_root si vous avez activé l’option safe_mode) ;
Charger l’URL http sur votre navigateur web ;
Bravo ! Vous avez créé votre première page dynamique avec PHP et en plus elle vous résume toutes les fonctionnalités PHP qui sont configurées sur votre machine.
37
Placer le nouveau fichier <nom>.so dans extension_dir (par défaut /usr/lib/php<version>/apache mais configurable dans ) ou utiliser apt-get install php<version>_<nom> sous Debian ;
Ajouter la ligne extension=<nom>.so dans ;
Configurer les aspects relatifs au module dans ;
Redémarrer le serveur HTTP.
38
Alcôve - Programmer en PHP
39
Les bases
Syntaxe du langage ;
Les structures de contrôle ;
Fonctions ;
Programmation orientée objet.
40
Alcôve - Programmer en PHP
41
Syntaxe de base ;
Les types de données ;
Les variables ;
Les constantes ; Les opérateurs.
42
Alcôve - Programmer en PHP
Quatre moyens équivalents pour passer du mode HTML au PHP :
– standard :
<?php code PHP...?>, – option short_open_tag :
<? code PHP...?>, – option asp_tags :
<% code PHP... %>, – marqueur script du HTML :
<script language="php"> code PHP...
</script>.
43
Bases de la syntaxe héritées du C et du Perl :
– séparateur d’instructions -> ; – commentaires :
/* commentaires... */code...,
... commentaires..., ... commentaires....
44
Alcôve - Programmer en PHP
PHP supporte les types de données suivants :
– nombres entiers,
– nombres à virgule flottante,
– chaînes de caractères,
– tableaux,
– objets (développés dans la section ’programmation orientée objet’).
Tous les noms de variables sont précédés d’un $
(ex : $toto = 5;) ;
45
Il est possible de spécifier une variable de type entier de la façon suivante :
– $toto = 123; # est un entier en base 10,
– $toto = -123; # est un entier négatif, – $toto = 0123; # est un entier en base 8,
– $toto = 0x123; # est un entier en base 16.
Il est possible de spécifier une variable de type flottant ou double de la façon suivante :
– $titi = 1.234; # est un nombre à virgule flottante,
– $titi = 1.2e3; # est aussi un nombre à virgule flottante.
46
Alcôve - Programmer en PHP
Il est possible de spécifier une variable de type chaîne de caratères de la façon suivante :
– $personne = ’M. Smith’; # est une chaîne de caractères,
– $personne = "M. Smith"; # est aussi une chaîne de caractères.
Dans le deuxième cas, si la chaîne contient des noms de variables, celles-ci seront remplacées par leur valeur ;
Ex :
$type = ’M.’;
$nom = "Smith";
$personne = "$type $nom";
Equivalent à $personne = ’M. Smith’;.
47
Quand on utilise les "..." on doit donc échapper certains caractères avec un backslash (\) pour pouvoir les afficher comme tels : – dollar ($) : \$, – double quotes (") : \", – backslash (\) : \\.
De même, il existe des caractères spéciaux qui nécessitent d’être échappés : – nouvelle ligne : \n, – retour à la ligne : \r, – tabulation : \t.
Tout autre caractère échappé génèrera un avertissement ( warning ) ;
48
Alcôve - Programmer en PHP
Lorsqu’une chaîne de caractères est évaluée comme une valeur numérique, les règles suivantes s’appliquent :
– la chaîne est de type flottant/double si elle contient ’.’, e ou E sinon elle est de type entier ,
– la valeur est définie par la première partie de la chaîne (0 si c’est du texte),
– lorsque la première expression est une chaîne, le type de la variable dépend de la seconde expression.
Ex :
$toto = 1 + "4.5"; # $toto vaut 5.5
$toto = 1 + "-1e3"; # $toto vaut -999
$toto = 1 + "titi + 149"; # $toto vaut 1
$toto = 1 + "149 + titi"; # $toto vaut 150
49
Les tableaux de PHP ressemblent aux tableaux associatifs
( hash-tables ) du Perl ;
L’index dans le tableau est appellé clé et peut être indifféremment un entier ou une chaîne de caractères ;
La valeur associée à une clé est appelée valeur ;
On peut utiliser la fonction array() pour créer un tableau ;
On peut aussi affecter directement les valeurs au tableau ;
La fonction list() permet d’affecter des variables comme si elles constituaient un tableau ;
50
Alcôve - Programmer en PHP
Ex :
$tab[0] = 1;
$tab[1] = "toto"; # on peut mélanger les contenus
$tab["toto"] = "titi"; # on peut mélanger les clés
$tab["toto"][8]; # tableau à deux dimensions
$tab["toto"][8]["encore"][2]; # quatre dimensions
$suite = array(1, 2, 3, 4);
$personne = array("type" => "M.", "nom" =>
"Smith");
list($num1, $num2) = $suite; # $num1 vaut 1 et $num2 vaut 2
51
On peut connaître le nombre d’éléments d’un tableau grâce aux fonctions :
– sizeof() : retourne le nombre d’éléments d’un tableau, ou – count() : retourne le nombre d’éléments d’un tableau s’il existe,
1 si la variable n’est pas un tableau et 0 si la variable n’existe pas.
52
Alcôve - Programmer en PHP
Chaque tableau entretient un pointeur courant qui sert à naviguer en son sein grâce aux fonctions :
– reset() : place le pointeur interne sur le premier élément et retourne sa valeur,
– current() : retourne la valeur de l’ élément courant ,
– next() : place le pointeur interne sur l’ élément suivant et retourne sa valeur,
– prev() : place le pointeur interne sur l’ élément précédent et retourne sa valeur,
– each() : retourne la paire clé/valeur courante du tableau et avance le pointeur sur l’élément suivant (c’est la seule fonction qui ne retourne pas faux si l’élément vaut 0 ou "").
53
Un tableau peut être trié en utilisant les fonctions suivantes :
– asort()/arsort() : trient le tableau en ordre croissant/décroissant de valeurs ,
– ksort()/rsort() : trient le tableau en ordre croissant/décroissant de clés ,
– sort() : trie le tableau en ordre croissant clés et valeurs (on perd la correspondance clé/valeur),
– uasort()/uksort()/usort() : trient le tableau de la même façon que leurs quasi-homonymes (u pour user ) mais avec une fonction de comparaison fournie par l’utilisateur.
54
Alcôve - Programmer en PHP
Ex :
function cmp($a, $b) { if ($a == $b) return 0; return ($a > $b)? -1 : 1;
}
$tab = array(3,2,5,6,1); usort($tab, cmp); while(list($cle, $valeur) = each($tab)) { echo "tab[$cle] = $valeur<BR>\n";
}
Ce programme est équivalent à rsort().
55
La portée d’une variable dépend du contexte dans lequel elle est définie ;
La plupart des variables ont une portée qui s’étend sur l’intégralité du script PHP, elles sont globales ;
Cependant, les variables sont locales au sein d’une fonction ;
56
Alcôve - Programmer en PHP
Ex :
$toto = 1; # portée globale function affiche () { echo $toto; # portée locale
} affiche();
Cet exemple n’affichera rien car echo() utilise la variable locale $toto.
57
Deux façons existent pour accéder à une variable globale au sein d’un bloc :
– déclarer la variable comme global au sein du bloc,
– utiliser le tableau associatif $GLOBALS avec comme clé le nom de la variable globale.
58
Alcôve - Programmer en PHP
Ex :
$toto = 1; # portée globale $titi = 2; # portée globale function affiche () { global $toto; # portée globale echo "$toto et $GLOBALS[’titi’]";} affiche();
Cet exemple affichera 1 et 2.
59
statiques :
Une variable statique est une variable locale qui ne perd pas sa valeur à chaque fois que le bloc est exécuté ;
On utilise, comme en C, l’attribut static pour déclarer une telle variable :
Ex : static $toto;
Ce type de variables est très utile pour la création de fonctions récursives ;
60
Alcôve - Programmer en PHP
Ex : compter récursivement jusqu’à 10
function compte () { static $compteur = 0; $compteur++; echo "$compteur "; if ($compteur < 10) compte();
} compte();
Affiche 1 2 3 4 5 6 7 8 9 10.
61
dynamiques :
Une variable dynamique prend la valeur d’une variable et l’utilise comme nom d’une autre variable ;
Ex :
$toto = "Hello"; # $toto vaut Hello $$toto = "World"; # $Hello vaut World echo "$toto $Hello!"; # affiche Hello World! echo "$toto ${$toto}!"; # affiche aussi Hello World!
62
Alcôve - Programmer en PHP
Le nom d’une variable peut être placé entre accolades pour éviter les ambiguïtés ; Ex :
$a[1] = "V1"; | $a = "V2"; |
$b = "a"; | $b[1] = "a"; |
Résultat : ${$b}[1] == "V1" | Résultat : ${$b[1]} == "V2" |
Conclusion : ${$b}[1] et ${$b[1]} s’utilisent dans 2 contextes différents.
63
extérieures :
Toutes les variables transmises par les méthodes POST ou GET sont accessibles via les tableaux associatifs $HTTP_POST_VARS et $HTTP_GET_VARS (si l’option track_vars est activée dans ) ;
Les variables d’environnement sont accessibles comme des variables PHP classiques (ex : $HOME) ;
On peut aussi utiliser les fonctions getenv() et putenv() pour manipuler les variables d’environnement ;
64
Alcôve - Programmer en PHP
Variables prédéfinies :
Certaines variables sont prédéfinies par PHP, elles sont disponibles pendant toute l’exécution du script.
PHP_SELF | URI du script en cours d’exécution. |
GLOBALS | Tableau des variables globales. |
HTTP_GET_VARS | Tableau des variables issues de GET. |
HTTP_POST_VARS | Tableau des variables issues de POST. |
HTTP_COOKIE_VARS | Tableau des variables issues des cookies. |
65
Variables d’environnement CGI :
SERVER_SOFTWARE | SERVER_NAME |
GATEWAY_INTERFACE | SERVER_PROTOCOL |
SERVER_PORT | REQUEST_METHOD |
PATH_INFO | PATH_TRANSLATED |
SCRIPT_NAME | QUERY_STRING |
REMOTE_HOST | REMOTE_ADDR |
AUTH_TYPE | REMOTE_USER |
REMOTE_IDENT | CONTENT_TYPE |
CONTENT_LENGTH |
http
66
Alcôve - Programmer en PHP
Pour déterminer le type d’une variable on peut utiliser les fonctions suivantes :
– gettype() : retourne une chaine décrivant le type de la variable passée en argument ( integer , double , string , array , object , unknown type ),
– is_long()/is_int()/is_integer() : retourne true si la variable passée en argument est un entier et false dans le cas contraire,
– is_double()/is_float : idem mais avec les flottants/doubles,
– is_string() : idem mais avec les chaînes de caractères,
– is_array() : idem mais avec les tableaux, – is_object() : idem mais avec les objets.
67
PHP définit certaines constantes et propose un mécanisme pour en définir d’autres durant l’exécution du script ;
On définit une constante en utilisant la fonction define() ;
Ex : define("MA_CONSTANTE", "Bonjour"); echo MA_CONSTANTE; # affiche Bonjour
68
Alcôve - Programmer en PHP
Les principales constantes définies par PHP sont les suivantes :
– __FILE__ : nom du fichier actuellement exécuté,
– __LINE__ : numéro de la ligne qui est actuellement exécutée,
– PHP_VERSION : présentation de la version du PHP utilisée (ex :
3.0.8-dev),
– PHP_OS : système d’exploitation utilisé par la machine qui fait tourner le PHP (ex : Linux),
– TRUE : vrai,
– FALSE : faux,
– E_* : gestion des erreurs (cf. section correspondante).
69
Les opérateurs arithmétiques :
– addition : $a + $b,
– soustraction : $a - $b,
– multiplication : $a * $b,
– division : $a / $b,
– modulo (reste de la division entière) : $a % $b.
70
Alcôve - Programmer en PHP
L’opérateur sur les chaînes de caractères :
– concaténation : chaine1 . chaine2
Ex :
$jour = "Lundi"; echo ’Nous sommes ’ . $jour . "!"; Affiche Nous sommes Lundi!
71
Les opérateurs sur les bits :
– ET bit à bit : $a & $b,
– OU bit à bit : $a | $b,
– OU-Exclusif/XOR bit à bit : $a ˆ $b,
– NON bit à bit : ˜$a,
– décalage à droite de $b bits : $a > > $b,
– décalage à gauche de $b bits : $a < < $b.
72
Alcôve - Programmer en PHP
Les opérateurs logiques :
– ET (vrai si $a et $b vrais) :
$a and $b, $a && $b.
– OU (vrai si $a ou $b vrai(s)) :
$a or $b, $a || $b.
– OU-Exclusif/XOR (vrai si seul $a ou $b vrai) : $a xor $b, – NON (vrai si $a est faux) : !$a.
73
Les opérateurs d’affectation :
– l’opérateur d’affectation le plus simple est le signe =,
– il ne signifie pas "égal à" mais que l’opérande à gauche du signe = se voit affecté de la valeur de l’opérande de droite,
– la valeur retournée par une expression d’assignement est la valeur assignée,
Ex : $a = ($b = 4) + 3; # $a vaut 7 et $b vaut 4
74
Alcôve - Programmer en PHP
– il existe en plus des opérateurs combinés pour tous les opérateurs arithmétiques, les opérateurs bits à bits et l’opérateur de concaténation,
+= | -= | *= | /= | %= | .= |
&= | |= | ˆ= | < <= | > >= | ˜= |
– ceux-ci permettent d’utiliser la valeur d’une variable dans une expression et d’affecter le résultat de cette expression à cette variable,
Ex : $toto += 3 # équivaut à $toto = $toto + 3
75
– l’opérateur ++ est équivalent à += 1,
– l’opérateur -- est équivalent à -= 1,
– ces deux opérateurs peuvent être placés avant (pré-exécution) ou après (post-exécution) la variable à laquelle ils s’appliquent.
Ex :
$toto = 0;
echo ++$toto; # affiche 1 echo $toto++; # affiche 1 echo $toto; # affiche 2
76
Alcôve - Programmer en PHP
Les opérateurs de comparaison :
– égal à : $a == $b,
– différent de : $a!= $b,
– supérieur à : $a > $b,
– inférieur à : $a < $b, – supérieur ou égal à : $a >= $b, – inférieur ou égal à : $a <= $b.
77
L’opérateur ternaire :
– issu du langage C,
– (condition) ?(expression1) :(expression2);,
– renvoie expression1 si condition est vraie et expression2 dans le cas contraire.
Ex :
echo $toto == 0? "Nul" : "Non nul";
# affiche Nul si $toto vaut 0 et Non nul sinon
78
Alcôve - Programmer en PHP
79
Introduction ;
Instructions conditionnelles ;
Boucles ;
Inclusions.
80
Alcôve - Programmer en PHP
Tous les scripts PHP sont une suite d’instructions ;
Une instruction peut être :
– un assignement,
– un appel de fonction,
– une instruction conditionnelle, ou
– une instruction qui ne fait rien (une instruction vide).
Une instruction se termine habituellement par un point virgule ( ;) ;
81
Plusieurs instructions peuvent être regroupées en bloc , délimité par des accolades ({...}) ;
Un bloc est considéré comme une instruction ;
Les différents types d’instructions sont décrits dans ce chapitre.
82
Alcôve - Programmer en PHP
L’instruction if est une des plus importantes instructions de tous les langages, PHP inclus ;
Elle permet l’exécution conditionnelle d’une partie de code ;
Les fonctionnalités de l’instruction if sont les mêmes en PHP qu’en C ;
83
Prototype :
if (condition) {
# instructions à exécuter si la condition est vraie...
}
Une chaine de caractère ne contenant que 0 sera évaluée comme fausse ;
84
Alcôve - Programmer en PHP
Souvent on souhaite exécuter une instruction si une condition est remplie, et une autre instruction si cette condition n’est pas remplie ;
C’est le rôle du else ;
Prototype :
if (condition) {
# instructions à exécuter si la condition est vraie...
} else {
# instructions à exécuter si la condition est fausse...
}
85
elseif permet, comme l’expression else, d’exécuter une instruction après un if dans le cas où ce dernier est évalué comme faux ;
A la différence de l’expression else, il n’exécutera les instructions que si l’expression condionnelle elseif est évaluée comme vraie ;
86
Alcôve - Programmer en PHP
Prototype :
if (condition1) {
# instructions à exécuter si la condition1 est vraie...
} elseif (condition2) {
# instructions à exécuter si la condition2 est vraie...
} elseif (condition3) {
# instructions à exécuter si la condition3 est vraie...
...
} else {
# instructions à exécuter si aucune des conditions n’est vraie...
}
87
La syntaxe du if que nous venons de voir est directement héritée du langage C ;
Pas toujours très adaptée pour mélanger code PHP et HTML ;
PHP propose donc une autre syntaxe pour le if qui permet d’améliorer la lisibilité ;
88
Alcôve - Programmer en PHP
Prototype simplifié :
if (condition1) :
# instructions à exécuter si la condition1 est vraie...
elseif (condition2) :
# instructions à exécuter si la condition2 est vraie...
elseif (condition3) :
# instructions à exécuter si la condition3 est vraie...
...
else :
# instructions à exécuter si aucune des conditions n’est vraie...
endif;
89
Ex :
if ($type == "Femme") { echo "Bonjour Madame"; } elseif ($type == "Homme") { echo "Bonjour Monsieur";
} else { echo "Bonjour, vous êtes bizarre!";
}
90
Alcôve - Programmer en PHP
La boucle while est le moyen le plus simple d’implémenter une boucle en PHP ;
Cette boucle se comporte de la même manière qu’en C : les instructions sont exécutées tant que l’expression est vraie ;
La valeur de l’expression est vérifiée à chaque début de boucle ;
91
Si la valeur change durant l’exécution de l’instruction, l’exécution ne s’arrêtera qu’à la fin de l’itération ;
Comme avec le if, PHP définit une syntaxe simplifiée, en plus de celle héritée du langage C ;
92
Alcôve - Programmer en PHP
Prototype :
while (condition) {
# instructions à exécuter tant que la condition est vraie... }
Prototype simplifié :
while (condition) :
# instructions à exécuter tant que la condition est vraie...
endwhile;
93
Ex : compter jusqu’à 10
$i = 1; while ($i <= 10) { echo "$i ";
$i++;
}
Affiche 1 2 3 4 5 6 7 8 9 10.
94
Alcôve - Programmer en PHP
La boucle do..while ressemble beaucoup à la boucle while ;
La différence est que l’expression est testée à la fin de chaque itération au lieu du début ;
La première itération de la boucle est donc toujours exécutée ;
Il n’y a qu’une syntaxe possible pour les boucles do..while qui est, elle aussi, héritée du langage C ;
95
Prototype :
do {
# instructions à exécuter la première fois et ensuite tant que la condition est vraie...
} while (condition);
96
Alcôve - Programmer en PHP
Ex : compter jusqu’à 10
$i = 1; do { echo "$i ";
$i++;
} while ($i <= 10);
Affiche 1 2 3 4 5 6 7 8 9 10.
97
La boucle for est, en PHP tout comme en C, la boucle la plus complexe mais aussi la plus puissante ;
Elle fonctionne comme la boucle for du langage C ;
Prototype :
for (expression1; condition; expression2) {
# instructions à exécuter tant que la condition est vraie...
}
98
Alcôve - Programmer en PHP
L’expression1 est évaluée (exécutée) quoi qu’il arrive au début de la boucle ;
Au début de chaque itération, la condition est évaluée ;
– si elle est vraie, la boucle continue et les instructions sont à nouveau exécutées,
– si elle est fausse, l’exécution de la boucle s’arrête.
A la fin de chaque itération, l’expression2 est évaluée (exécutée) ;
99
Les expressions/conditions peuvent éventuellement être laissées vides (-> attention aux boucles infinies) ;
Comme avec le if et le while, PHP définit une syntaxe simplifiée, en plus de celle héritée du langage C ;
Prototype simplifié :
for (expression1; condition; expression2) :
# instructions à exécuter tant que la condition est vraie...
endfor;
100
Alcôve - Programmer en PHP
Ex : compter jusqu’à 10
for ($i = 1; $i <= 10; $i++) { echo "$i ";
}
Ex2 : compter jusqu’à 10
for ($i = 1; $i <= 10; print "$i ", $i++);
Ex3 : compter jusqu’à 10
for ($i = 1; $i <= 10; print $i++);
Ces 3 exemples affichent 1 2 3 4 5 6 7 8 9 10.
101
PHP4 définit une boucle foreach, comme en Perl, pour réaliser une boucle sur les éléments d’un tableau ;
En PHP3 on peut réaliser l’équivalent avec une boucle while et les fonction list() et each() que nous avons vu précédemment ;
Ex : afficher tous les arguments d’un formulaire POST
while (list($cle, $valeur) = each($HTTP_POST_VARS)) { echo "$cle => $valeur, ";
}
102
Alcôve - Programmer en PHP
Avec l’instruction foreach cette boucle devient :
foreach ($HTTP_POST_VARS as $cle => $valeur) { echo "$cle => $valeur, ";
}
Ou bien, si l’on ne veut récupérer que les valeurs :
foreach ($HTTP_POST_VARS as $valeur) { echo "$valeur, ";
}
103
L’instruction break permet de sortir d’une boucle à n’importe quel moment ;
Ex : compter jusqu’à 10
for ($i = 1, , $i++) { if ($i > 10) break; echo "$i ";
}
Affiche 1 2 3 4 5 6 7 8 9 10.
104
Alcôve - Programmer en PHP
L’instruction continue permet d’ignorer les instructions restantes dans la boucle et de passer directement à l’itération suivante ;
Ex : compter 2 par 2 jusqu’à 10
for ($i = 1, $i <= 10, $i++) { if ($i % 2) continue; # $i impaire echo "$i ";
}
Affiche 2 4 6 8 10.
105
L’instruction switch équivaut à une serie d’instructions ;
Elle est utilisée pour comparer la même variable (ou expression) avec un grand nombre de valeurs différentes et d’exécuter différentes parties de code suivant la valeur à laquelle elle est égale ;
106
Alcôve - Programmer en PHP
Prototype :
switch (expression) { case resultat1 :
# instructions à exécuter si l’expression vaut resultat1...
break; case resultat2 :
# instructions à exécuter si l’expression vaut resultat2...
break;
...
default :
# instructions à exécuter en dernier recours...
}
107
L’instruction switch exécute chacune des clauses dans l’ordre d’écriture ;
Elle est exécutée ligne par ligne ;
Aucun code n’est exécuté jusqu’à ce que le premier case soit
vérifié ;
108
Alcôve - Programmer en PHP
Lorsqu’il trouve le premier case vérifié, PHP exécute alors les instructions correspondantes et continue jusqu’à la fin du bloc switch ;
Pour reproduire le fonctionnement d’un , il faut terminer tous les cases par des break ;
On peut définir un case exécuté par défaut (équivalent au else) grâce à default ;
109
Ex :
switch ($type) { case "Femme" :
echo "Bonjour Madame"; break; case "Homme" :
echo "Bonjour Monsieur"; break; default :
echo "Bonjour, vous êtes bizarre!";
}
110
Alcôve - Programmer en PHP
La fonction require() se substitue elle-même avec le contenu du fichier spécifié en argument ;
La substitution s’opère avant l’interprétation du code ;
Elle ressemble à peu près au #include du C ;
Si on l’utilise au sein d’une boucle, c’est le fichier tel qu’il était à la première itération qui sera réutilisé à chaque itération (même s’il a changé entre temps) ;
De plus, il est déconseillé d’utiliser require() avec un nom de fichier dynamique (contenant une variable) ;
111
La fonction include() inclut et évalue le fichier spécifié en argument ;
Ceci est fait à chaque fois que la fonction est rencontrée ;
On peut donc utiliser cette fonction au sein d’une boucle pour inclure un fichier différent à chaque fois par exemple (ex :
include("toto_$i");).
112
Alcôve - Programmer en PHP
113
Présentation des fonctions PHP ;
Les valeurs de retour ; Les arguments.
114
Alcôve - Programmer en PHP
Une fonction peut être définie en utilisant la syntaxe suivante :
function ma_fonction ($arg_1, $arg_2, ..., $arg_n)
{
# Corps de ma fonction...
return $valeur_de_retour;
}
Tout code PHP correct syntaxiquement peut apparaître dans une fonction et dans une définition de classe ;
En PHP3 toute fonction doit être préalablement définie avant d’être utilisée (idem langage C). Elle peut être définie n’importe où en PHP4.
115
Les valeurs sont renvoyées en utilisant une instruction de retour optionnelle ;
Tous les types de variables peuvent être renvoyés (tableaux et objets compris) ;
Ex :
function carre($nombre) { return $nombre * $nombre;
} echo carre(3); # affiche la valeur 9
116
Alcôve - Programmer en PHP
On ne peut pas renvoyer plusieurs valeurs en même temps mais on peut obtenir un résultat identique en renvoyant un tableau ;
Ex : function couleurs() { return array("Coeur", "Pique", "Trèfle",
"Carreau");
} list($c1, $c2, $c3, $c4) = couleurs();
117
PHP4 permet également le retour de fonction par référence ;
Ce mécanisme est utile lorsque l’on cherche à utiliser une fonction pour trouver une variable que l’on veux lier ;
A la différence du passage par référence, il faut utiliser un & à deux endroits :
– pour indiquer que l’on retourne une référence (et non une copie comme à l’habitude), mais aussi
– pour indiquer qu’une liaison à une référence et non un simple assignement de variable doit avoir lieu avec la variable de retour.
118
Alcôve - Programmer en PHP
Ex : function & trouve_variable ($param) {
# ...recherche de la variable $toto...
return $toto;
}
$titi = & trouve_variable($tata);
$titi->x = 2;
Les propriétés de l’objet retourné par la fonction trouve_variable() sont liées à $titi. Il ne s’agit pas d’une copie de $toto.
119
Des informations peuvent être passées à une fonction en utilisant un tableau d’arguments dont chaque élément est séparé par une virgule ;
Un élément peut être une variable ou une constante ;
PHP supporte :
– le passage d’arguments par valeur (méthode par défaut),
– le passage d’arguments par référence, et – les valeurs par défaut des arguments.
Une liste d’arguments dont le nombre est variable ne fonctionne pas en PHP mais un résultat similaire peut être obtenu en utilisant un tableau ;
120
Alcôve - Programmer en PHP
Passage d’arguments par valeur :
C’est la méthode par défaut ;
Les variables ne sont pas affectées par des changements au sein de la fonction ;
On peut donc changer la valeur des arguments au sein de la fonction sans que ceci ait des répercussions à l’extérieur de celle-ci ;
121
Ex :
function ajoute_deux($nombre) {
$nombre += 2; echo $nombre; }
$toto = 3;
ajoute_deux($toto); # affiche 5 echo $toto; # affiche 3
122
Alcôve - Programmer en PHP
Passage d’arguments par référence :
Les variables sont affectées par des changements au sein de la fonction ;
Deux possibilités :
– de façon permanente en ajoutant un & devant le nom de la variable dans la définition de la fonction, ou
– de façon ponctuelle en ajoutant un & devant le nom de la variable lors de l’appel à la fonction.
123
Ex :
function retranche_deux(&$nombre) {
$nombre -= 2; echo $nombre; }
$toto = 3;
ajoute_deux(&$toto); # affiche 5 echo $toto; # affiche 5 retranche_deux($toto); # affiche 3 echo $toto; # affiche 3
124
Alcôve - Programmer en PHP
Valeurs par défaut des arguments :
PHP permet, comme en C++, de spécifier des valeurs par défaut pour les arguments de type scalaire ;
Il suffit de spécifier la valeur par défaut avec un = dans la déclaration de la fonction ;
Cette valeur doit être une constante (pas de variables ni d’attributs de classes) et les arguments par défaut doivent être les derniers dans la liste ;
125
Ex :
function annotation($type = "assez bien") { echo "Vous avez $type travaillé";
} annotation("mal"); # affiche Vous avez mal travaillé annotation(); # affiche Vous avez assez bien travaillé
126
Alcôve - Programmer en PHP
127
Rappels sur la programmation orientée objet ;
Les classes en PHP ;
Les objets en PHP ;
Particularités de PHP.
128
Alcôve - Programmer en PHP
POO -> raisonner en termes de fonctionnalités et de propriétés et non en terme de traitements ; L’ encapsulation :
L’objet représente une abstraction d’une entité abstraite ou concrète pour laquelle il regroupe en une même structure les données et les traitements ;
Un objet possède des caractéristiques et des fonctionnalités et on l’utilise sans savoir comment elles sont implémentées (ex : un téléphone) ;
129
Les caractéristiques/fonctionnalités non utiles pour la manipulation de l’objet mais utiles à son fonctionnement sont masquées à l’utilisateur (ex : les composants internes du téléphone) ; L’ héritage :
Un objet peut dériver d’un autre objet et posséder des caractéristiques/fonctionnalités supplémentaires tout en héritant des caractéristiques/fonctionalités de son aïeul (ex : un téléphone sans fils est un téléphone un peu particulier) ;
130
Alcôve - Programmer en PHP
Le polymorphisme :
Lorsqu’on invoque une méthode d’un objet, le programme saura retrouver la méthode parmis celles des aïeux de l’objet si celle-ci n’est pas explicitement définie pour lui mais qu’il en a hérité (ex : la méthode "décrocher le téléphone" pour un sans fils) ;
131
A la création ( instanciation ) de l’objet, une méthode (qui porte généralement le même nom que la classe) est appellée automatiquement : c’est le constructeur ;
Parfois, à la destruction de l’objet, une méthode (qui porte généralement le même nom que la classe précédé d’un ˜) est appellée automatiquement : c’est le destructeur ;
132
Alcôve - Programmer en PHP
Une classe est une collection de variables ( attributs ) et de fonctions
( méthodes ) qui s’appliquent à ces variables ;
Un objet est une instance d’une classe. Son type de données est la classe d’objets à laquelle il appartient (un peu comme $toto = 123; est une instance du type entier ).
133
En PHP, on définit une classe d’objets de la façon suivante :
class MaClasse {
# Attributs
var $monAttribut; # Méthodes function maMethode($argument) {
# ...traitement de $monAttribut avec $argument...
}
}
134
Alcôve - Programmer en PHP
Il est possible de spécifier une variable objet de la façon suivante :
$monObjet = new MaClasse;
On accède à un attribut ou à une méthode de la façon suivante :
$monObjet->monAttribut = "toto";
$monObjet->maMethode(23);
135
Tous les attributs et méthodes sont publics ;
Les objets sont libérés automatiquement quand ils ne sont plus utilisés ( Garbage Collector ) ; Pas de destructeur.
136
Alcôve - Programmer en PHP
Ex : le Caddie
class Caddie { var $elements; # éléments de notre Caddie
# Constructeur qui ajoute un cadeau à chaque nouveau Caddie function Caddie() {
$this->ajoute(1, "cadeau");
}
# Ajout de $nombre articles de type $type au Caddie function ajoute($nombre, $type) {
$this->elements[$type] += $nombre;
}
137
# Retrait de $nombre articles de type $type au Caddie function enleve($nombre, $type) { if ($this->elements[$type] > $nombre) { $this->elements[$type] -= $nombre; return true;
} else { return false; }
}
}
138
Alcôve - Programmer en PHP
139
Gestion des connexions et des utilisateurs ;
Gestion des sessions ;
Autres fonctionnalités essentielles.
140
Alcôve - Programmer en PHP
141
Gestion des utilisateurs - authentification ; Gestion des connexions.
142
Alcôve - Programmer en PHP
Les fonctions d’authentification HTTP ne sont disponibles que si
PHP est exécuté comme module Apache (et non pas comme CGI) ;
On utilise la fonction header() pour demander une authentification
(Authentication Required) au client, générant ainsi l’apparition d’une fenêtre de demande de nom d’utilisateur et de mot de passe ;
143
Une fois que les champs ont été remplis, l’URL sera de nouveau appelée mais avec les variables suivantes mises à jour :
– $PHP_AUTH_USER : utilisateur,
– $PHP_AUTH_PW : mot de passe, et
– $PHP_AUTH_TYPE : type d’authentification.
Actuellement, seule l’authentification basique (Basic) est supportée ;
144
Alcôve - Programmer en PHP
Ex : page d’authentification
<?php if(!isset($PHP_AUTH_USER)) {
Header("WWW-Authenticate : Basic realm=’Titre’"); Header("HTTP/1.0 401 Unauthorized"); echo "Texte à envoyer au client en cas d’annulation"; exit; } else {
echo "Bonjour $PHP_AUTH_USER.<br>"; echo "Votre mot de passe est $PHP_AUTH_PW."; }?>
145
Le statut des connexions est conservé en interne par PHP ;
Il y a trois états possibles :
– 0 / NORMAL : le script PHP travaille,
– 1 / ABORTED : le client distant s’est déconnecté,
– 2 / TIMEOUT : la durée maximale d’exécution est dépassée.
146
Alcôve - Programmer en PHP
Par défaut, le script PHP se termine dès que le client se déconnecte mais on peut changer cette politique de différentes façons :
– continuer le script comme si le client était encore là en activant l’option :
ignore_user_abort dans , ou [php3_ignore_user_abort/ignore_user_abort dans .
– exécuter une fonction de fermeture préalablement enregistrée grâce à la fonction register_shutdown_function().
147
La fonction enregistrée avec register_shutdown_function() sera aussi appelée à la fin du script quand celui-ci se termine normalement ;
Pour pouvoir avoir un comportement différent suivant l’état du script lors de sa finalisation on peut tester l’état déconnecté du script avec la fonction connection_aborted() ;
La fonction connection_status() permet également de retourner l’état du script (0, 1, 2 ou 3) ;
148
Alcôve - Programmer en PHP
On peut modifier le délai de timeout (30 secondes par défaut) de plusieurs manières :
– fonction set_time_limit(),
– max_execution_time dans , ou
– php3_max_execution_time/max_execution_time dans .
La fonction enregistrée avec register_shutdown_function() sera également appelée lorsqu’un timeout intervient ;
On peut tester l’état timeout du script avec la fonction connection_timeout() ;
149
150
Alcôve - Programmer en PHP
Principe ;
Sessions avec PHPlib ; Sessions avec PHP4.
151
La gestion des sessions avec PHP est un moyen de sauver des informations entre deux accès (requêtes HTTP) ;
Cela permet notamment de construire des applications personnalisées, et d’accroître les fonctionnalités de votre site ;
Malheureusement, la gestion des sessions n’était pas inclue dans les fonctionnalités standards de PHP jusqu’à la version PHP4 ;
Une bibliothèque complémentaire a donc été développée pour gérer les sessions avec PHP3, c’est PHPlib ;
152
Alcôve - Programmer en PHP
PHPlib est une bibliothèque PHP libre qui vise à faciliter la création de sites avec PHP ;
Elle est toujours utilisable avec PHP4 et présente d’ailleurs des fonctionnalités que ce dernier ne possède toujours pas en natif ;
Elle se compose de classes et de fonctions qui permettent :
– le suivi des sessions,
– l’utilisation de variables persistantes au niveau utilisateur et au niveau session,
– l’authentification et la gestion des permissions, – la génération rapide de code HTML...
153
Installation :
– récupérer l’archive (http ), – la décompresser dans un répertoire quelconque (ex :
/usr/lib/phplib/),
– éditer le fichier et fixer les options de la façon suivante :
magic_quotes_gpc = Off magic_quotes_runtime = Off magic_quotes_sybase = Off track_vars = On
auto_prepend_file = <répertoire contenant >
include_path = <répertoire d’installation>
154
Alcôve - Programmer en PHP
Pour l’utilisation de PHPlib, il faut créer quelques fichiers en plus des scripts PHP :
– sert à définir toutes les librairies PHPlib à inclure avant chaque fichier, et
– sert à définir les classes qui vont être utilisées par les scripts.
155
Pour gérer les sessions et les variables persistantes, la librairie se sert d’une base de données, d’un annuaire LDAP ou encore d’un simple fichier ;
Cette base de données et les différentes tables qui sont utilisées par les scripts utilisant PHPlib doivent être créées par vos soins grâce aux fichiers de configurations fournis (généralement dans /usr/lib/phplib/stuff/) ;
Ex : base de données MySQL
mysql -h <ma_machine_hote> <ma_base>
<create_database.mysql
156
Alcôve - Programmer e