Professional Documents
Culture Documents
Langage PHP
php.doc
SOMMAIRE
1.GNRALITS----------------------------------------------------------------------------------------------------------------5
1.ORIGINES DE PHP........................................................................................................................................................................5 2.BIBLIOTHQUES INTGRES.............................................................................................................................................................5 3.SGBD SUPPORTS PAR PHP...........................................................................................................................................................5 4.L'INTERPRTATION DU CODE PAR LE SERVEUR.....................................................................................................................................6 5.IMPLANTATION AU SEIN DU CODE HTML.........................................................................................................................................6 6.UN EXEMPLE DE SCRIPT SIMPLE........................................................................................................................................................6 7.L'INTERPRTATION DU CODE............................................................................................................................................................7 8.LES COMMENTAIRES.......................................................................................................................................................................7 9.TYPOLOGIE...................................................................................................................................................................................7
2.LES VARIABLES--------------------------------------------------------------------------------------------------------------8
10.NOMMAGE DES VARIABLES............................................................................................................................................................8 11.LES VARIABLES SCALAIRES............................................................................................................................................................8 12.LA PORTE (VISIBILIT) DES VARIABLES..........................................................................................................................................9 13.LES VARIABLES ISSUES DE FORMULAIRES.......................................................................................................................................10 14.LES CONSTANTES DFINIES..........................................................................................................................................................10
3.LES OPRATEURS---------------------------------------------------------------------------------------------------------11
15.LES OPRATEURS DE CALCUL.......................................................................................................................................................11 16.LES OPRATEURS D'ASSIGNATION..................................................................................................................................................11 17.LES OPRATEURS D'INCRMENTATION............................................................................................................................................12 18.LES OPRATEURS DE COMPARAISON..............................................................................................................................................12 19.LES OPRATEURS LOGIQUES (BOOLENS).......................................................................................................................................12 20.LES OPRATEURS BITWISE...........................................................................................................................................................13 21.AUTRES OPRATEURS.................................................................................................................................................................13 22.LES PRIORITS DES OPRATEURS...................................................................................................................................................14
5.LES TABLEAUX-------------------------------------------------------------------------------------------------------------21
29.LES VARIABLES TABLEAUX..........................................................................................................................................................21 30.LES VARIABLES DES TABLEAUX ASSOCIATIFS..................................................................................................................................21
6.LES FONCTIONS------------------------------------------------------------------------------------------------------------22
31.LA NOTION DE FONCTION............................................................................................................................................................22 32.LA DCLARATION D'UNE FONCTION...............................................................................................................................................22 33.APPEL DE FONCTION...................................................................................................................................................................23 34.LES ARGUMENTS D'UNE FONCTION................................................................................................................................................23 35.TRAVAILLER SUR DES VARIABLES DANS LES FONCTIONS....................................................................................................................23 36.RENVOI D'UNE VALEUR PAR UNE FONCTION....................................................................................................................................23 37.PASSAGE DARGUMENT PAR RFRENCE.........................................................................................................................................24 38.VALEUR PAR DFAUT DES ARGUMENTS..........................................................................................................................................24 39.LA FONCTION INCLUDE...............................................................................................................................................................25 40.LA FONCTION EMPTY..................................................................................................................................................................25 41.LA FONCTION ISSET....................................................................................................................................................................25 42.LA FONCTION UNSET..................................................................................................................................................................25 ESAT/DMSI/PROA/WGR Page 1 sur137 jj/10/OO
Cours Programmation
Langage PHP
php.doc
Cours Programmation
Langage PHP
php.doc
72.1.date................................................................................................................................................................................49 72.2.getdate...........................................................................................................................................................................50 72.3.strftime...........................................................................................................................................................................50 73.DTERMINATION DE LA DATE DE DERNIRE MODIFICATION DUN SCRIPT..............................................................................................50 74.CONVERSION DES DATES AUX FORMATS MYSQL...........................................................................................................................51 75.EXERCICE PRATIQUE...................................................................................................................................................................52
10.LES OBJETS-----------------------------------------------------------------------------------------------------------------55
76.CRATION DUN OBJET...............................................................................................................................................................55 77.LES PROPRITS DUN OBJET........................................................................................................................................................56 78.LES MTHODES DUN OBJET.........................................................................................................................................................57 79.LHRITAGE..............................................................................................................................................................................59 80.EXERCICE PRATIQUE...................................................................................................................................................................61
11.LES FORMULAIRES------------------------------------------------------------------------------------------------------62
81.LES VARIABLES PHP.................................................................................................................................................................62 82.LES LMENTS SELECT MULTIPLES...........................................................................................................................................64 83.LES CHAMPS DUN FORMULAIRE DANS UN TABLEAU ASSOCIATIF........................................................................................................65 84.ECHANGES CLIENT/SERVEUR........................................................................................................................................................67 85.COMBINAISON DE CODES HTML ET PHP....................................................................................................................................67
12.LES FICHIERS--------------------------------------------------------------------------------------------------------------69
86.STRUCTURE DUN FICHIER POUR PHP...........................................................................................................................................69 87.LIRE ET CRIRE DANS UN FICHIER ................................................................................................................................................69 88.OUVERTURE DUN FICHIER .........................................................................................................................................................69 89.FERMETURE DUN FICHIER ..........................................................................................................................................................70 90.ACCS AUX FICHIERS..................................................................................................................................................................70 91.ACCS AUX RPERTOIRES............................................................................................................................................................71 92.LIRE UN FICHIER DFINI PAR UNE URL.........................................................................................................................................73 93.EXEMPLES DE TRAITEMENTS SUR LES FICHIERS................................................................................................................................74 94.LA FONCTION POPEN...................................................................................................................................................................75 95.PROBLMES POSS PAR LUSAGE DE FICHIERS PLATS........................................................................................................................75
14.FONCTIONNALITS INTERNET------------------------------------------------------------------------------------107
106.LE COURRIER LECTRONIQUE...................................................................................................................................................107
ESAT/DMSI/PROA/WGR
Page 3 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
106.1.mail............................................................................................................................................................................107 107.LE FILE UPLOAD ..............................................................................................................................................................108 108.LE TRAITEMENT DES URL......................................................................................................................................................109 108.1.Codage des URL........................................................................................................................................................109 108.2.urlencode...................................................................................................................................................................109 108.3.urldecode...................................................................................................................................................................110 108.4.parse_url....................................................................................................................................................................110 109.LES MTHODES DE GESTION DU CONTEXTE APPLICATIF.................................................................................................................111 109.1.Le contexte applicatif.................................................................................................................................................111 109.2.Les diffrentes mthodes de gestion..........................................................................................................................111
109.2.1.URL longue..........................................................................................................................................................................111 109.2.2.Variables caches..................................................................................................................................................................112 109.2.3.Cookies.................................................................................................................................................................................112 109.2.4.Variables de session..............................................................................................................................................................114 109.2.5.Base de donnes....................................................................................................................................................................117
18.BIBLIOGRAPHIE---------------------------------------------------------------------------------------------------------137
ESAT/DMSI/PROA/WGR
Page 4 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
1. Gnralits
PHP (Personal Home Page) est un langage interprt (un langage de script) excut du ct serveur (comme les scripts CGI, ASP, ...) et non du ct client (un script crit en Javascript ou une applet Java s'excute sur votre ordinateur...). La syntaxe du langage provient de celles du langage C, du Perl et de Java. Ses principaux atouts sont: La gratuit et la disponibilit du code source (PHP3 est distribu sous licence GNU GPL). La simplicit d'criture de scripts. la possibilit d'inclure le script PHP au sein d'une page HTML (contrairement aux scripts CGI, pour lesquels il faut crire des lignes de code pour afficher chaque ligne en langage HTML). La simplicit d'interfaage avec des bases de donnes (de nombreux SGBD sont supports, mais le plus utilis avec ce langage est MySQL, un SGBD gratuit sur les plates-formes Unix et Linux, mais payant sous Windows). L'intgration au sein de nombreux serveurs Web (Apache, Microsoft IIS, ...).
PHP est trs efficace. Les tests de performances publis par Zend Technologies (http://www.zend.com) montrent que PHP dpasse tous ses concurrents.
1. Origines de PHP
Le langage PHP a t mis au point au dbut d'automne 1994 par Rasmus Lerdorf. Ce langage de script lui permettait de conserver la trace des utilisateurs venant consulter son CV sur son site, grce l'accs une base de donnes par l'intermdiaire de requtes SQL. Ainsi, tant donn que de nombreux internautes lui demandrent ce programme, Rasmus Lerdorf mit en ligne en 1995 la premire version de ce programme qu'il baptisa Personal Sommaire Page Tools, puis Personal Home Page v1.0 (traduisez page personnelle version 1.0). Etant donn le succs de PHP 1.0, Rasmus Lerdorf dcida d'amliorer ce langage en y intgrant des structures plus avances telles que des boucles, des structures conditionnelles, et y intgra un package permettant d'interprter les formulaires qu'il avait dvelopp (FI, Form Interpreter) ainsi que le support de mSQL. C'est de cette faon que la version 2 du langage, baptise pour l'occasion PHP/FI version 2, vit le jour durant l't 1995. Il fut rapidement utilis sur de nombreux sites (15000 fin 1996, puis 50000 en milieu d'anne 1997). A partir de 1997, Zeev Suraski et Andi Gurmans rejoignirent Rasmus pour former une quipe de programmeurs afin de mettre au point PHP 3 (Stig Bakken, Shane Caraveo et Jim Winstead les rejoignirent par la suite) nouvelle abrviation signifiant Hypertext Preprocessor . C'est ainsi que la version 3.0 de PHP fut disponible le 6 juin 1998. A la fin de l'anne 1999, une version bta de PHP, baptise PHP4 est apparue...
2. Bibliothques intgres
Comme PHP a t conu pour tre utilis sur le Web, il possde plusieurs fonctions intgres permettant deffectuer la plupart des tches en rapport avec le Web. Vous pouvez ainsi gnrer des images GIF en temps rel, vous connecter dautres services rseaux, envoyer des e-mails, travailler avec les cookies, et gnrer des documents PDF. Le code source de PHP est disponible gratuitement. Contrairement aux produits commerciaux, dont les sources ne sont pas distribues, vous avez tout fait la possibilit de modifier ce langage, ou dy ajouter de nouvelles caractristiques. Des patchs correctifs sont distribus par les concepteurs, il est donc inutile de sinquiter de la perennit du support ou du dveloppement de PHP.
ESAT/DMSI/PROA/WGR
Page 5 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Un script PHP est interprt par le serveur, les utilisateurs ne peuvent donc pas voir le code source!
Le code php3 stock sur le serveur n'est donc jamais visible directement par le client puisque ds qu'il en demande l'accs, le serveur l'interprte!; de cette faon aucune modification n'est apporter sur les navigateurs...
Un script PHP doit: comporter l'extension .php3 tre imbriqu entre les dlimiteurs <?php et ?>
Pour des raisons de conformit avec certaines normes (XML et ASP par exemple), plusieurs balises peuvent tre utilises pour dlimiter un code PHP: 1. <?php et ?> 2. <? et ?> 3. <script language="php"> et </script> 4. <%php et %>
ESAT/DMSI/PROA/WGR
Page 6 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
7. L'interprtation du code
Un code PHP (celui compris entre les dlimiteurs <?php et ?>) est un ensemble d'instructions se terminant chacune par un point-virgule (comme en langage C). Lorsque le code est interprt, les espaces, retours chariot et tabulations ne sont pas pris en compte par le serveur. Il est tout de mme conseill d'en mettre (ce n'est pas parce qu'ils ne sont pas interprts que l'on ne peut pas les utiliser) afin de rendre le code plus lisible (pour vous, puisque les utilisateurs ne peuvent lire le code source: il est interprt).
8. Les commentaires
Une autre faon de rendre le code plus comprhensible consiste insrer des commentaires, ils seront tout simplement ignors par le serveur lors de l'interprtation. Pour ce faire, il est possible, comme en langage C, d'utiliser des balises qui vont permettre de dlimiter les explications afin que l'interprteur les ignore et passe directement la suite du fichier. Ces dlimiteurs sont /* et */ Un commentaire sera donc not de la faon suivante: /* Voici un commentaire! */ Il est possible aussi d'utiliser un type de commentaire permettant de mettre toute la fin d'une ligne en commentaire en utilisant le double slash (//). Tout ce qui se situe droite de ce symbole sera mis en commentaire. // Voici un autre commentaire! Il y a toutefois quelques rgles respecter : Les commentaires peuvent tre placs n'importe o l'intrieur des dlimiteurs de script PHP Les commentaires ne peuvent contenir le dlimiteur de fin de commentaire (*/) Les commentaires ne peuvent tre imbriqus Les commentaires peuvent tre crits sur plusieurs lignes (sauf avec //) Les commentaires ne peuvent pas couper un mot du code en deux
9. Typologie
La manire d'crire les choses en langage PHP a son importance. Le langage PHP est par exemple sensible la casse (en anglais case sensitive), cela signifie qu'un nom contenant des majuscules est diffrent du mme nom crit en minuscules. Toutefois, cette rgle ne s'applique pas aux fonctions, les spcifications du langage PHP prcisent que la fonction print peut tre appele print(), Print() ou PRINT(). Enfin, toute instruction se termine par un point-virgule.
ESAT/DMSI/PROA/WGR
Page 7 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
2. Les variables
Une variable est un objet repr par son nom, pouvant contenir des donnes, qui pourront tre modifies lors de l'excution du programme. Les variables en langage PHP peuvent tre de trois types: scalaires tableaux tableaux associatifs Quel que soit le type de variable, son nom doit obligatoirement tre prcd du caractre dollar ($). Contrairement de nombreux langages de programmation, comme le langage C, les variables en PHP n'ont pas besoin d'tre dclares, c'est--dire que l'on peut commencer les utiliser sans en avoir averti l'interprteur prcdemment, ainsi si la variable existait prcdemment, son contenu est utilis, sinon l'interprteur lui affectera la valeur en lui assignant 0 par dfaut. De cette faon si vous ajoutez 3 une nouvelle variable (non dfinie plus haut dans le code), sa valeur sera 3...
Les noms de variables sont sensibles la casse (le langage PHP fait la diffrence entre un nom en majuscule et un nom en minuscule), il faut donc veiller utiliser des noms comportant la mme casse! Toutefois, les noms de fonctions font exception cette rgle...
ESAT/DMSI/PROA/WGR
Page 8 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Instruction $Variable = 0; $Variable = 12; $Variable = 0.0; $Variable = 12.0; $Variable = "0.0"; $Variable = "Bonjour tout le monde"; type entier type entier type rel type rel type chane type chane
Type de la variable
Il existe des caractres reprs par un code ASCII spcial permettant d'effectuer des oprations particulires. Ces caractres peuvent tre reprsents plus simplement en langage PHP grce au caractre '\' suivi d'une lettre, qui prcise qu'il s'agit d'un caractre de contrle: Caractre \" \\ \r \n \t Description guillemet barre oblique inverse (antislash) retour chariot retour la ligne tabulation
En effet, certains de ces caractres ne pourraient pas tre reprsents autrement (un retour la ligne ne peut pas tre reprsent l'cran). D'autre part, les caractres \ et " ne peuvent pas faire partie en tant que tel d'une chane de caractres, pour des raisons vidente d'ambigut...
D'une manire gnrale il est prfrable de donner des noms diffrents aux variables locales et globales pour des raisons de lisibilit et de comprhension du code...
ESAT/DMSI/PROA/WGR
Page 9 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Le nom d'une constante dfinie l'aide de la fonction define() ne doit pas commencer par le caractre $ (de cette faon aucune affection n'est possible).
ESAT/DMSI/PROA/WGR
Page 10 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
3. Les oprateurs
Les oprateurs sont des symboles qui permettent de manipuler des variables, c'est--dire effectuer des oprations, les valuer, ... On distingue plusieurs types d'oprateurs: les oprateurs de calcul les oprateurs d'assignation les oprateurs d'incrmentation les oprateurs de comparaison les oprateurs logiques (boolens) les oprateurs (bit--bit) les oprateurs (de rotation de bit)
ESAT/DMSI/PROA/WGR
Page 11 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Augmente d'une unit la variable $x++ ou ++$x 8 Diminue d'une unit la variable $x-- ou --$x 6
Vrifie qu'une variable oprateur d'infriorit est strictement $x < 3 stricte infrieure une valeur Vrifie qu'une variable oprateur d'infriorit est infrieure ou gale $x <= 3 une valeur Vrifie qu'une variable oprateur de est strictement $x > 3 supriorit stricte suprieure une valeur Vrifie qu'une variable oprateur de est suprieure ou gale $x >= 3 supriorit une valeur Vrifie qu'une variable oprateur de est diffrente d'une $x != 3 diffrence valeur
ESAT/DMSI/PROA/WGR
Page 12 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Les oprateurs suivants effectuent des rotations sur les bits, c'est--dire qu'ils dcalent chacun des bits d'un nombre de bits vers la gauche ou vers la droite. Le premire oprande dsigne la donne sur laquelle on va faire le dcalage, le second dsigne le nombre de bits duquel il va tre dcal. Oprateur Dnomination << Effet Syntaxe Rsultat Dcale les bits vers la gauche (multiplie par 2 Rotation chaque dcalage). Les zros qui sortent gauche 6 << 1 (110 << 1) 12 (1100) gauche sont perdus, tandis que des zros sont insrs droite Rotation droite Dcale les bits vers la droite (divise par 2 avec chaque dcalage). Les zros qui sortent droite 6 >> 1 (0110 >> 1) 3 (0011) conservation du sont perdus, tandis que le bit non-nul de poids signe plus fort est recopi gauche
>>
ESAT/DMSI/PROA/WGR
Page 13 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 14 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
24.1. L'instruction if
L'instruction if est la structure de test la plus basique, on la retrouve dans tous les langages (avec une syntaxe diffrente...). Elle permet d'excuter une srie d'instructions si jamais une condition est ralise. La syntaxe de cette expression est la suivante : if (condition) { liste d'instructions // ces instructions seront excutes si la condition est ralise } Remarques: la condition doit tre entre parenthses, il est possible de dfinir plusieurs conditions remplir avec les oprateurs ET et OU (&& et ||) par exemple: if ( (condition1) && (condition2) ) teste si les deux conditions sont vraies if ( (condition1) || (condition2) ) teste si au moins une des deux conditions est vraie s'il n'y a qu'une instruction excuter, les accolades ne sont pas ncessaires.
ESAT/DMSI/PROA/WGR
Page 15 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 16 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Si linstruction break ; est omise la suite de la liste dinstructions dun case, PHP continuera excuter les instructions du ou des case suivants jusqu la rencontre dun break ; ou la fin de linstruction switch.
ESAT/DMSI/PROA/WGR
Page 17 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Les points-virgules doivent toujours tre prsents, mme si expression1 et/ou expression2 ne contiennent aucune instruction. Si la liste dinstructions est inexistante, linstruction for doit se terminer par un point-virgule, la syntaxe est alors la suivante : for (expression1; condition ; expression2) ; Exemple: for ($i=1 ; $i<6 ; $ i++) { echo $i . ,; } Cette boucle affiche 5 fois la valeur de $i, c'est--dire 1,2,3,4,5, Autre exemple restituant le mme rsultat : for ($i=1 ; $i<6 ; echo $ i++.,) ;
ESAT/DMSI/PROA/WGR
Page 18 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 19 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 20 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
5. Les tableaux
29. Les variables tableaux
Les variables, telles que nous les avons vues, ne permettent de stocker qu'une seule donne la fois. Or, pour de nombreuses donnes, comme cela est souvent le cas, des variables distinctes seraient beaucoup trop lourdes grer. Heureusement, PHP propose des structures de donnes permettant de stocker l'ensemble de ces donnes dans une "variable commune". Ainsi, pour accder ces valeurs il suffit de parcourir la variable de type complexe compose de "variables" de type simple. Les tableaux stockent des donnes sous forme de liste. Les donnes contenues dans la liste sont accessibles grce un index (un numro reprsentant l'lment de la liste). Contrairement des langages tels que le langage C, il est possible de stocker des lments de types diffrents dans un mme tableau. Ainsi, pour dsigner un lment de tableau, il suffit de faire suivre au nom du tableau l'indice de l'lment entre crochets : $Tableau[0] = 12; $Tableau[1] = "CCM"; Avec PHP, il n'est pas ncessaire de prciser la valeur de l'index lorsque l'on veut remplir un tableau, car il assigne la valeur 0 au premier lment (si le tableau est vide) et incrmente les indices suivants. De cette faon, il est facile de remplir un tableau avec des valeurs. Le code prcdent est quivalent : $Tableau[] = 12; $Tableau[] = "CCM";
ESAT/DMSI/PROA/WGR
Page 21 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
6. Les fonctions
31. La notion de fonction
On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel (de la fonction) dans le corps du programme principal. Les fonctions permettent d'excuter dans plusieurs parties du programme une srie d'instructions sans avoir rcrire cet ensemble dinstructions, cela permet une simplicit du code et donc une taille de programme minimale. D'autre part, une fonction peut faire appel elle-mme, on parle alors de fonction rcursive (il ne faut pas oublier de mettre une condition de sortie au risque sinon de ne pas pouvoir arrter le programme...).
Le nombre d'accolades ouvertes (fonction, boucles et autres structures) doit tre gal au nombre d'accolades fermes! La mme chose s'applique pour les parenthses, les crochets ou les guillemets!
Une fois cette tape franchie, votre fonction ne s'excutera pas tant que l'on ne fait pas appel elle quelque part dans le programme!
ESAT/DMSI/PROA/WGR
Page 22 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 23 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
largument dans la dclaration de la fonction : Function carre(&$xlocal) { $xlocal = $xlocal * $xlocal ; } $x = 4 ; carre($x) ; echo $x; // affichera 16
2. Si vous voulez passer ponctuellement un argument par rfrence, vous pouvez ajouter un & devant
largument dans lappel de la fonction : Function carre($xlocal) { $xlocal = $xlocal * $xlocal ; } $x = 4 ; carre($x) ; echo $x; // affichera 4 carre(&$x) ; echo $x; // affichera 16
Exemple2 : Function connecter($type, $periph = "clavier") { return "connexion du $periph avec fiche $type ralise !\n" ; } echo connecter("USB") ; // affichera connexion du clavier avec fiche USB ralise !
La valeur par dfaut dun argument doit obligatoirement tre une constante !
ESAT/DMSI/PROA/WGR
Page 24 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Vous devez inclure la fonction include dans un bloc {} lorsque celle-ci est place dans une structure conditionnelle.
ESAT/DMSI/PROA/WGR
Page 25 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
44. is_array
Renvoie la valeur TRUE si la variable $var est un tableau, FALSE sinon. La syntaxe est la suivante : is_array($var)
45. each
La fonction each() permet de parcourir tous les lments dun tableau sans se soucier de ses bornes, ce qui en fait un outil extrmement pratique. Son fonctionnement est simple : elle retourne la combinaison indice-valeur courante du tableau pass en argument, puis se positionne sur llment suivant de ce tableau, et cela, du premier au dernier indice. Lorsque la fin du tableau est atteinte, each() retourne la valeur FALSE. Exemple : $var = array() ; $tab = array(val1,val2,val3,val4) ; $var = each($tab) ; // affectation du premier couple indice-valeur du tableau $tab $var while($var) // tant que $var est vrai { echo "$var[0] : $var[1]<br>" ; // affichage de lindice et de la valeur $var = each($tab) ; // affectation du couple indice-valeur suivant du tableau $tab $var } Rsultat : 0 : val1 1 : val2 2 : val3 3 : val4
ESAT/DMSI/PROA/WGR
Page 26 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
46. list
La fonction list() est trs souvent associe la fonction each(). Elle permet daffecter les lments dun tableau des variables distinctes. En reprenant lexemple prcdent, on pourra utiliser list() de la manire suivante : $tab = array(val1,val2,val3,val4) ; while( list($indice, $valeur) = each($tab) ) // tant que la fonction each() renvoie une valeur non nulle (vraie) { echo "$indice : $valeur <br>" ; // affichage de chaque couple indice et valeur } Nous obtenons le mme rsultat que prcdemment. Le tableau $var est remplac par deux variables distinctes.
Les utilisations les plus pertinentes de la fonction interviennent notamment lors de requtes effectues sur des bases de donnes relationnelles qui renvoient les informations sous forme de tableaux. Dans les applications Intranet/Internet, il est courant de devoir construire des pages qui comportent un nombre indtermin de champs de saisie, comme une page de saisie doptions. La solution est dutiliser des champs de type text qui portent le mme nom. PHP va automatiquement crer un tableau dans la page cible, pour lequel les fonctions list() et each() sont particulirement adaptes. Exemple : <FORM action = formul1.php3 method = POST> <table> <tr> <td>Valeur 1 : </td> <td><input type = text length = 10 name = tabval[] /></td> </tr> <tr> <td>Valeur 2 : </td> <td><input type = text length = 10 name = tabval[] /></td> </tr> <tr> <td>Valeur 3 : </td> <td><input type = text length = 10 name = tabval[] /></td> </tr> <tr> <td>Valeur 4 : </td> <td><input type = text length = 10 name = tabval[] /></td> </tr> <tr> <td colspan = 2 align = center>< input type = submit value = Valider></td> </tr> </table>
</FORM>
Dans le formulaire formul1.php3, la srie de valeurs est reue sous forme dun tableau portant le nom du champ texte. Il ne reste plus qu le parcourir de la faon suivante : while( list($indice, $valeur) = each($tabval) ) // tant que la fonction each() renvoie une valeur non nulle { echo "$indice : $valeur <br>" ; // affichage de chaque couple indice et valeur }
ESAT/DMSI/PROA/WGR
Page 27 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
47. count
count($var) retourne le nombre d'lments dans var, qui est gnralement un tableau (et tout le reste n'aura qu'un lment). Retourne 1 si la variable n'est pas un tableau. Retourne 0 si la variable n'est pas cre, mais il peu aussi retourner 0 pour un tableau vide. Utilisez plutt la commande isset() pour savoir si une variable existe ou pas.
48. sizeof
sizeof($tab) retourne galement le nombre d'lments du tableau $tab.
49. current
Chaque tableau entretien un pointeur interne, qui est initialis lorsque le premier lment est insr dans le tableau. La fonction current($tab) ne fait que retourner l'lment courant point par le pointeur interne. current() ne dplace pas le pointeur. Si le pointeur est au-del du dernier lment de la liste, current() retourne faux. Si le tableau contient des lments vides ou des zros (0 ou "", la chane vide) alors cette fonction retournera false pour ces lments. Il est donc impossible de dterminer si vous tes rellement la fin de la liste en utilisant la fonction current(). Pour passer en revue proprement un tableau qui peut contenir des lments vides ou des zros, utilisez la fonction each().
50. pos
pos($tab) retourne l'lment courant du tableau $tab. Cest un alias de current().
51. next
next($tab) retourne l'lment suivant du tableau $tab, ou false sil n'y a plus d'lment. Le pointeur interne du tableau est avanc d'un lment. next() se comporte comme current(), mais avec une diffrence : Il avance le pointeur interne de tableau d'un lment avant de retourner la valeur sur lequel il pointe. Lorsque le pointeur dpasse le dernier lment, next() retourne false. Si le tableau contient des lments vides ou des zros, cette fonction retournera false pour ces lments. Pour passer proprement en revue un tableau, il faut utiliser each().
52. prev
prev($tab) repositionne le pointeur interne du tableau $tab la dernire place qu'il occupait et retourne llment, ou bien retourne faux sil ne reste plus d'lment. Si le tableau contient des lments vides, cette fonction retournera faux pour ces lments aussi. Pour passer en revue tous les lments, utilisez plutt each(). prev() se comporte exactement comme next(), mais il fait reculer le pointeur plutt que de l'avancer.
53. reset
reset($tab) replace le pointeur du tableau $tab au premier lment. reset() retourne la valeur du premier lment.
ESAT/DMSI/PROA/WGR
Page 28 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
54. end
end($tab) dplace le pointeur interne du tableau $tab jusqu'au dernier lment. end() retourne la valeur du dernier lment.
55. key
key($tab) retourne lindice courant du pointeur interne du tableau $tab. Exemple : <? $tab = array('val1','val2','val3','val4'); echo "premier = ".reset($tab)." indice = ".key($tab)."<br>"; echo "dernier = ".end($tab)." indice = ".key($tab)."<br>"; ?> Rsultat : premier = val1 indice = 0 dernier = val4 indice = 3
56. sort
sort($tab) trie les lments du tableau $tab du plus petit au plus grand Exemple : <html> <head> <title>Page d'essai PHP</title> </head> <body> <? echo "<form method='post' action='#'>"; $tab_fruits = array("papaye","orange","banane","ananas"); // tri du tableau en ordre croissant sort($tab_fruits); // affichage du tableau tri for($key = 0; $key < sizeof($tab_fruits); $key++) { echo "tab_fruits[$key] = ".$tab_fruits[$key]."<br>"; } echo "</form>"; ?> </body> </html> Cet exemple va afficher : tab_fruits[0] = ananas tab_fruits[1] = banane tab_fruits[2] = orange tab_fruits[3] = papaye Les fruits ont t classs dans l'ordre alphabtique.
ESAT/DMSI/PROA/WGR
Page 29 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
57. asort
La fonction asort($tab) trie le tableau $tab en ordre croissant et de telle manire que la corrlation entre les indices et les valeurs soit conserve. L'usage principal est lors de tri de tableaux associatifs o l'ordre des lments est important. Exemple : $tab_fruits = array("d"=>"papaye","a"=>"orange","b"=>"banane","c"=>"ananas"); // tri du tableau en ordre croissant asort($tab_fruits); // affichage du tableau tri for($key = 0, reset($tab_fruits); $key < sizeof($tab_fruits); $key++, next($tab_fruits)) { $indice = key($tab_fruits); echo "tab_fruits[$indice] = ".$tab_fruits[$indice]."<br>"; } Cet exemple va afficher : tab_fruits[c] = ananas tab_fruits[b] = banane tab_fruits[a] = orange tab_fruits[d] = papaye Les fruits ont t classs dans l'ordre alphabtique et leur indice respectif a t conserv.
58. arsort
La fonction arsort($tab) trie le tableau $tab en ordre dcroissant et de telle manire que la corrlation entre les indices et les valeurs soit conserve. L'usage principal est lors de tri de tableaux associatifs o l'ordre des lments est important. Exemple : $tab_fruits = array ("a"=>"orange","c"=>"ananas","b"=>"banane","d"=>"papaye" ); // tri du tableau en ordre dcroissant arsort($tab_fruits); // affichage du tableau tri for($key = 0, reset($tab_fruits); $key < sizeof($tab_fruits); $key++, next($tab_fruits)) { $indice = key($tab_fruits); echo "tab_fruits[$indice] = ".$tab_fruits[$indice]."<br>"; } Cet exemple va afficher : tab_fruits[d] = papaye tab_fruits[a] = orange tab_fruits[b] = banane tab_fruits[c] = ananas Les fruits ont t classs dans l'ordre alphabtique inverse et leur indice respectif a t conserv.
ESAT/DMSI/PROA/WGR
Page 30 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
59. rsort
La fonction rsort($tab) trie le tableau $tab en ordre dcroissant mais ne conserve pas la corrlation entre les indices et les valeurs. Laffichage du tableau $tab_fruits de lexemple prcdent et tri laide de la fonction rsort($tab_fruits) donnerait : tab_fruits[0] = papaye tab_fruits[1] = orange tab_fruits[2] = banane tab_fruits[3] = ananas
60. ksort
La fonction ksort($tab) trie le tableau $tab en ordre croissant sur les indices et conserve la corrlation entre les indices et les valeurs. Laffichage du tableau $tab_fruits de lexemple prcdent et tri laide de la fonction ksort($tab_fruits) donnerait: tab_fruits[a] = orange tab_fruits[b] = banane tab_fruits[c] = ananas tab_fruits[d] = papaye
ESAT/DMSI/PROA/WGR
Page 31 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 32 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
62. extract
void extract(array var_array, int extract_type , string prefix ) Cette fonction sert exporter un tableau vers la table des symboles. Elle prend un tableau associatif var_array et cre les variables dont les noms sont les indices de ce tableau, et leur affecte la valeur associe. Pour chaque paire indice/valeur, cette fonction cre une variable, avec les paramtres extract_type et prefix. extract() vrifie l'existence de la variable avant de la crer. La manire de traiter les collisions est dtermine par extract_type. Ce paramtre peut prendre une des valeurs suivantes : EXTR_OVERWRITE : Lors d'une collision, rcrire la variable existante. EXTR_SKIP : Lors d'une collision, ne pas rcrire la variable existante EXTR_PREFIX_SAME : Lors d'une collision, ajouter le prfixe prefix, et crer une nouvelle variable. EXTR_PREFIX_ALL : Ajouter le prfixe prefix, et crer une nouvelle variable. Si extract_type est omis, extract() utilise EXTR_OVERWRITE par dfaut. Notez que prefix n'est ncessaire que pour les valeurs de extract_type suivantes : EXTR_PREFIX_SAME et EXTR_PREFIX_ALL. extract() vrifie que les indices constituent un nom de variable valide, et si c'est le cas, procde son exportation. Exemple : <php? $taille = "grand"; $var_array = array( "couleur" => "bleu", "taille" => "moyen", "forme" => "sphere"); extract($var_array, EXTR_PREFIX_SAME, "wddx"); echo "$couleur, $taille, $forme, $wddx_taille<br>"; ?> L'exemple ci dessus va afficher : bleu, grand, sphere, moyen La variable $taille n'a pas t rcrite, car on avait spcifi le paramtre EXTR_PREFIX_SAME, qui a permis la cration $wddx_taille. Si EXTR_SKIP avait t utilis, alors $wddx_taille n'aurait pas t cr. Avec EXTR_OVERWRITE, $taille aurait pris la valeur "moyen", et avec EXTR_PREFIX_ALL, les variables cres seraient $wddx_couleur, $wddx_taille, et $wddx_forme.
63. range
La fonction range(int low, int high) retourne un tableau contenant tous les entiers depuis low jusqu' high, inclus. Exemple : $tab = array(); $tab = range(0,10); for( $i = 0 ; $i < sizeof($tab) ; $i++) echo "$tab[$i] "; Cet exemple affichera : 0 1 2 3 4 5 6 7 8 9 10
ESAT/DMSI/PROA/WGR
Page 33 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
64. shuffle
La fonction shuffle($tab) mlange les lments du tableau $tab. Exemple : $tab = array(); $tab = range(0,10); shuffle($tab) ; for( $i = 0 ; $i < sizeof($tab) ; $i++) echo "$tab[$i] "; Cet exemple affichera de faon alatoire : 6 1 0 5 9 8 7 3 10 4 2
65. compact
compact() accepte diffrents paramtres. Les paramtres peuvent tre des variables contenant des chanes, ou un tableau de chanes, qui peut contenir d'autres tableaux de noms, que compact() traitera rcursivement. Pour chacun des arguments, compact() recherche une variable avec une variable de mme nom dans la table courante des symboles, et l'ajoute dans le tableau, de manire avoir la relation nom => 'valeur de variable'. En bref, c'est le contraire de la fonction extract(). compact() retourne le tableau ainsi cr. Exemple : $ville = "San Francisco"; $etat = "CA"; $evenement = "SIGGRAPH"; $location_vars = array("ville", "etat"); $result = compact("evenement", $location_vars); for( $i = 0, reset($result) ; $i < sizeof($result) ; $i++, next($result)) { $indice = key($result); echo "$indice => $result[$indice]<br>"; } Aprs cette opration, $result sera le tableau suivant : evenement => SIGGRAPH ville => San Francisco etat => CA
ESAT/DMSI/PROA/WGR
Page 34 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 35 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 36 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
string join(string glue, array tab): Regroupe tous les lments du tableau tab dans une chane, avec la chane de jointure glue. Join() est un alias de implode(). string ltrim(string str) : Enlve les caractres blancs du dbut de la chane str et retourne la chane nettoye. Les caractres blancs sont : "\n", "\r", "\t", "\v", "\0", et " " (espace). string md5(string str) : Crypte la chane str en utilisant la mthode MD5. string nl2br(string str) : Convertit les retours la ligne \nen balise HTML <BR>. int ord(string str) : Retourne la valeur ASCII du premier caractre de la chane str. void parse_str(string str) : Analyse la chane str comme si ctait une chane passe par URL, et affecte les variables quelle y trouve. int printf(string format, [mixed args]...) : Affiche une chane formate string quoted_printable_decode(string str) : Convertit la chane str contenant des slash en une chane sans slash . string quotemeta(string str) : Ajoute un backslash devant tous les caractres mta suivants . \ + * ? [ ^ ] ( $ ) string rawurldecode(string str) : Dcode la chane URL str. string rawurlencode(string str) : Encode la chane str en chane URL, selon la RFC1738. string setlocale(string category, string locale) : Change les informations locales. int similar_text(string first, string second, [double percent]) : Calcule la similarit des deux chanes first et second. En passant une rfrence comme troisime argument, similar_text() va calculer le pourcentage de similarit. Il retourne le nombre de caractres correspondant lun lautre, dune chane lautre. string soundex(string str) : Calcule la valeur soundex de la chane str. Une valeur Soundex est telle que deux mots prononcs de la mme faon auront des valeurs Soundex identiques, et cela permet deffectuer des recherches dans les bases de donnes, mme si vous connaissez la prononciation, mais pas lorthographe. Cette fonction retourne une chane de 4 caractres, commenant par une lettre. string sprintf(string format, [mixed args]...) : Retourne une chane formate. Sprintf() fonctionne comme printf(), mais la chane formate est retourne au lieu dtre affiche. string strchr(string str, string needle) : Retourne toute la chane str partir de la premire occurrence de needle, jusqu' la fin. Cette fonction est un alias de la fonction strstr(). int strcmp(string str1, string str2) : Comparaison des deux chanes str1 et str2 sensible la casse. Retourne < 0 si str1 est plus petite que str2; > 0 si str1 est plus grande que str2, et 0 si elles sont gales. int strcspn(string str, string mask) : Retourne la longueur du premier segment de la chane str qui ne corresponde aucun des caractres de la chane mask. string strip_tags(string str, [string allowable_tags]) : Enlve les balises HTML et PHP de la chane str. Cela empche les utilisateurs malicieux de planter vos scripts lorsque le navigateur affiche les donnes saisies par les utilisateurs. En cas de balises non fermes, ou de balises mal formes, elle gnre une erreur. Vous pouvez utiliser l'option allowable_tags pour spcifier les balises qui seront ignores. string stripslashes(string str) : Enlve les slash ajouts par la fonction addslashes(), les doubles backslashes sont remplacs par des simples. int strlen(string str) : Retourne la longueur de la chane str.
ESAT/DMSI/PROA/WGR
Page 37 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
int strpos(string str, string needle, [int offset]) : Retourne la position numrique de la premire occurrence de needle dans la chane str. L'option offset vous permet de spcifier le caractre de dbut de recherche dans str. Cette position est toujours relative au dbut de la chane. string strrchr(string str, string needle) : Cette fonction retourne la partie de la chane str qui commence la dernire occurrence de needle et va jusqu' la fin de la chane str. string strrev(string str) : Retourne la chane str inverse. int strrpos(string str, char needle) : Retourne la position numrique de la dernire occurrence du caractre needle dans la chane str. int strspn(string str, string mask) : Retourne la longueur du premier segment de la chane str qui corresponde au masque donn mask. string strstr(string str, string needle) : Retourne la chane str partir de la premire occurrence de needle, jusqu' la fin. string strtok(string str, string delimit) : Morcelle la chane str grce au dlimiteur delimit. Notez que seul le premier appel strtok() ncessite les deux arguments. Tous les appels ultrieurs strtok() ne ncessite que le dlimiteur delimit. Pour initialiser nouveau strtok(), ou pour recommencer, fournissez nouveau le paramtre str. La chane str sera dcoupe ds que l'un des caractres de delimit est trouv. Exemple : <? echo "<pre>"; $chaine = "Ceci est un exemple\ninteressant"; // les sparateurs sont : lespace, la tabulation et le \n echo "$chaine<br>----- la mme chaine, mais morcele ------<br>"; $tok = strtok($chaine," \n "); Rsultat laffichage : while ($tok) { echo "Mot = $tok<br>"; $tok = strtok(" \n "); } echo "</pre>"; ?> string strtolower(string str) : Retourne la chane str avec tous les caractres alphabtiques en minuscule. string strtoupper (string str) : Retourne la chane str avec tous les caractres alphabtiques en majuscule. string str_replace(string needle, string replace, string str) : Remplace toutes les occurrences de needle dans str par la chane replace. Cette fonction est identique la fonction ereg_replace(). string strtr(string str, string from, string to) : Cette fonction travaille sur str, remplaant chaque occurrence de chaque caractre de la chane from correspondant la chane to et retourne le rsultat. string substr(string str, int start, [int length]) : Retourne une portion de la chane str spcifie avec le dbut start et la longueur length facultative. string substr_replace(string str, string replace, int start, [int length]) : Fonctionne exactement comme substr() et permet de remplacer la sous-chane extraite par la sous-chane replace. string trim(string str) : Enlve les caractres blancs de dbut et de fin de la chane str et retourne la chane nettoye. Les caractres blancs sont : "\n", "\r", "\t", "\v", "\0", et " " (espace). string ucfirst(string str) : Met le premier caractre de la chane str en majuscule, si ce caractre est alphabtique. La chane modifie est retourne. string ucwords(string str) : Met le premier caractre de chaque mot de la chane str en majuscule si ce caractre est alphabtique. La chane modifie est retourne.
ESAT/DMSI/PROA/WGR
Page 38 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
69.1. addslashes
Retourne une chane avec un backslash devant chaque caractre qui en a besoin pour tre insr dans une requte de base de donnes. Ces caractres sont guillemets simples ('), guillemets doubles ("), backslash (\) et NUL (loctet nul). Dans lexemple suivant, la balise HTML input vous permet de saisir le nom dun organisme (ex : Ecole Suprieure et dApplication des Transmissions), celui-ci sera stock dans la variable PHP nomme $organisme : <input type = text size = 50 name = organisme> La variable $organisme contient dans cet exemple un guillemet simple qui marque, comme un guillemet double, le dbut et la fin dune chane de caractres. Lorsque cette chane sera interprte, le guillemet simple sera considr comme marqueur de fin de chane, la partie de la chane qui suit ce marqueur (Application des Transmissions) ne sera donc pas pris en compte. Pour viter cela, il faut utiliser addslashes toutes les variables chanes de caractres qui sont susceptibles de contenir un des caractres mentionns ci-dessus : $organisme = addslashes($organisme) ; // $organisme contient dsormais "Ecole Suprieure et d\Application des Transmissions"
Si vous faites appel 2 fois conscutivement la fonction addslashes sur une mme variable, les caractres ncessitant le masquage par un backslash seront prcds de 2 backslashes.
69.2. chr
Retourne le caractre correspondant au code ASCII pass en argument. Syntaxe : string chr(int code_ascii) ; Exemple : $str .= chr(13); // ajoute un retour chariot la fin de la chane $str
69.3. crypt
crypt() va coder une chane en utilisant la mthode de cryptage du DES standard. Syntaxe : string crypt(string str, [string salt]); Les arguments sont : la chane crypter, et un grain de sel qui servira de base pour le cryptage. Si le grain de sel nest pas fourni, il sera automatiquement gnr par PHP. Certains systmes dexploitation acceptent plus dun type de cryptage. En fait, le DES standard est parfois remplac par un cryptage MD5. Le type de cryptage est alors choisi en fonction du grain de sel. A linstallation, PHP dtermine les possibilits de cryptage et dcidera daccepter dautres grains de sel pour dautres types de cryptage. Si le grain de sel nest pas fourni, PHP gnrera alors un grain de 2 caractres, pour le DES standard, moins que le systme ne dispose de MD5 : dans ce cas, PHP gnrera un grain de sel pour MD5, par dfaut. PHP affecte la variable denvironnement CRYPT_SALT_LENGTH 2 sil utilise le DES standard, et 12 sil utilise le MD5. Le cryptage standard fournit le grain de sel dans les deux premiers octets du rsultat de la fonction crypt(). Sur les systmes qui supportent plusieurs mthodes de cryptage, les variables denvironnement suivantes sont mises 0 ou 1, en fonction de la disponibilit de la mthode : CRYPT_STD_DES : DES standard avec 2 octets de SALT CRYPT_EXT_DES : DES tendu avec 9 octets de SALT CRYPT_MD5 : MD5 avec 12 octets de SALT commenant $1$ CRYPT_BLOWFISH : DES tendu avec 16 octets de SALT commenant $2$
ESAT/DMSI/PROA/WGR
Page 39 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
69.4. ereg
Recherche dans la chane str les squences de caractres qui correspondent au masque donn mask. Syntaxe : int ereg(string mask, string str, [array regs]); Si au moins une squence est trouve (ventuellement dans les parenthses de mask), et que la fonction est appele avec un troisime argument regs, les rsultats seront enregistrs dans regs. $regs[0] contient une copie de la chane str. $regs[1] contiendra la capture dsigne par la premire parenthse. $regs[2] contiendra la capture dsigne par la deuxime parenthse, et ainsi de suite. La recherche est sensible la casse. ereg() retourne TRUE si une occurrence a t trouve dans la chane, et FALSE dans le cas contraire, ou si une erreur est survenue. Exemple : $date = "2002-09-18"; // date sous forme 'anne-mois-jour' if ( ereg( "([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs ) ) // [0-9]{4} signifie les chiffres de 0 9 sur une longueur de 4 // [0-9]{1,2} signifie les chiffres de 0 9 sur une longueur de 1 ou 2 { echo "$regs[0]<br>"; echo "$regs[3].$regs[2].$regs[1]"; //affichage de la date sous forme 'jour.mois.anne' } else echo "Format de date invalide : $date"; Rsultat laffichage : 2002-09-18 18.09.2002
69.5. ereg_replace
Remplace toutes les occurrences de needle dans str par la chane replace. Syntaxe : string ereg_replace(string needle, string replace, string str); Si aucune occurrence n'est trouve, la chane str sera retourne intacte. Exemple : $chaine = "ceci est une chane exemple<br>voici ci dmonstration d'un rempcicement"; echo ereg_replace("ci","la",$chaine); Rsultat laffichage : cela est une chane exemple voila la dmonstration d'un remplacement
69.6. explode
Retourne un tableau qui contient les lments de la chane, spars par un sparateur. Syntaxe : array explode(string separator, string chaine); Exemple : $adresse_internet = "prenom.nom@nom_de_domaine"; $tab = explode (@,$adresse_internet) ; echo $tab[0] ; // affichera prenom.nom echo $tab[1] ; // affichera nom_de_domaine
ESAT/DMSI/PROA/WGR
Page 40 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
69.7. implode
Regroupe tous les lments du tableau tab dans une chane, avec la chane de jointure glue. Syntaxe : string implode(string glue, array tab); Exemple : $tab = array("un","deux","trois","quatre"); $chaine = implode(" ; ",$tab); echo $chaine ; // affichera : un ; deux ; trois ; quatre
69.8. nl2br
Convertit les retours la ligne \nen balise HTML <BR>. Syntaxe : string nl2br(string str) ; Exemple : $chaine = "premire ligne\ndeuxime ligne"; echo $chaine ; // affichera premire ligne deuxime ligne echo nl2br($chaine) ; /* affichera : premire ligne deuxime ligne */
69.9. ord
Retourne la valeur ASCII du premier caractre de la chane str. Syntaxe : int ord(string str); Exemple : $chaine = "0123456" ; echo ord($chaine) ;
// affichera 48
69.10. parse_str
Analyse la chane str comme si ctait une chane passe par URL, et affecte les variables quelle y trouve. Syntaxe : void parse_str(string str); Exemple : $str = "premier=valeur&second[]=Ceci+fonctionne&second[]=aussi"; parse_str($str); echo $premier; // affichera valeur echo $second[0]; // affichera Ceci fonctionne echo $second[1]; // affichera aussi
ESAT/DMSI/PROA/WGR
Page 41 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
69.11. printf
Affiche les arguments en fonction du format. Syntaxe : printf(string format, [mixed arguments]...); La chane de format est compose de 0 ou plusieurs directives : ce sont gnralement des caractres qui sont recopis tels quel (hormis %), et des spcifications de conversion, chacune delles disposant de son propre argument. Chaque spcification de conversion dbute avec le symbole % et comprend, dans l'ordre: 1.Une option de remplissage, qui indique quel caractre sera utilis pour le remplissage, et la taille finale de la chane. Le caractre de remplissage peut tre un espace ou le caractre zro (0).). La valeur par dfaut est l'espace. Une autre valeur peut tre spcifie en la prfixant par un guillemet simple ('). Voir les exemples plus loin. 2.Un argument optionnel alignment specifier qui indique que le rsultat doit tre justifi droite ou gauche. Par dfaut, il est justifi gauche. Le caractre - signifie : justification droite. 3.Argument optionnel, width specifier indique le nombre minimum de caractres que la conversion devrait retourner. 4.Argument optionnel, precision specifier indique le nombre de chiffres utiliss pour afficher un nombre virgule flottante. Cette option n'a d'effet que sur les nombres virgule, type double. (Une autre fonction pratique pour formater les nombres est : number_format().) 5.type specifier indique le type de donnes passes en argument : Les types possibles sont : % - un signe pourcentage : aucun argument ncessaire. b - l'argument est trait comme un entier, et reprsent comme un nombre binaire. c - l'argument est trait comme un entier, et reprsent comme un nombre ascii. d - l'argument est trait comme un entier, et reprsent comme un nombre dcimal. f - l'argument est trait comme un double, et reprsent comme un nombre virgule flottante. o - l'argument est trait comme un entier, et reprsent comme un nombre octal. s - l'argument est trait tel quel, et reprsent comme une chane. x - l'argument est trait comme un entier, et reprsent comme un nombre hexadcimal (en minuscule). X - l'argument est trait comme un entier, et reprsent comme un nombre hexadcimal (en majuscule). Exemples : Entiers : $i = 12 Format printf("i = %d",$i); printf("i = %-5d",$i); printf("i = %5d",$i); printf("i = %05d",$i); printf("i = %o",$i); printf("i = %u",$i); printf("i = %x",$i); printf("i = %X",$i); (b/ reprsente un espace) Affichage i = 12 i = 12b/b/b/ i = b/b/b/12 i = 00012 i = 14 i = 12 i=c i=C
ESAT/DMSI/PROA/WGR
Page 42 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
$i = -12 Format printf("i = %d",$i); printf("i = %o",$i); printf("i = %u",$i); printf("i = %x",$i); printf("i = %X",$i); Rels : $i = 1.414 Format printf("i = %f",$i); printf("i = %3.2f",$i); printf("i = %3f",$i); printf("i = %.2f",$i); printf("i = %e",$i); printf("i = %E",$i); printf("i = %g",$i); Caractres : $i = 'A' Affichage i=A i = b/b/A i = Ab/b/ i = 41 Affichage i = 1.414000 i = 1.41 i = 1.414000 i = 1.41 i = 1.41400e+00 i = 1.41400E+00 i = 1.414 Affichage i = -12 i = 177764 i = 65524 i = fff4 i = FFF4
Divers : printf("carre de a = %d",$a*$a); printf("le rsultat de fonction1 = %d",fonction1(10)); printf("a>b renvoie %d",$a>$b); Pour afficher un backslash '\' ou des guillemets '"', il faut les masquer par un backslash. Exemple: printf("ce caractre '\\' est un \"backslash\"\n"); // affichera : ce caractre '\' est un "backslash" Pour afficher un pourcent '%' dans une chaine format contenant au moins un format il faut le masquer par un pourcent '%'.
ESAT/DMSI/PROA/WGR
Page 43 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
69.12. rawurldecode
Retourne une chane dont les squences de caractres %xy, avec xy deux valeurs hexadcimales, auront t remplaces par le caractre ascii correspondant. Syntaxe : string rawurldecode(string str); Exemple : $chaine = "adresse%20Internet%20%3A%20nom.prenom%40nom_de_domaine"; echo rawurldecode($chaine) ; // affichera adresse Internet : nom.prenom@nom_de_domaine
69.13. rawurlencode
Retourne une chane dont tous les caractres non-alpha-numriques (hormis et _.) auront t remplacs par des squences %xy, avec xy deux valeurs hexadcimales. Ce codage est conforme la RFC1738 qui vite que les caractres spciaux soient interprts comme des dlimiteurs. Cette fonction est pratique pour transmettre des informations via une URL. C'est aussi un moyen de passer des informations d'une page l'autre. Syntaxe : string rawurlencode(string str); Exemple : $chaine = "adresse Internet : nom.prenom@nom_de_domaine"; echo rawurlencode($chaine) ; // affichera adresse%20Internet%20%3A%20nom.prenom%40nom_de_domaine
69.14. strchr
Retourne toute la chane str partir de la premire occurrence de needle, jusqu' la fin. Cette fonction est un alias de la fonction strstr(). Syntaxe : string strchr(string str, string needle); Exemple : $chaine = "adresse Internet : nom.prenom@nom_de_domaine"; echo "Email ".strchr($chaine,":")."<br>"; // affichera Email : nom.prenom@nom_de_domaine
69.15. strcspn
Retourne la longueur du premier segment de la chane str qui ne corresponde aucun des caractres de la chane masque. Syntaxe : int strcspn(string str, string masque); Exemple : $chaine = "adresse Internet : nom.prenom@nom_de_domaine"; echo strcspn($chaine,":")."<br>"; // affichera 17
ESAT/DMSI/PROA/WGR
Page 44 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
69.16. strip_tags
Enlve les balises HTML et PHP de la chane str. En cas de balises non fermes, ou de balises mal formes, elle gnre une erreur. Vous pouvez utiliser l'option allowable_tags pour spcifier les balises qui seront ignores. Syntaxe : string strip_tags(string str, [string allowable_tags]); Exemple : $chaine = "adresse Internet : nom.prenom@nom_de_domaine<br>"; echo $chaine; echo strip_tags($chaine); echo "----<br>"; echo strip_tags($chaine,"<br>"); // enlve les balises HTML et PHP sauf la balise <br> echo "----"; Rsultat laffichage : adresse Internet : nom.prenom@nom_de_domaine adresse Internet : nom.prenom@nom_de_domaine---adresse Internet : nom.prenom@nom_de_domaine ----
69.17. strpos
Retourne la position numrique de la premire occurrence du caractre needle dans la chane str. Syntaxe : int strpos(string str, char needle, [int offset]) ; Contrairement la fonction strrpos(), cette fonction peut prendre une chane complte comme paramtre. Si needle n'est pas trouv, elle retourne faux (false). L'option offset vous permet de spcifier le caractre de dbut de recherche dans str . Cette position est toujours relative au dbut de la chane. Exemple : $chaine = "nom.prenom@nom_de_domaine<br>"; echo strpos($chaine,"nom",3); // affichera 7
69.18. strrchr
Cette fonction retourne la partie de la chane str qui commence la dernire occurrence de needle et va jusqu' la fin de la chane str. Syntaxe : string strrchr(string str, char needle); La fonction retourne faux (false) si needle n'est pas trouv. Si needle contient plus d'un caractre, les autres sont ignors. Exemple : $chaine = "nom.prenom@nom_de_domaine<br>"; echo strrchr($chaine,"@"); // affichera @nom_de_domaine
69.19. strrpos
Retourne la position numrique de la dernire occurrence du caractre needle dans la chane str. Syntaxe : int strrpos(string str, char needle) ; Cette fonction ne peut accepter qu'un seul caractre. Si needle n'est pas trouv, elle retourne faux (false). Exemple : $chaine = "nom.prenom@nom_de_domaine<br>"; echo strrpos($chaine,'o'); // affichera 19
ESAT/DMSI/PROA/WGR Page 45 sur137 jj/10/OO
Cours Programmation
Langage PHP
php.doc
69.20. strspn
Retourne la longueur du premier segment de chane qui corresponde au masque donn. Syntaxe : int strspn(string str, string masque); Exemple : $chaine = "nom.prenom@nom_de_domaine<br>"; echo strspn($chaine,"nom_"); // affichera 3
69.21. strstr
Retourne la chane str partir de la premire occurrence de needle, jusqu' la fin. Syntaxe : string strstr(string str, string needle); Si needle n'est pas trouv, la fonction retourne faux (FALSE). Exemple : $chaine = "nom.prenom@nom_de_domaine<br>"; echo strstr($chaine,"nom_"); // affichera nom_de_domaine
69.22. strtok
Morcelle la chane str grce au dlimiteur delimit. Syntaxe : string strtok(string str, string delimit); Seul le premier appel strtok() utilise l'argument chane str. Aprs, chaque appel strtok() ne requiert que le dlimiteur utiliser. Pour recommencer un morcellement, vous devez appeler strtok() avec un nouvel argument str et un dlimiteur. strtok() accepte des dlimiteurs multiples. La chane sera morcele ds qu'elle rencontrera un des dlimiteurs.
Exemple : $chaine = "ceci est une chane exemple"; $tok = strtok($chaine," "); while($tok) { echo "mot = $tok<br>"; $tok = strtok(" "); } Rsultat laffichage : mot = ceci mot = est mot = une mot = chane mot = exemple
ESAT/DMSI/PROA/WGR
Page 46 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
69.23. strtr
Cette fonction travaille sur str, remplaant chaque occurrence de chaque caractre de la chane from correspondant la chane to et retourne le rsultat. Syntaxe : string strtr(string str, string from, string to); Si from et to sont de longueur diffrentes, les caractres en trop sont ignors. Exemple : $chaine = "Loc fte son anniversaire au chteau o rgna fantmeI. " ; echo strtr($chaine, "", "aaaeeeiiou"); Rsultat laffichage : Loic fete son anniversaire au chateau ou regna fantomeI. Depuis PHP4, strtr() peut aussi tre appele avec deux arguments. Dans ce cas, elle se comporte diffremment : from doit tre un tableau associatif contenant des paires de chanes, qui seront remplaces dans la chane source. strtr() recherchera toujours la chane la plus longue, et la remplacera en premier. Elle ne remplacera jamais une portion de chane qu'elle dj remplace.
69.24. substr
Retourne une portion de la chane str spcifie avec le dbut start et la longueur length facultative. Syntaxe : string substr(string str, int start, [int length]); Si start est positif, la chane retourne commencera au caractre start de la chane str. Le dbut de la chane est obtenu avec start = 0. Exemple : $rest = substr("abcdef", 1); // retourne "bcdef" Si start est ngatif, la chane retourne commencera au caractre start de la chane str, en partant de la fin. Exemples : $rest = substr("abcdef", -1); $rest = substr("abcdef", -2); // retourne "f" // retourne "ef"
Si length est donn, et positif, la chane retourne aura la longueur length. Exemples : $rest = substr("abcdef", 1, 3); // retourne "bcd" $rest = substr("abcdef", -3, 1); // retourne "d" Si length est donn, et ngatif, la chane retourne aura la longueur de la chane partir de start et jusqu length caractres de la fin de la chane. Exemple : $rest = substr("abcdef", 1, -1); // retourne "bcde"
69.25. substr_replace
Fonctionne exactement comme substr() et permet de remplacer la sous-chane extraite par la sous-chane replace. Syntaxe : string substr_replace(string str, string replace, int start, [int length]); Exemple : $num_adherent = "0001" ; $chaine = "ESAT0000CSA" ; echo substr_replace($chaine,$num_adherent,4,4) ;
// affichera ESAT0001CSA
ESAT/DMSI/PROA/WGR
Page 47 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
71.1. time
time() retourne lentier long qui reprsente la date courante. Exemple : echo time() ; // affichera 1032784180 le 23 septembre 2002 14H29 et quelques secondes
71.2. mktime
mktime() retourne lentier long qui correspond une date donne passe en paramtre sous la forme : heures,minutes,secondes,mois,jour,anne[, heure dt (0) dhiver (1) inconnu (-1)]. Si lheure na pas dimportance, vous pouvez passer la valeur 0 pour chacun des trois premiers paramtres. Si vous ne passez aucun paramtre, la fonction renvoie lhorodatage Unix correspondant la date et lheure courantes. Exemple : echo mktime(14,30,0,9,23,2002) ; // affichera 1032784200
71.3. gmmktime
gmmktime() est semblable mktime(), mais retourne lentier qui correspond lheure GMT.
71.4. checkdate
checkdate() retourne un boolen qui indique si la date passe en paramtre sous la forme mois,jour,anne est valide ou non. Les annes bissextiles sont prises en compte. Ainsi on pourra facilement gnrer un calendrier perptuel laide de cette fonction. Exemple : checkdate(2,29,1999) ; // retournera faux car 1999 nest pas bissextile checkdate(2,29,2000) ; // retournera vrai car 2000 est bissextile
ESAT/DMSI/PROA/WGR
Page 48 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
72.1. date
date() convertit une date du format horodatage Unix (entier long) vers un format lisible. Elle retourne une chane de caractres mise en forme reprsentant une date. Si lhorodatage Unix (entier long) est omis, la date renvoye est la date du jour. Syntaxe : string date(format,[ horodatage Unix]) ; Vous pouvez contrler de faon prcise la chane renvoye par date() laide dun argument chane (le format) que vous devez lui transmettre. La chane format est compose de codes et dautres donnes qui seront recopies dans le rsultat renvoy (ces donnes servent principalement de sparateurs). La liste des codes pouvant tre contenus dans une chane format est la suivante : Code format a A d D F g G h H i I j l L m M n s t T U w y Y z Z Description du rsultat restitu "am" ou "pm" en minuscules "AM" ou "PM" en majuscules jour dans le mois prcd dun zro (01-31) jour de la semaine en trois lettres nom du mois de lanne heure (sur 12 heures non prcde dun zro) heure (sur 24 heures non prcde dun zro) heure (sur 12 heures prcde dun zro) heure (sur 24 heures prcde dun zro) minutesprcdes dun zro (00-59) boolen (1 si lheure dhiver est active, 0 sinon) jour dans le mois non prcd dun zro (1-31) jour de la semaine anne bissextile (1 pour vrai, 0 pour faux) mois de lanne prcd dun zro (01-12) mois de lanne en trois lettres mois de lanne non prcd dun zro (1-12) secondes prcdes dun zro (00-59) nombre de jours dans le mois donn (28-31) fuseau horaire du serveur horodatage Unix (entier long) jour de la semaine (0 pour dimanche 6 pour samedi) anne sur deux chiffres anne sur quatre chiffres jour de lanne (quantime) temps en secondes coul depuis GMT (dcalage horaire 43200 - 43200) Exemple restitu pm PM 09 Mon September 3 15 03 15 05 1 9 Monday 0 09 Sep 9 07 30 Paris, Madrid 1032790097 1 02 2002 251 7200
Lorsque des dates doivent tre communiques de PHP vers MySQL, la fonction date() permet facilement dobtenir le format appropri. Il faut simplement utiliser les formats de jour et de mois sur deux chiffres (prfixs dun zro).
Exemple : echo "nous sommes le ".date("d/m/Y").", et il est ".date("H : i : s"); // affichera : nous sommes le 23/09/2002, et il est 16 : 25 : 56
ESAT/DMSI/PROA/WGR
Page 49 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
72.2. getdate
getdate() convertit galement la date avant de la prsenter lutilisateur. Cette fonction accepte en option un horodatage Unix (entier long) et renvoie un tableau associatif contenant les informations relatives la date. Si vous excutez cette fonction sans argument, elle travaille avec lhorodatage Unix courant, tel quil serait renvoy par time(). Syntaxe : array getdate([long horodatage Unix]) ; Le tableau associatif renvoy par getdate() est le suivant : Cl seconds minutes hours mday wday mon year yday weekday month 0 Description secondes ayant dpasses la minute (0-59) minutes ayant dpasses lheure (0-59) heures de la journe (0-23) jour dans le mois (1-31) jour de la semaine (0 pour dimanche 6 pour samedi) mois de lanne (1-12) anne sur quatre chiffres jour de lanne (quantime : 0-365) nom du jour de la semaine nom du mois de lanne horodatage Unix Exemple 7 5 16 23 1 9 2002 265 Monday September 1032790097
Exemple : $tab_date = array(); $tab_date = getdate(); // aucun argument na t transmis, la date du jour sera donc utilise echo "Nous sommes le : $tab_date[mday]/$tab_date[mon]/$tab_date[year] " ; // affichera : Nous sommes le : 23/9/2002
72.3. strftime
La fonction strftime() fonctionne comme la fonction date(). Les codes de la chane format sont cependant composs du caractre % suivi dune lettre. Les 4 codes qui nous restituent les noms du jour et du mois dans la langue donne par setlocale() sont les suivants : %a - nom abrg du jour de la semaine (local). %A - nom complet du jour de la semaine (local). %b - nom abrg du mois (local). %B - nom complet du mois (local).
ESAT/DMSI/PROA/WGR
Page 50 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
La fonction UNIX_TIMESTAMP() est comparable, si ce nest quelle convertit une colonne en un horodatage Unix. Exemple : SELECT UNIX_TIMESTAMP(date_column) FROM tablename ; Cette requte renvoie la date exprime sous la forme dun horodatage Unix. Vous pouvez ensuite la manipuler votre gr dans un script PHP. En rgle gnrale, lusage dhorodatages UNIX est prfrable dans les calculs de dates, tandis que le format de date standard semploie lorsquil sagit simplement de stocker ou dafficher des dates. Limplmentation des calculs et des comparaisons de dates se rvle plus facile avec les horodatages Unix.
ESAT/DMSI/PROA/WGR
Page 51 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Formulaire selection_date.php3 : <html> <head> <title>Slection d'une date</title> </head> <body> <? echo "<form method='post' action='affiche_jour.php3'>"; $date = getdate(); $annee_en_cours = $date['year']; $mois_en_cours = $date['mon']; $jour_en_cours = $date['mday']; echo "<br><br>"; echo "<div align='center'>"; echo "<b>Entrez la date</b>"; echo " "; echo "<select name = jour'>"; echo "<option SELECTED>" . $jour_en_cours . "</option>"; for( $jj = 1 ; $jj <= 31 ; $jj++ ) echo "<option>" . $jj . "</option>"; echo "</select>"; echo " "; echo "<select name = 'mois'>"; echo "<option SELECTED>" . $mois_en_cours . "</option>"; for( $mm = 1 ; $mm <= 12 ; $mm++ ) echo "<option>" . $mm . "</option>"; echo "</select>"; echo " "; echo "<select name = 'annee'>"; echo "<option SELECTED>" . $annee_en_cours . "</option>";
ESAT/DMSI/PROA/WGR Page 52 sur137 jj/10/OO
Cours Programmation
Langage PHP
php.doc
for( $aaaa = $annee_en_cours - 10 ; $aaaa <= $annee_en_cours + 10 ; $aaaa++ ) echo "<option>" . $aaaa . "</option>"; echo "</select>"; echo "<br><br>"; echo "<input type='submit' name = 'valider' value='Valider'>"; echo " "; echo "<input type='reset' name = 'annuler' value='Annuler'>"; echo " "; echo "<input type='button' name='quitter' value='Quitter' OnClick='parent.close();'>"; echo "</div>" ; echo "</form>"; ?> </body> </html> Formulaire affiche_jour.php3 : <html> <head> <title>Affichage du jour</title> </head> <body> <? echo "<form method='post' action='#'>"; $jour = $HTTP_POST_VARS["jour"]; $mois = $HTTP_POST_VARS["mois"]; $annee = $HTTP_POST_VARS["annee"]; $tab_jours = array("0"=>"dimanche","1"=>"lundi","2"=>"mardi","3"=>"mercredi", "4"=>"jeudi","5"=>"vendredi","6"=>"samedi"); echo "<br><br>"; echo "<div align='center'>"; if(checkdate($mois,$jour,$annee)) { $horodatage = mktime(0,0,0,$mois,$jour,$annee); $nom_jour = $tab_jours[date("w",$horodatage)]; echo "Le $jour/$mois/$annee est un <font color='blue' size='5'>$nom_jour</font><br><br>"; } else { echo "<font color='red' size ='4'>"; echo "< Date erronée >"; echo "</font><br><br>"; } echo "<input type='button' name='ressaisir' value='Ressaisir' OnClick=\"document.location='selection_date.php3'\">"; echo " "; echo "<input type='button' name='quitter' value='Quitter' OnClick='parent.close();'>"; echo "</div>"; echo "</form>"; ?> </body> </html>
ESAT/DMSI/PROA/WGR
Page 53 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Autre possibilit, sans le tableau des jours en franais, mais en utilisant la fonction setlocale() qui change les informations locales. Syntaxe : setlocale(string categorie, string langue_locale); categorie est une chane qui spcifie la catgorie de fonction qui va tre affecte par les informations locales : LC_ALL pour toutes les fonctions ci-dessous LC_COLLATE pour les comparaisons de chanes (en cours dimplmentation) LC_CTYPE pour la classification de caractres et les conversions, par exemple strtoupper() LC_MONETARY pour localeconv() (en cours dimplmentation) LC_NUMERIC pour les sparateurs dcimaux LC_TIME pour le format des dates et heures avec strftime() setlocale(LC_ALL,"FR"); if(checkdate($mois,$jour,$annee)) { $horodatage = mktime(0,0,0,$mois,$jour,$annee); $nom_jour = strftime("%A",$horodatage); echo "Le $jour/$mois/$annee est un <font color='blue' size='5'>$nom_jour</font><br><br>"; }
ESAT/DMSI/PROA/WGR
Page 54 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Un objet est une instance de classe. Cela signifie quun objet est lincarnation de la fonctionnalit fixe dans une classe. Un objet est instanci en utilisant linstruction new conjointement au nom de la classe de laquelle il est membre. Lorsquun objet est instanci, vous pouvez accder toutes ses proprits ainsi qu toutes ses mthodes.
Le plus grand atout du code orient objet est peut-tre sa possibilit de rutilisation. Les classes employes pour crer des objets tant autonomes, elles peuvent facilement tre retires dun projet pour tre employes dans un autre. De plus, il est possible de crer des classes enfant, qui hritent et prennent la priorit sur les caractristiques de leurs parents. Cette technique ncessite que les classes doivent donc tre dfinies selon le principe des couches successives, par empilage des classes de haut niveau sur les classes de bas niveau, comme pour les fonctions. La programmation objet consiste donc crire des classes et les utiliser. Une bibliothque de composants est un ensemble de fichiers qui contiennent des dfinitions de classes, que lon peut inclure en tte des fichiers qui rutilisent ces classes.
Linstanciation dun objet signifie la rcupration dun pointeur sur une zone mmoire disponible, qui est de la taille de lobjet et peut donc tre utilise pour en grer le contenu dynamique. Elle gre donc lallocation de la mmoire ainsi que la mise disposition dune variable PHP qui permet de manipuler une donne du format de la classe.
ESAT/DMSI/PROA/WGR
Page 55 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
En PHP, le programmeur ne peut dfinir aucun niveau de confidentialit pour les proprits et mthodes (il ny a donc pas de concept dencapsulation). Vous pouvez accder tous les champs dun objet, ce qui cause des problmes si une proprit nest pas destine tre modifie.
ESAT/DMSI/PROA/WGR
Page 56 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Cours Programmation
Langage PHP
php.doc
Si vous crez une mthode dont le nom est identique la classe premiere_classe, elle sera automatiquement appele lors de linstanciation dun nouvel objet. De cette faon, vous pouvez donner vos objets des arguments traiter au moment o vous les instanciez. Les objets peuvent excuter du code pour sinitialiser eux-mmes en fonction darguments ou dautres facteurs. Ces mthodes spciales sont nommes constructeurs. Il sagit dune norme de programmation qui sest impose au fil du temps. Le constructeur doit tre considr non seulement en tant qutape dinitialisation des variables, mais galement en tant que premire phase de contrle et dharmonisation des donnes disponibles aux traitements de la classe. Lexemple suivant ajoute un constructeur la classe premiere_classe : class premiere_classe { var $prenom ; var $nom ; function premiere_classe ($name) { $this->nom = $name ; } function aff_hello() { print("Hello $this->prenom $this->nom !") ; } } $obj1 = new premiere_classe("DUPONT") ; $obj1->prenom = "Florian"; $obj1->aff_hello(); // initialisation de la proprit $nom // affichera Hello Florian DUPONT !
Dans lexemple suivant, nous tablissons un argument par dfaut au constructeur, de sorte que la chane "DUPONT" soit attribue au paramtre si nous nincluons pas dargument lors de la cration de lobjet : class premiere_classe { var $prenom ; var $nom ; function premiere_classe ($name = "DUPONT") { $this->nom = $name ; } function aff_hello() { print("Hello $this->prenom $this->nom !<br>") ; } } $obj1 = new premiere_classe() ; $obj1->prenom = "Florian"; $obj1->aff_hello(); // affichera Hello Florian DUPONT ! $obj2 = new premiere_classe("DURAND") ; $obj2->prenom = "Franois"; $obj2->aff_hello(); // affichera Hello Franois DURAND !
ESAT/DMSI/PROA/WGR
Page 58 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
79. Lhritage
L'hritage est un principe propre la programmation oriente objet, permettant de crer une nouvelle classe partir d'une classe existante. Le nom d'"hritage" (pouvant parfois tre appel drivation de classe) provient du fait que la classe drive (la classe nouvellement cre) contient les proprits et les mthodes de sa super classe (la classe dont elle drive). L'intrt majeur de l'hritage est de pouvoir dfinir de nouvelles proprits et de nouvelles mthodes pour la classe drive, qui viennent s'ajouter celles hrites. Par ce moyen on cre une hirarchie de classes de plus en plus spcialises. Cela a comme avantage majeur de ne pas avoir repartir de zro lorsque l'on veut spcialiser une classe existante. De cette manire il est possible d'acheter dans le commerce des librairies de classes, qui constituent une base, pouvant tre spcialises loisir (on comprend encore un peu mieux l'intrt pour l'entreprise qui vend les classes de protger les donnes membres grce l'encapsulation...). Lhritage ne fonctionne qu sens unique, la sous-classe hrite de la super classe (classe mre), mais pas linverse. Contrairement certains langages orients objet, PHP ne supporte pas lhritage multiple. Chaque classe ne peut hriter que dune seule super classe. Syntaxe de lhritage : class nom_de_la_nouvelle_classe extends nom_de_la_super-classe { // nouvelles proprits et mthodes
}
Exemple : // Cration de la classe de base vehicule : class vehicule { var $marque ; var $modele ; var $puissance ; var $couleur ; var $moteur = "arrt"; // implmentation des mthodes agissant sur tous les types de vhicules function identifier($marque,$modele) { $this->marque = $marque ; $this->modele = $modele ; } function demarrer() { $this->moteur = "en marche" ; } function arreter() { $this->moteur = "arrt" ; } function assigner_puissance($puiss) { $this->puissance = $puiss ; } function peindre($coul) { $this->couleur = $coul ; } function etat() { echo "couleur : $this->couleur<br>" ; echo "moteur : $this->puissance chevaux, $this->moteur<br>" ; } }
ESAT/DMSI/PROA/WGR Page 59 sur137 jj/10/OO
Cours Programmation
Langage PHP
php.doc
// Cration de la classe voiture hrite de la classe vehicule : class voiture extends vehicule { // Ajout dune proprit, dune mthode permettant de grer cette proprit et dune mthode daffichage // propre aux voitures portant le mme nom que la mthode daffichage de la classe mre. var $nb_portes = 5 ; function assigner_portes($portes) { $this->nb_portes = $portes ; } function etat() { echo "voiture : $this->marque $this->modele $this->nb_portes portes<br>" ; echo "couleur : $this->couleur<br>" ; echo "moteur de $this->puissance chevaux $this->moteur<br>" ; } } // Cration de la classe camion hrite de la classe vehicule : class camion extends vehicule { // Ajout dune proprit, dune mthode permettant de grer cette proprit et dune mthode daffichage // propre aux camions portant le mme nom que la mthode daffichage de la classe mre. var $poids; function assigner_poids($poids) { $this->poids = $poids; } function etat() { echo "camion : $this->marque $this->modele de $this->poids tonnes<br>" ; echo "couleur : $this->couleur<br>" ; echo "moteur de $this->puissance chevaux $this->moteur<br>" ; } }
Le polymorphisme est la possibilit dutiliser une fonction en lui passant en paramtre nimporte quel objet (dans lexemple ci-dessus de classe voiture ou de classe camion) implmentant une mthode de mme nom (dans lexemple ci-dessus la mthode etat()). Exemple : function affichage($objet) { $objet->etat() ; }
ESAT/DMSI/PROA/WGR
Page 60 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Vous pouvez remarquer que la mthode etat() appele via les objets $v1 et $c1 est celle de la classe drive et non celle de la classe mre. En effet, les mthodes et proprits redfinies dans les sousclasses sont prpondrantes et remplacent les dfinitions des classes mres. Contrairement dautres langages orients objet, PHP ne permet pas de redfinir une mthode tout en gardant la possibilit dinvoquer la version dfinie dans la classe mre. Il est recommand daccder aux proprits dun objet laide dune mthode et non directement (ex : $c1->marque = "Volvo" ;). A premire vue, une mthode telle que initialiser() peut sembler de peu dintrt, cependant les mthodes ont une excellente raison dtre : elles permettent deffectuer tous les accs aux proprits via une seule section de code, et doprer une vrification avant dautoriser toute modification.
ESAT/DMSI/PROA/WGR
Page 61 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Tableau des variables denvironnement PHP affich lors de lappel la fonction phpinfo() :
PHP Variables
Variable _POST["articles"] _POST["envoyer"] _SERVER["HTTP_ACCEPT"] _SERVER["HTTP_REFERER"] _SERVER["HTTP_ACCEPT_LANGUAGE"] _SERVER["CONTENT_TYPE"] _SERVER["HTTP_ACCEPT_ENCODING"] _SERVER["HTTP_USER_AGENT"] _SERVER["HTTP_HOST"] _SERVER["CONTENT_LENGTH"] _SERVER["HTTP_CONNECTION"] _SERVER["HTTP_CACHE_CONTROL"] _SERVER["PATH"] _SERVER["SystemRoot"] _SERVER["COMSPEC"] _SERVER["PATHEXT"] _SERVER["WINDIR"] _SERVER["SERVER_SIGNATURE"] _SERVER["SERVER_SOFTWARE"] _SERVER["SERVER_NAME"] _SERVER["SERVER_ADDR"] _SERVER["SERVER_PORT"] ESAT/DMSI/PROA/WGR Value Array ( [0] => tournevis ) Envoyer application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, image/gif, image/xxbitmap, image/jpeg, image/pjpeg, */* http://160.xxx.xxx.xxx/formul2.php3 fr application/x-www-form-urlencoded gzip, deflate Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0; H010818) 160.xxx.xxx.xxx 40 Keep-Alive no-cache C:\WINNT\SYSTEM32;C:\WINNT;C:\PROGRAM FILES\BORLAND\CBUILDER3\BIN C:\WINNT C:\WINNT\system32\cmd.exe . COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;. WSH C:\WINNT <address>Apache/2.0.40 Server at 160.xxx.xxx.xxx Port 80</address> Apache/2.0.40 (Win32) PHP/4.3.0-dev 160.xxx.xxx.xxx 160. xxx.xxx.xxx 80 jj/10/OO
Page 62 sur137
Cours Programmation
Langage PHP 160. xxx.xxx.xxx F:/http/developpement philippe.wagnier@esat.terre.def F:/http/developpement/articles.php3 1221 CGI/1.1 HTTP/1.1 POST /articles.php3 /articles.php3 /articles.php3
php.doc
_SERVER["REMOTE_ADDR"] _SERVER["DOCUMENT_ROOT"] _SERVER["SERVER_ADMIN"] _SERVER["SCRIPT_FILENAME"] _SERVER["REMOTE_PORT"] _SERVER["GATEWAY_INTERFACE"] _SERVER["SERVER_PROTOCOL"] _SERVER["REQUEST_METHOD"] _SERVER["QUERY_STRING"] _SERVER["REQUEST_URI"] _SERVER["SCRIPT_NAME"] _SERVER["PHP_SELF"]
ESAT/DMSI/PROA/WGR
Page 63 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Fichier articles.php3 : <? $articles = $HTTP_POST_VARS["articles"]; $nb_articles = sizeof($articles); echo "<form method='post' action='#'>"; echo "<div align='center'>"; echo "Vous avez slectionn $nb_articles articles :<br>"; for( $art = 0 ; $art < $nb_articles ; $art++ ) echo "$articles[$art]<br>"; echo "</div>" ; echo "</form>"; ?> </body> </html>
Llment cases cocher <input type=checkbox name=xx[]> autorise galement les valeurs multiples dans un mme nom de champ. Le nom doit galement se terminer par une paire de crochets vide.
Page 64 sur137 jj/10/OO
ESAT/DMSI/PROA/WGR
Cours Programmation
Langage PHP
php.doc
<html> <head> <title>Exercice simple sur les formulaires</title> </head> <body> <? echo "<form method='post' action='trait.php3'>"; echo "<div align=center>" ; echo "Votre nom "; echo "<input type='text' name='utilisateur' /><br><br>"; echo "Votre adresse<br>"; echo "<textarea name='adresse' rows='5' cols='40'></textarea><br><br>" ; echo "<input type=submit name=envoyer value=Envoyer>" ; // bouton de soumission echo "</div>" ; echo "</form>"; ?> </body> </html> Largument action de llment form pointe sur un fichier nomm trait.php3 qui traitera les donnes du formulaire. Comme nous navons spcifi quun nom de fichier largument action, le fichier doit se trouver dans le mme rpertoire du serveur que le document contenant notre code.
ESAT/DMSI/PROA/WGR
Page 65 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Le fichier trait.php3 dcrit ci-dessous est appel lors de la soumission : <html> <head> <title>Exercice sur les formulaires</title> </head> <body> <? $utilisateur = $HTTP_POST_VARS["utilisateur"]; $adresse = $HTTP_POST_VARS["adresse"]; $bouton_soumission = $HTTP_POST_VARS["envoyer"] ; $page = $HTTP_SERVER_VARS["HTTP_REFERER"] ; echo "<form method='post' action='#'>"; echo "<div align='center'>"; echo "<h2>Bienvenue</h2>votre nom est : $utilisateur<br>"; echo "votre adresse est :$adresse"; echo "<br><br>Ce formulaire provient de la page '$page' et a t appel l'aide du bouton '$bouton_soumission'" ; echo "</div>" ; echo "</form>"; ?> </body> </html>
Bienvenue
votre nom est : MARTIN votre adresse est : 1, rue de Paris 35000 RENNES Ce formulaire provient de la page http://160.xxx.xxx.xxx/formul1.php3 et a t appel laide du bouton Envoyer
Le code suivant dresse la liste des noms et valeurs de tous les paramtres (les tableaux font partie dun traitement particulier : la srialisation, qui fera lobjet dun autre chapitre) qui lui sont transmis via une transaction POST : foreach( $HTTP_POST_VARS as $nom=>$valeur ) echo "$nom $valeur<br>"; Rsultat laffichage : utilisateur MARTIN adresse 1, rue de Paris 35000 RENNES envoyer Envoyer La balise <INPUT> permet galement de dfinir un champ de type HIDDEN (cach). Ce champ nest pas visible, il est principalement destin dfinir une donne dont la valeur est fixe, et passer cette donne en mme temps que celles saisies par lutilisateur. Exemple : echo "<form method='post' action='trait.php3'>"; echo "<input type=HIDDEN name=var value= ".$var. ">" ; Il est important de noter que cach ne veut pas dire secret . Rien nempche un utilisateur de consulter la valeur dun champ cach en regardant le code source du document HTML. Il faut pouvoir aider lutilisateur lors de la saisie dun formulaire, et surtout contrler que les valeurs entres respectent certaines rgles (ex : champ saisi obligatoirement, valeurs numriques et positives etc.). Ce genre de contrle peut tre fait par le serveur aprs que lutilisateur a valid sa saisie, mais ce mode de fonctionnement a linconvnient de multiplier les changes sur le rseau. Une solution plus sduisante est deffectuer les contrles par le navigateur, laide dun langage comme JavaScript qui permet de faire de la programmation au niveau du client (la prsentation du langage JavaScript mrite un ouvrage complet).
ESAT/DMSI/PROA/WGR
Page 66 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Le champ cach doit tre plac aprs lobtention de la valeur avec laquelle il sera initialis.
ESAT/DMSI/PROA/WGR
Page 67 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Rsultat lexcution :
ESAT/DMSI/PROA/WGR
Page 68 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 69 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Il existe 6 modes douverture de fichiers possibles : "r" ouvre le fichier en lecture seule. Le pointeur est positionn en tte du fichier. "r+" ouvre le fichier en lecture / criture et place le pointeur en tte du fichier. "w" ouvre le fichier en criture seule et place le pointeur en tte du fichier. Si le fichier existe dj, son contenu est effac. Si le fichier nexiste pas, il est cr. "w+" ouvre le fichier en lecture / criture et place le pointeur en tte du fichier. Si le fichier existe dj, son contenu est effac. Si le fichier nexiste pas, il est cr. "a" ouvre le fichier en criture seule et place le pointeur la fin du fichier (ajout en fin de fichier). Si le fichier nexiste pas, il est cr. "a+" ouvre le fichier en lecture / criture et place le pointeur la fin du fichier (ajout en fin de fichier). Si le fichier nexiste pas, il est cr.
ESAT/DMSI/PROA/WGR
Page 70 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
bool flock(int fp, int operation); PHP dispose dun systme complet de verrouillage de fichier. Tous les programmes qui accdent au fichier doivent utiliser la mme mthode de verrouillage pour quil soit efficace. flock() agit sur le fichier fp qui doit avoir t ouvert. operation est une des valeurs suivantes : 1 Verrouillage en lecture. Le fichier peut tre partag avec dautres lecteurs. 2 Verrouillage en criture. Ce type de verrouillage est exclusif : le fichier ne peut tre partag. 3 Libration dun verrou existant (partag ou exclusif). +4 Si vous voulez que flock() ne se bloque pas durant le verrouillage, ajoutez 4 operation. flock() permet de raliser un systme de verrous criture / lecture simple, qui peut tre utilis sur nimporte quelle plate-forme (Unix et Windows compris). flock() retourne vrai en cas de succs, et faux sinon. (le verrou na pas pu tre obtenu). int fpassthru(int fp); Lit le contenu dun fichier depuis la position du pointeur jusqu la fin, et dirige le rsultat vers la sortie standard (lcran). Si une erreur survient, fpassthru() retourne faux. Le pointeur de fichier doit tre valide, et doit avoir t correctement ouvert par fopen(). Aprs la lecture, fpassthru() va fermer le fichier (le pointeur sera alors invalide). Si vous voulez simplement afficher le contenu dun fichier, il suffit dutiliser readfile(), ce qui pargnera lappel fopen(). int fputs(int fp, string str, [int length]); La fonction crit la chane str dans le fichier dcrit par fp. fputs() est un alias de fwrite(), et lui est identique en tout point. Notez que length est un paramtre optionnel, et s'il nest pas spcifi, toute la chane est crite. Elle retourne vrai si lopration russit. string fread(int fp, int length); Lecture dun fichier en mode binaire. fread() lit jusqu length octets dans le fichier rfrenc par fp. La lecture sarrte lorsque length octets ont t lus, ou que lon a atteint la fin du fichier, ou quune erreur survient (le premier des trois). int fseek(int fp, int offset); Positionne le pointeur interne de fichier fp offset octets partir du dbut du fichier. Equivalent la fonction C fseek( fp, offset, SEEK_SET ). Retourne vrai en cas de succs, et sinon -1. Notez que positionner le pointeur au-del de la fin du fichier nest pas une erreur. Ne peut pas tre utilis sur les pointeurs retourns par fopen() s'ils sont au format HTTP ou FTP. int ftell(int fp); Retourne la position courante du pointeur fp (nombre doctets par rapport au dbut du fichier). Si une erreur survient, retourne faux. Le pointeur de fichier doit tre valide, et avoir t correctement ouvert par fopen(). int fwrite(int fp, string str, [int length]); La fonction crit le contenu de la chane str dans le fichier point par fp. Si la longueur length est fournie, lcriture sarrtera aprs length octets, ou la fin de la chane (le premier des deux). int rewind(int fp); Replace le pointeur du fichier fp au dbut. Si une erreur survient, la fonction retourne 0. Le pointeur de fichier doit tre valide, et avoir t correctement ouvert par fopen().
ESAT/DMSI/PROA/WGR
Page 71 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Deux proprits sont disponibles une fois le dossier ouvert : le pointeur handle peut tre utilis avec dautres fonctions telles que readdir(), rewinddir() et closedir(). Le chemin du dossier path est le chemin fourni lors de la construction de lobjet. Trois mthodes permettent de lire read(), remettre zro rewind() et fermer le dossier close(). Exemple : affichage du nom de toutes les entres dun rpertoire en programmation objet :
<? $rep = dir("C:\Program Files"); echo "chemin : $rep->path<br>"; while($entry = $rep->read()) echo "$entry<br>"; $rep->close(); ?>
string getcwd (void); Retourne le nom du dossier courant. int chdir(string directory); Permet de se positionner dans le dossier directory. Retourne faux (FALSE ) si lopration choue, et vrai (TRUE ) sinon. void closedir(int ptr_dir); Ferme le pointeur de dossier ptr_dir. Le dossier doit avoir t ouvert avec opendir(). int mkdir(string pathname, int permissions); Tente de crer un dossier dans le chemin pathname. Notez que vous aurez prciser les permissions en base octale (codes comme sous UNIX), ce qui signifie que vous aurez probablement un 0 comme premier chiffre, exemple : mkdir("/path/to/my/dir", 0700); La fonction retourne vrai en cas de succs, et faux en cas dchec. int opendir(string path); Retourne un pointeur sur le dossier spcifi par le chemin path, pour tre utilis avec les fonctions closedir(), readdir(),et rewinddir(). string readdir(int ptr_dir); Retourne le nom du fichier suivant dans le dossier identifi par ptr_dir. Les noms sont retourns dans nimporte quel ordre. int rename(string oldname, string newname); Tente de renommer le fichier oldname en newname. Retourne vrai en cas de succs et faux sinon. void rewinddir(int ptr_dir); Retourne la premire entre du dossier point par ptr_dir : le prochain fichier lu sera le premier. int rmdir(string dirname); Tente deffacer le dossier dont le chemin est dirname. Le dossier doit tre vide, et le script doit avoir les autorisations adquates. Si une erreur survient, la fonction retourne 0. int unlink(string filename); Tente deffacer le fichier filename. Identique la fonction Unix C unlink(). La fonction retourne 0 ou FALSE en cas dchec. Exemple : affichage du nom de tous les fichiers dun rpertoire : <? echo "<form method='POST' action='#'>"; echo "<div align='center'>"; $path = "F:\\http\\developpement"; $dp = opendir($path); echo "Liste des noms de fichiers du rpertoire : $path<br><br>"; while($fic = readdir($dp)) echo "$fic<br>"; closedir($dp); echo "</div>" ; echo "</form>"; ?>
ESAT/DMSI/PROA/WGR
Page 72 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 73 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
// augmentation de la taille et mise en gras // retourne le premier caractre // retour la taille standard et fin de mise en gras // retourne la ligne complte partir du 2ime caractre // ajout de la balise 'nouvelle ligne' // ecriture dans le fichier html
ESAT/DMSI/PROA/WGR
Page 74 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Vous pouvez consulter la section du manuel en ligne PHP (http://no.php.net/manual/fr/) consacre au systme de fichiers.
ESAT/DMSI/PROA/WGR
Page 75 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Base de donnes
Une transaction de base de donnes Web typique est compose des tapes suivantes : 1. Le navigateur Web dun utilisateur envoie une requte HTTP pour une page Web particulire. La requte peut se prsenter sous la forme dun formulaire HTML. Le serveur Web reoit la requte, rcupre le formulaire et le passe au moteur PHP afin quil soit trait. 2. Le moteur PHP commence analyser le script. A lintrieur de ce script se trouve une commande permettant de se connecter la base de donnes et dexcuter une requte. PHP ouvre une connexion vers le serveur MySQL, et transmet la requte approprie. 3. Le serveur MySQL reoit la requte et la traite, puis envoie les rsultats au moteur PHP. 4. Le moteur PHP termine lexcution du script, ce qui consiste gnralement en un formatage des rsultats de la requte en HTML. 5. Le moteur PHP envoie ensuite le fichier HTML obtenu au serveur Web. 6. Le serveur Web transmet la page HTML au navigateur, pour que lutilisateur puisse visualiser les rsulats. Le plus souvent, le serveur Web, le moteur PHP et le serveur de bases de donnes sont tous excuts sur le mme ordinateur. Cependant, il arrive que le serveur de bases de donnes soit excut sur un autre ordinateur. Cette dernire approche rpond des problmes de scurit, daugmentation des capacits, et de rpartition de la charge. PHP ct serveur : quand un fichier avec une extension .php ou .php3 est demand au serveur Web, ce dernier le charge en mmoire et y cherche toutes les instructions PHP quil transmet linterprteur. linterprteur excute les instructions, ce qui a pour effet de produire du code HTML qui vient remplacer les instructions PHP dans le document finalement fourni au navigateur. Ce dernier reoit donc du HTML pur et ne voit jamais la moindre instruction PHP.
ESAT/DMSI/PROA/WGR
Page 76 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Fichiers log et bases de donnes Fichiers header Librairies Fichiers lis la configuration du serveur MySQL dont mysql_install_db (Vous pouvez utiliser ce script comme
base, pour ajouter de nouveaux utilisateurs, modifier les privilges)
Fichiers contenant les tables de caractres des pays Manuels de documentation Benchmarks
Nom Egalit Suprieur Infrieur Suprieur ou gal Infrieur ou gal Diffrent de Prsence Prsence Intervalle
Exemple Index = 5 Total > 100 Total < 100 Total >= 100 Total <= 100 Total != 100 Total IS NOT NULL Total IS NULL Total BETWEEN 100 and 200 Existence Ville IN ("Paris","Lyon") Existence Ville NOT IN ("Paris","Lyon") Comparaison de Nom LIKE ("Fred %") motif Comparaison de Nom NOT LIKE motif ("Fred %") Comparaison de Nom REGEXP motif
Description Teste si les deux oprandes sont gaux Teste si un oprande est suprieur un autre Teste si un oprande est infrieur un autre Teste si un oprande est suprieur ou gal un autre Teste si un oprande est infrieur ou gal un autre Teste si les deux oprandes sont diffrents Teste si le champ contient une valeur Teste si le champ ne contient aucune valeur Teste si la valeur est comprise dans lintervalle spcifi Teste si la valeur se trouve dans un ensemble spcifi Teste si la valeur ne se trouve pas dans un ensemble spcifi Teste si la valeur correspond un motif spcifi Teste si la valeur ne correspond pas un motif spcifi Teste si la valeur correspond une expression rgulire (squence de caractres)
Les motifs peuvent contenir du texte classique, plus les caractres % et _. % remplace nimporte quelle chane de caractres, et _ remplace nimporte quel caractre. Dans MySQL les motifs ne respectent pas la casse. Il est possible de slectionner des lignes en associant plusieurs critres avec AND et OR ou && et ||.
Page 77 sur137 jj/10/OO
ESAT/DMSI/PROA/WGR
Cours Programmation
Langage PHP
php.doc
Pour rassembler des informations qui se trouvent dans diffrentes tables, vous devez effectuer une opration appele fusion. Cela revient simplement runir plusieurs tables en fonction des relations qui existent entre leurs donnes. Exemple : SELECT clients.nom FROM clients, emprunts, livres WHERE clients.num_client = emprunts.num_client AND emprunts.nombre_emprunts >= 4 AND livres.titre LIKE %PHP%; Il est souvent pratique de pouvoir faire rfrence aux tables avec dautres noms que lon appelle des alias. Vous pouvez les crer au dbut dune requte laide du mot cl AS, et les utiliser tout au long de la requte. Exemple : SELECT c.nom FROM clients as c, emprunts as e, livres as l WHERE c.num_client = e.num_client AND e.nombre_emprunts >= 4 AND l.titre LIKE %PHP%; Il faut passer par les alias pour fusionner une table avec elle-mme. Cette approche peut tre utile si nous voulons trouver dans une table les lignes qui possdent des valeurs en commun. Exemple, trouver les clients qui habitent dans la mme ville : SELECT c1.nom, c2.nom, c1.ville FROM clients as c1, clients as c2 WHERE c1.ville = c2.ville AND c1.nom ! = c2.nom ;
La clause ORDER BY est utilise pour trier les lignes en fonction de plusieurs colonnes, listes dans la clause SELECT. Par dfaut, lordre de tri est croissant. Vous pouvez le spcifier explicitement laide du mot cl ASC. Il est possible de trier par ordre dcroissant, en spcifiant le mot cl DESC. Exemple : SELECT nom, ville FROM clients ORDER BY nom, ville ASC ; MySQL possde plusieurs fonctions dagrgation pour rpondre certains types de requtes. Ces fonctions peuvent tre appliques une table prise comme un ensemble, ou un groupe de donnes dans une table : Nom AVG(colonne) COUNT(colonne) Description Moyenne des valeurs dans la colonne spcifie. Nombre de valeurs non NULL dans la colonne. Si vous ajoutez le mot DISTINCT devant le nom de la colonne, vous obtiendrez le nombre de valeurs distinctes dans cette colonne. sI vous spcifiez COUNT (*), vous obtiendrez un compte global, indpendamment des valeurs NULL. Minimum des valeurs dans la colonne spcifie. Maximum des valeurs dans la colonne spcifie. Ecart type des valeurs dans la colonne spcifie. Idem STD(colonne) Somme des valeurs dans la colonne spcifie.
La clause GROUP BY permet dobtenir des informations plus dtailles. Par exemple cela nous permet dafficher la moyenne des commandes pour diffrents groupes (ex : en fonction du numro de socit). Grce ce mcanisme, nous pouvons connatre la socit qui a dpens le plus dargent : SELECT num_societe, avg(montant) FROM factures GROUP BY num_societe ; La clause HAVING permet de tester le rsultat dune agrgation. Elle doit tre spcifie aussitt aprs la clause GROUP BY, et elle fonctionne comme une clause WHERE qui ne sappliquerait quaux goupes et aux agrgats. Exemple : SELECT num_societe, avg(montant) FROM factures GROUP BY num_societe HAVING avg(montant) > 1000; La clause LIMIT est utilise pour spcifier les lignes du rsultat qui doivent tre renvoyes. Elle accepte deux paramtres : le numro de ligne de dpart et le nombre de lignes renvoyer (les lignes sont numrotes partir de 0). Cela est trs utile pour les applications Web, par exemple pour permettre aux clients qui parcourent le catalogue des produits, dafficher uniquement 10 articles par page. Exemple : SELECT * FROM produits LIMIT 0, 9 ; Au lieu dafficher le rsultat dun ordre SELECT lcran, on peut le placer dans un fichier. Exemple : SELECT * INTO OUTFILE svfilm.txt FROM films ;
ESAT/DMSI/PROA/WGR
Page 78 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Il faut avoir le privilge file (voir auprs de ladministrateur du serveur MySQL) pour utiliser INTO OUTFILE. On obtient alors tous les droits daccs du serveur mysql. Par dfaut, le fichier est cr dans le rpertoire contenant les bases de donnes. On peut indiquer explicitement le chemin daccs, condition que mysql ait le droit dcriture. Les lignes de la table sont crites en sparant chaque valeur par une tabulation, ce qui permet de recharger le fichier par la suite avec la commande LOAD DATA. On peut indiquer, aprs le nom du fichier, les options de sparation des lignes et des attributs, avec une syntaxe identique celle utilise pour LOAD DATA.
98.2. INSERT
Cette instruction permet dajouter des lignes dans la base de donnes. Sa forme principale est la suivante : INSERT [INTO] nom_de_la_table [(colonne1, colonne2, )] VALUES (valeur1, valeur2, ) ; Les valeurs spcifies sont utilises pour remplir la table, dand lordre o elles sont fournies. Cependant, si vous souhaitez remplir uniquement certaines colonnes, ou si vous voulez spcifier les valeurs dans un ordre diffrent, vous pouvez prciser le nom des colonnes dans linstruction. Exemples : INSERT INTO clients VALUES (NULL, DUPOND, Jules, 10, rue de Brest, RENNES) ; INSERT INTO clients (nom, prenom, adresse, ville) VALUES (DURANT,Pierre,4, rue de Paris,RENNES) ; Voici une autre syntaxe similaire : INSERT INTO clients SET nom=DURANT, prenom=Pierre, adresse=4, rue de Paris, ville=RENNES ;
Les chanes de caractres doivent toujours tre mises entre simples ou doubles guillemets. Les nombres et les dates nont pas besoin de guillemets. Nous avons spcifi la valeur NULL lorsque nous avons ajout Jules DUPOND, car la premire colonne (num_client) a t dclare comme tant la cl primaire de la table clients, avec lattribut AUTO_INCREMENT. Cela signifie que si nous insrons une ligne avec la valeur NULL (ou aucune valeur) dans ce champ, MySQL gnre le prochain numro dans la squence dauto-incrmentation, et insre automatiquement la prochaine valeur. Il est galement possible dinsrer plusieurs lignes dans une table en une seule instruction. Chaque ligne doit tre mise entre parenthses, et les ensembles de parenthses doivent tre spars par des virgules. Exemple : INSERT INTO clients VALUES (NULL, DUPOND, Jules, 10, rue de Brest, RENNES) , (NULL, DURANT, Pierre, 4, rue de Paris, RENNES) , (NULL, MARTIN, Alain, 32, rue de Nantes, RENNES) ;
98.3. UPDATE
Cette instruction met jour une table, en modifiant toutes les colonnes spcifies en fonction des expressions fournies. Vous pouvez restreindre une instruction UPDATE certaines lignes avec la clause WHERE, et limiter le nombre total de lignes affectes avec la clause LIMIT. Sa forme principale est la suivante : UPDATE nom_de_la_table SET colonne1=expression1, colonne2=expression2, [WHERE condition] [LIMIT nombre] ; Exemple : UPDATE produits SET prixHT = prixHT*1.15 WHERE categorie=tabac ; // un peu dhumour ! ;-)
98.4. DELETE
Cette instruction permet de supprimer des enregistrements dans la base de donnes. Sa syntaxe est la suivante : DELETE FROM nom_de_la_table [WHERE condition] [LIMIT nombre] ; Si vous ne spcifiez aucune clause, toutes les lignes de la tables seront supprimes. La clause WHERE permet de spcifier les lignes supprimer. La clause LIMIT peut tre utilise pour limiter le nombre maximal de lignes supprimer. Exemple : DELETE FROM clients WHERE num_client = 6 ;
Cours Programmation
Langage PHP
php.doc
Sa forme principale est la suivante : ALTER TABLE nom_de_la_table modification1 [, modification2 ] ; En SQL ANSI, il nest possible dapporter quune seule modification par instruction ALTER TABLE, avec MySQL vous pouvez en faire autant que vous le souhaitez. Chaque clause de modification peut tre utilise pour modifier diffrents aspects de la table. Les modifications possibles sont les suivantes : Syntaxe Description ADD [COLUMN] description [FIRST | Ajoute une nouvelle colonne lemplacement spcifi (sil nest pas AFTER colonne] spcifi, la colonne est ajoute la fin de la table). Notez que description ncessite un nom et un type, tout comme une instruction CREATE. ADD [COLUMN] (description1, Ajoute une ou plusieurs colonnes la fin de la table. description2, ) ADD INDEX [index] (colonne1, ) Ajoute un index dans la table, sur les colonnes spcifies. ADD PRIMARY KEY (colonne1, ) Transforme les colonnes spcifies en cl primaire de la table. ADD UNIQUE [index] (colonne1, ) Ajoute un index unique dans la table, sur les colonnes spcifies. ALTER [COLUMN] colonne {SET Ajoute ou supprime une valeur par dfaut pour une colonne particulire. DEFAULT valeur | DROP DEFAULT} CHANGE [COLUMN] colonne Modifie la colonne spcifie en lui affectant la nouvelle description. nouvelle_description Vous pouvez vous en servir pour modifier le nom dune colonne, puisque la description dune colonne contient son nom. MODIFY [COLUMN] description Modifie le type dune colonne mais pas son nom. DROP [COLUMN] colonne Supprime la colonne spcifie. DROP PRIMARY KEY Supprime lindex principal, mais pas la colonne. DROP INDEX index Supprime lindex spcifi. RENAME [AS] nouvelle_table Renomme une table. Exemples : Modification de la taille dune colonne : ALTER TABLE clients MODIFY nom VARCHAR(60) NOT NULL ; Ajout dune colonne : ALTER TABLE clients ADD code_postal CHAR(5) AFTER adresse ; Supression dune colonne : ALTER TABLE clients DROP age ;
ESAT/DMSI/PROA/WGR
Page 80 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Cours Programmation -
Langage PHP
php.doc
Loption LOCAL indique au serveur que le fichier se trouve sur la machine du client mysql. Par dfaut, le serveur cherche le fichier sur sa propre machine, dans le rpertoire contenant la base de donnes. - Si le client mysql na pas t lanc dans le rpertoire o se trouve le fichier films.txt, il faut indiquer le chemin complet du fichier. - Enfin il existe de nombreuses options pour indiquer le format du fichier. Ici on indique quune ligne dans le fichier correspond une ligne dans la table, et que les valeurs des attributs dans le fichier sont spares par des points-virgules. La commande OPTIMIZE TABLE.. La commande SHOW. Les chanes de caractres peuvent tre dfinies avec " ou ', et pas seulement avec '. Utilisation du caractre d'chappement \. La commande SET OPTION. Vous n'avez pas nommer expressment toutes les colonnes dans une clause GROUP BY. Mais cela peut permettre d'acclrer quelques requtes trs spcifiques Pour aider les utilisateurs d'autres environnements SQL, MySQL dispose d'aliases pour de nombreuses fonctions. Par exemple, toutes les fonctions sur les chanes de caractres supportent la syntaxe ANSI SQL et ODBC. MySQL accepte les oprateurs logiques || et && (OR et AND, comme en langage C). Sous MySQL, || et OR sont synonymes, tout comme le sont && et AND. A cause de ce double emploi, MySQL n'accepte pas les oprateurs ANSI SQL || comme additionneur de chanes; (utilisez la place CONCAT() ).. Etant donn que CONCAT() prend un nombre arbitraire d'arguments, il est facile de remplacer ||. CREATE DATABASE ou DROP DATABASE. L'oprateur % est synonyme de MOD(). C'est dire que, N%M est quivalent MOD(N,M). % est hrit du langage C, et permet la compatibilit avec PostgreSQL. Les oprateurs =, <>, <= ,<, >=,>, <<, >>, <=>, AND, OR ou LIKE peuvent tre utiliss dans les comparaisons de colonnes avec la clause FROM dans les commandes SELECT. Par exemple : SELECT col1=1 AND col2=2 FROM nom_table La fonction MYSQL_INSERT_ID(). Les oprateurs d'expressions rgulires REGEXP et NOT REGEXP. CONCAT() ou CHAR() avec plus d'un argument. (Avec MySQL, ces fonctions peuvent prendre un nombre arbitraire d'arguments). Les fonctions supplmentaires BIT_COUNT(), ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(), ENCRYPT(), md5(), ENCODE(), DECODE(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS(), ou WEEKDAY(). Utilisation de TRIM() pour supprimer les espaces de dbut et fin de chane. ANSI SQL ne supporte que la suppression de caractres uniques. Les fonctions de GROUP BY : STD(), BIT_OR() et BIT_AND(). Utilisation de REPLACE la place de DELETE + INSERT.. La commande FLUSH flush_option.
ESAT/DMSI/PROA/WGR
Page 82 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Transactions :
Les transactions ne sont pas encore supportes par MySQL. Le serveur va bientt accepter des oprations atomiques, ce qui permettra des transactions, mais sans le rollback. Avec les oprations atomiques, vous pourrez excuter des groupes de commandes INSERT/SELECT/ avec n'importe quelle commande, et tre sur qu'il n'y aura aucune interfrence avec un autre thread. Dans ce contexte, vous n'aurez alors pas besoin de rollback. Actuellement, vous pouvez empcher les autres threads d'interfrer en utilisant les fonctions LOCK TABLES et UNLOCK TABLES. Pour viter d'utiliser le ROLLBACK, vous pouvez suivre la stratgie suivante : 1. Utilisez LOCK TABLES <nom des tables> pour verrouiller les tables auxquelles vous accdez 2. Testez les conditions d'utilisation. 3. Modifiez si tout est OK. 4. Utilisez UNLOCK TABLES pour librer la table. Gnralement, cette mthode est beaucoup plus rapide que les transactions, et le ROLLBACK est souvent possible, mais pas toujours. Le seul point critique est que si le thread est tu au milieu de la modification, les verrous seront librs, mais une partie des modifications ne sera pas faite. Vous pouvez aussi utiliser les fonctions qui modifient un seul enregistrement la fois. Vous pouvez crer des applications trs efficaces avec la technique suivante : Modifier un champ par rapport sa valeur actuelle Modifier seulement les champs qui ont changs Par exemple, lorsque vous modifiez les informations concernant un client, ne modifiez que les informations qui ont changes, et non pas celles qui sont restes constantes. La recherche des valeurs est faite avec la clause WHERE de la commande UPDATE. Si l'enregistrement a chang, on peut retourner au client un message du type : "Les informations n'ont pas t modifies, car un autre utilisateur est en train de modifier les valeurs ". Alors, on affiche l'ancienne valeur et la nouvelle, ce qui permet l'utilisateur de dcider quelle version utiliser. Cela fournit un mcanisme du genre verrouillage de colonne' mais c'est en fait un peut mieux, car seules les colonnes qui en ont besoin sont utilises. Une commande UPDATE ressemblera alors ceci : UPDATE tablename SET pay_back=pay_back+'diffrence de valeur' WHERE Comme vous pouvez le voir, c'est une mthode trs efficace, et qui fonctionne mme si un autre client a chang la valeur entre temps. Dans certains cas, l'utilisateur a demand le ROLLBACK et/ou LOCK TABLES dans le but de grer des identifiants uniques dans des tables. Il vaut mieux utiliser le type de colonne AUTO_INCREMENT et la fonction SQL LAST_INSERT_ID().
ESAT/DMSI/PROA/WGR
Page 83 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Cls trangres :
Remarque : les cls externes en SQL ne sont pas utilises pour effectuer des regroupements de table, mais pour assurer l'intgrit rfrentielle. Si vous voulez lire des informations depuis plusieurs tables avec une commande SELECT, c'est un regroupement ! . Exemple : SELECT * from table1,table2 where table1.id = table2.id Il n'y a pas besoin de cl trangre pour joindre deux tables : La seule chose que MySQL ne fait pas est de vrifier (CHECK) que les cls que vous utilisez existent vraiment dans la table que vous rfrencez, et qu'il n'efface pas de lignes dans une table avec une dfinition de cl trangre. Si vous utilisez vos cls de manire habituelle, cela fonctionnera parfaitement. Exemples : CREATE TABLE persons ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, name CHAR(60) NOT NULL, PRIMARY KEY (id) ) CREATE TABLE shirts ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, style ENUM('t-shirt', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL REFERENCES persons, PRIMARY KEY (id) ) INSERT INTO persons VALUES (NULL, 'Antonio Paz') INSERT (NULL, (NULL, (NULL, INTO shirts VALUES 'polo', 'blue', LAST_INSERT_ID()), 'dress', 'white', LAST_INSERT_ID()), 't-shirt', 'blue', LAST_INSERT_ID())
INSERT INTO persons VALUES (NULL, 'Lilliana Angelovska') INSERT (NULL, (NULL, (NULL, (NULL, INTO shirts VALUES 'dress', 'orange', LAST_INSERT_ID()), 'polo', 'red', LAST_INSERT_ID()), 'dress', 'blue', LAST_INSERT_ID()), 't-shirt', 'white', LAST_INSERT_ID())
SELECT * FROM persons +----+---------------------+ | id | name | +----+---------------------+ | 1 | Antonio Paz | | 2 | Lilliana Angelovska | +----+---------------------+
ESAT/DMSI/PROA/WGR
Page 84 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
SELECT * FROM shirts +----+---------+--------+-------+ | id | style | color | owner | +----+---------+--------+-------+ | 1 | polo | blue | 1 | | 2 | dress | white | 1 | | 3 | t-shirt | blue | 1 | | 4 | dress | orange | 2 | | 5 | polo | red | 2 | | 6 | dress | blue | 2 | | 7 | t-shirt | white | 2 | +----+---------+--------+-------+ SELECT WHERE AND AND s.* FROM persons p, shirts s p.name LIKE 'Lilliana%' s.owner = p.id s.color <> 'white'
+----+-------+--------+-------+ | id | style | color | owner | +----+-------+--------+-------+ | 4 | dress | orange | 2 | | 5 | polo | red | 2 | | 6 | dress | blue | 2 | +----+-------+--------+-------+ La syntaxe FOREIGN KEY de MySQL n'existe que pour la compatibilit avec les commandes CREATE TABLE des autres bases SQL : elle n'a aucun effet. La syntaxe FOREIGN KEY sans la partie ON DELETE ... n'est utilise que pour des raisons de documentation. Certaines applications ODBC l'utilise pour gnrer des clauses WHERE automatiques, mais il est gnralement simple remplacer. FOREIGN KEY est parfois utilis comme contrainte, mais ce genre de vrification n'est pas ncessaire si les lignes ont t insres dans l'ordre. MySQL ne supporte que ces clauses, car certaines applications en ont besoin (qu'elles fonctionnent ou pas). Avec MySQL, vous pouvez contourner le problme sans la clause ON DELETE ... en ajoutant une commande DELETE adquate lors de l'effacement d'un enregsitrement d'une table qui a une cl externe. En pratique, c'est aussi rapide (voire plus), et beaucoup plus portable que les cls externes. Dans un futur proche, nous allons implmenter FOREIGN KEY de manire sauver les informations dans la table de spcifications, pour qu'elles soient accessibles par mysqldump et ODBC. Vues : MySQL ne supporte pas les vues, mais c'est sur la liste des fonctionnalits futures. Oprations ensemblistes : La norme SQL ANSI comprend des oprations qui considrent les tables comme des ensembles, et effectuent des intersections, des unions ou des diffrences avec les mots cls INTERSECT, UNION ou EXCEPT. Chaque oprateur sapplique deux tables de schma identique (mme nombre dattributs, mmes noms, mmes types). Exemples : Slectionner toutes les annes des films et des artistes : SELECT annee FROM films UNION SELECT annee_naissance AS annee FROM artistes ; Slectionner les noms de rles qui sont aussi des titres de films : SELECT nom_role AS nom FROM roles INTERSECT SELECT titre AS nom FROM films ; Slectionner les noms de rles qui ne sont pas des titres de films : SELECT nom_role AS nom FROM roles EXCEPT SELECT titre AS nom FROM films ; MySQL ignore ces trois oprateurs. Ce nest pas grave pour INTERSECT qui peut tre exprim avec une jointure. Il ny a pas dquivalent UNION mais cette opration est rarement utile. En revanche EXCEPT permet dexprimer des ngations, savoir toutes les requtes o on effectue une recherche en prenant des lignes qui nont pas telle ou telle proprit. Il sagit de la vritable limite de MySQL car il ny a pas dquivalent.
ESAT/DMSI/PROA/WGR
Page 85 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Dbut de commentaire : Sur d'autres bases SQL les commentaires commencent par (2 signes moins). MySQL utilise # pour dbuter un commentaire, mme si MySQL supprime aussi les lignes qui commencent par . Vous pouvez aussi utiliser le style de commentaires du langage C : /* Ceci est un commentaire */ avec MySQL.. MySQL n'accepte pas les commentaires commenant par car ce style de commentaire obsolte a dj caus de nombreux problmes avec les requtes gnres automatiquement, lorsque la base utilise un code comme celui ci : la valeur de paiement va tre place la place de !paiement!: UPDATE nom_table SET credit=credit-!paiement! Mais que se passe-t-il si la valeur de paiement est ngative?
ESAT/DMSI/PROA/WGR
Page 86 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 87 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Types date et heure : type DATETIME DATE TIMESTAMP TIME YEAR Types chane : type CHAR(M) VARCHAR(M) TINYBLOB, TINYTEXT BLOB, TEXT MEDIUMBLOB, MEDIUMTEXT LONGBLOB, LONGTEXT ENUM('value1','value2',...) SET('value1','value2',...)
espace mmoire requis 8 octets 3 octets 4 octets 3 octets 1 octet espace mmoire requis M octets, 1 <= M <= 255 L+1 bytes, avec L <= M et 1 <= M <= 255 L+1 octets, avec L < 2^8 L+2 octets, avec L < 2^16 L+3 octets, avec L < 2^24 L+4 octets, avec L < 2^32 1 ou 2 octets, suivant le nombre de valeurs dans l'numeration (65535 au maximum) 1, 2, 3, 4 ou 8 octets, suivant le nombre de membres de l'ensemble (64 membres au maximum)
Les types VARCHAR, BLOB et TEXT sont des types longueur variable, dont la taille de stockage dpend plus de la valeur qui leur est assigne que de leur taille maximale. Par exemple, une colonne de type VARCHAR(10) peut contenir une chane de 10 caractres aux maximum. La taille relle ncessaire est la longueur de la chane, plus 1 octet, qui stockera la taille relle de la chane. Par exemple, la chane 'abcd' occupe 5 octets. Les types BLOB et TEXT ont besoin de 1, 2, 3 ou 4 octets pour stocker la taille de la colonne, en fonction du type. Si une table possde au moins une colonne de longueur variable, l'enregistrement sera aussi de longueur variable. Il faut noter que lorsqu'une table est cre, MySQL peut, sous certaines conditions, changer le type d'une colonne de longueur variable en un type de colonne de longueur fixe, et vice-versa.. La taille d'un objet ENUM est dtermin par le nombre d'numrations diffrentes. 1 octet est suffisant pour dcrire une numration qui a jusqu' 255 valeurs diffrentes; 2 octets sont ncessaires pour dcrire une numration qui aurait jusqu' 65535 valeurs diffrentes. La taille d'un objet SET est dtermine par le nombre d'lments distincts qu'il contient. Si la taille d'un SET est N, le SET occupera (N+7)/8 octets, arrondie aux entiers 1,2,3,4, ou 8 octets. Un ensemble peut contenir jusqu' 64 lments. MySQL tente d'interprter un grand nombre de format de date, l'anne devra toujours tre place gauche. Les dates doivent tre donnes dans l'ordre anne-mois-jour (ex : '98-09-04'), plutt que dans l'ordre mois-jouranne ou l'ordre jour-mois-anne utiliss habituellement. (ex : '09-04-98', '04-09-98'). MySQL convertit automatiquement une date ou une heure en un nombre, si cette valeur est utilise dans un contexte numrique, et vice-versa. Quand MySQL rencontre une valeur pour une date ou une heure qui n'est pas valide, il la convertit en valeur `zro'. Les problmes de dpassement de capacits sont rgls comme pour les types numriques, en ramenant la valeur au maximum ou au minimum de l'intervalle autoris.
ESAT/DMSI/PROA/WGR
Page 88 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
On peut utiliser indiffremment les majuscules et les minuscules pour les mots cls de SQL. De mme les sauts de ligne, les tabulations et les espaces successifs dans un ordre SQL quivalent un seul espace pour linterprteur et peuvent donc tre utiliss librement pour clarifier la commande.
ESAT/DMSI/PROA/WGR
Page 89 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 90 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
array mysql_fetch_row(int result); Retourne une ligne de rsultat sous la forme d'un tableau. Elle va rechercher une ligne dans le rsultat associ lidentifiant de rsultat result. La ligne est retourne sous la forme dun tableau.. Chaque colonne est enregistre sous la forme dun tableau commenant la position 0. Lappel suivant mysql_fetch_row() retournera la ligne suivante dans le rsultat, ou faux (FALSE) sil ny a plus de ligne disponible. string mysql_field_name(int result, int field_index); Retourne le nom dun champ partir de son index. Les arguments de la fonction sont lidentifiant de rsultat result, et lindex de champ field_index numrot partir de 0. Ex : mysql_field_name($result,2); retournera le nom du troisime champ dans le rsultat associ $result. Pour des raisons de compatibilit ascendante, mysql_fieldname() peut encore tre utilise. int mysql_field_seek(int result, int field_ index); Place le pointeur de rsultat lindex de champ field_index. string mysql_field_table(int result, int field_index); Retourne le nom de la table o se trouve une colonne. Pour des raisons de compatibilit mysql_fieldtable() peut encore tre utilise. string mysql_field_type(int result, int field_index); Retourne le type de la colonne spcifie dans le rsultat courant result. Il vaudra "int", "real", "string", "blob", ou dautres, comme dtaill dans la documentation MySQL. Pour des raisons de compatibilit ascendante, mysql_fieldtype() peut encore tre utilise. string mysql_field_flags(int result, int field_index); Retourne le smaphore associ la colonne spcifie dans le rsultat courant. Les smaphores sont retourns comme des mots, spars par des espaces, ce qui les rend facile sparer, avec la commande explode(). Les valeurs suivantes (pour une version suffisamment rcente de MySQL) sont disponibles : "not_null", "primary_key", "unique_key", "multiple_key", "blob", "unsigned", "zerofill", "binary", "enum", "auto_increment", "timestamp". Pour des raisons de compatibilit ascendante, mysql_fieldflags() peut encore tre utilise. int mysql_field_len(int result, int field_index); Retourne la taille du champ spcifi par field_index. Pour des raisons de compatibilit ascendante, mysql_fieldlen() peut encore tre utilise. int mysql_free_result(int result); Libre toute la mmoire associe lidentifiant de rsultat result. mysql_free_result() ne doit tre appele que si vous avez utilis trop de mmoire durant lexcution de votre script. Pour des raisons de compatibilit ascendante, mysql_freeresult() peut encore tre utilise. int mysql_insert_id([int link_identifier]); Retourne l'identifiant AUTO_INCREMENTED lors de la dernire requte INSERT . gnr par un champ de type
int mysql_list_fields(string database_name, string table_name, [int link_identifier]); Liste les champs du rsultat MySQL . Elle recherche les informations propos de la table table_name. Les arguments sont la base de donnes database_name, et le nom de la table table_name. Un pointeur de rsultat est retourn, et pourra tre pass mysql_field_flags(), mysql_field_len(), mysql_field_name(), ou mysql_field_type(). Un identifiant de rsultat est un entier positif. La fonction retourne -1 si une erreur survient. Une chane dcrivant lerreur rencontre sera place dans la variable $phperrmsg, et, moins que la fonction n'ait t appele sous la forme @mysql(), cette erreur sera aussi affiche. Pour des raisons de compatibilit ascendante, mysql_listfields() est encore disponible. int mysql_list_dbs([int link_identifier]); Retourne un identifiant de rsultat, qui contiendra le nom des bases de donnes disponsibles sur le serveur MySQL.. Pour des raisons de compatibilit ascendante, mysql_listdbs() est encore disponible. int mysql_list_tables(string database_name, [int link_identifier]); Prend le nom d'une base de donnes comme argument, et retourne un identifiant de rsultat, qui contiendra la liste des tables. La fonction mysql_tablename() est le meilleur moyen d'extraire le nom des tables depuis l'identifiant de rsultat. Pour des raisons de compatibilit ascendante, mysql_listtables() est encore disponible. int mysql_num_fields(int result); Retourne le nombre de champs d'un rsultat. Pour des raisons de compatibilit ascendante mysql_numfields() est encore disponible.
ESAT/DMSI/PROA/WGR
Page 91 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
int mysql_num_rows(int result); Retourne le nombre de lignes d'un rsultat. Pour des raisons de compatibilit ascendante mysql_numrows() est encore disponible. int mysql_pconnect([string hostname [:port] [:/path/to/socket] ] , [string username] , [string password]); Ouvre une connexion persistante un serveur MySQL. Elle retourne un lien persistant positif en cas de succs, et sinon faux (FALSE) en cas d'erreur. Tous les arguments sont optionnels, et des valeurs par dfaut sont utilises en cas d'omission ('localhost', nom d'utilisateur propritaire du processus, mot de passe vide). Le nom de l'hte peut aussi inclure le numro de port, c'est dire "hostname:port" ou un chemin jusqu' la socket ":/path/to/socket" pour l'hte local. mysql_pconnect() se comporte exactement comme mysql_connect(), mais avec deux diffrences majeures : Premirement, lors de la connexion, la fonction essaie de trouver une connexion permanente dj ouverte sur cet hte, avec les mmes noms d'utilisateur et de mot de passe. Si une telle connexion est trouve, son identifiant est retourn, sans ouvrir de nouvelle connexion. Deuximement, la connexion au serveur MySQL ne sera pas termine avec la fin du script. Au lieu de cela, le lien sera conserv pour un prochain accs (mysql_close() ne terminera pas une connexion persistante tablie par mysql_pconnect()). C'est pourquoi ce type de connexion est dite 'persistant'. int mysql_query(string query, [int link_identifier]); Envoie une requte SQL la base de donnes actuellement active sur le serveur MysQL. Si link_identifier n'est pas prcis, la dernire connexion est utilise. Si aucune connexion n'a t ouverte, la fonction tentera d'en ouvrir une, avec la fonction mysql_connect() mais sans aucun paramtre (c'est dire avec les valeurs par dfaut). La chane de requte ne devrait pas se terminer par un point virgule. mysql_query() retourne un identifiant de rsultat que vous pouvez passer mysql_result(). mysql_query() retourne vrai (TRUE, ou non-zro) ou faux (FALSE), pour indiquer le succs ou l'chec de la requte. En cas de retour TRUE, la requte tait valide et a pu tre excute sur le serveur. Cela n'indique pas le nombre de lignes affectes, ou retournes. Il est parfaitement possible qu'une requte valide n'affecte aucune ligne ou ne retourne aucune ligne. mysql_query() chouera aussi et retournera aussi FALSE si les droits d'accs ne sont pas suffisants. int mysql_result(int result, int row, [mixed field]); Retourne le contenu d'un champ dans un rsultat MySQL. L'argument de champ peut tre un index de champ, ou le nom du champ, ou le nom de la table + point + le nom du champ (table.champ). Si la colonne a t aliase, utilisez de prfrence l'alias. Lorsque vous travaillez sur des rsultats de grande taille, vous devriez utiliser une des fonctions qui vont rechercher une ligne entire dans un tableau. Ces fonctions sont NETTEMENT plus rapide. De plus, l'utilisation d'un index numrique est aussi beaucoup plus rapide que de spcifier un nom litral. Les appels mysql_result() ne devraient pas tre mlangs avec d'autres fonctions qui travaillent aussi sur le rsultat. Les fonctions suivantes haut rendement sont RECOMMANDEES : mysql_fetch_row(), mysql_fetch_array(), et mysql_fetch_object(). int mysql_select_db(string database_name, [int link_identifier]); Selectionne une base de donnes MySQL. Elle retourne vrai (TRUE) en cas de succs, faux (FALSE) sinon. mysql_select_db() change la base de donnes active sur la connexion reprsente par l'identifiant de connexion link_identifier. Si aucun identifiant n'est spcifi, la dernire connexion est utilise. Sil n'y a pas de dernire connexion, la fonction tentera de se connecter seule, avec mysql_connect() et les paramtres par dfaut. Toutes les requtes suivantes avec mysql_query() seront faites avec la base de donnes active. Pour des raisons de compatibilit ascendante mysql_selectdb() est encore disponible. string mysql_tablename(int result, int link_identifier); Retourne le nom de la table que contient le champ spcifi par link_identifier. Elle prend le pointeur de rsultat result obtenu avec mysql_list_tables() ou bien un index entier, et retourne le nom de la table. La fonction mysql_num_rows() peut tre utilise pour dterminer le nombre de tables dans le pointeur de rsultat result. Exemple : mysql_pconnect("localhost:3306"); $result = mysql_list_tables("france"); for ($i=0 ; $i < mysql_num_rows($result) ; $i++) { $tb_names[$i] = mysql_tablename($result, $i); echo $tb_names[$i] . "<BR>"; }
ESAT/DMSI/PROA/WGR
Page 92 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
103.1. mysql_connect
Avant de penser travailler avec votre base de donnes, vous devez dans un premier temps vous connecter au serveur. Pour ce faire, PHP fournit la fonction mysql_connect(). Cette fonction ne ncessite aucun argument, mais accepte jusqu trois chanes : le nom dhte (hostname), un nom dutilisateur (username), et un mot de passe (password). Si vous omettez lun de ces arguments, la fonction suppose que localhost est le nom dhte et quaucun mot de passe ou nom dutilisateur na t dfini dans la table mysql user, moins que des valeurs naient t dfinies dans le fichier php.ini. Les valeurs par dfaut utilises sont : 'localhost', nom du propritaire du process, mot de passe vide. mysql_connect() renvoie un identifieur de lien si la connexion est russie, sinon faux (FALSE). Vous pouvez stocker cette valeur de retour dans une variable de faon tre en mesure de continuer travailler avec le serveur de base de donnes. Si un second appel mysql_connect() est fait avec les mmes arguments, PHP ne va pas ouvrir une nouvelle connexion, mais va retourner l'identifieur de la connexion dj ouverte. Le lien sera ferm automatiquement ds que l'excution du script sera termine, moins d'tre ferm explicitement avec mysql_close(). Syntaxe : Int identifieur = mysql_connect([string hostname [:port] [:/path/jusqu_a/socket]], [string username], [string password]) ; Exemple : $lien = mysql_connect("localhost","utilisateur1","mdp1") ; if( !$lien ) die("Connexion au serveur MySQL impossible ! ") ; la fonction mysql_pconnect() est similaire mysql_connect() et peut tre utilise lorsque vous utilisez PHP conjointement Apache. La diffrence est que la connexion ne prend pas fin lors de lachvement de lexcution de votre script ou lors de lappel de mysql_close() qui met fin une connexion standard au serveur MySQL. La connexion reste active, attendant un nouvel appel de mysql_pconnect().
103.2. mysql_close
mysql_close() ferme la connexion au serveur MySQL associe l'identifieur. Si cet identifieur n'est pas spcifi, cette commande s'applique la dernire connexion ouverte. Notez que cette commande n'est pas ncessaire, car toutes les connexions non persistantes seront automatiquement fermes la fin du script. mysql_close() ne ferme pas les connexions persistantes gnres par mysql_pconnect(). La fonction retourne vrai (TRUE) en cas de succs, et faux (FALSE) sinon. Syntaxe : int mysql_close([int identifieur] );
ESAT/DMSI/PROA/WGR
Page 93 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
103.3. mysql_select_db
Aprs avoir tabli une connexion avec MySQL, vous devez choisir la base de donnes avec laquelle vous dsirez travailler. La fonction mysql_select_db() permet de raliser cette opration. Cette fonction ncessite un nom de base de donnes et accepte en option un identifieur de lien. Si vous omettez celui-ci, lidentifieur suppos sera celui renvoy lors de la dernire connexion au serveur. Sil n'y a pas de dernire connexion, la fonction tentera de se connecter seule, avec les paramtres par dfaut. mysql_select_db() renvoie vrai (TRUE) si la base de donnes existe et si vous tes en mesure dy accder, sinon faux (FALSE). Pour des raisons de compatibilit ascendante mysql_selectdb() est encore disponible. Syntaxe : int mysql_select_db(string database_name, [int identifieur] ); Exemple : $database_name = "films" ; mysql_select_db($database_name) or die("Ouverture de la base de donnes $database_name impossible !") ;
103.4. mysql_error
Jusqu prsent, nous avons test les valeurs de retour des fonctions MySQL et appel die() pour mettre fin lexcution du script si un problme se produit. Vous pouvez cependant drirer afficher des messages dinformation plus nombreux dans le navigateur pour aider corriger les erreurs. MySQL dfinit une chane et un numro derreur lorsquune opration choue. Vous pouvez accder au numro derreur avec la fonction mysql_errno(), et la chane avec mysql_error(). mysql_error() retourne le texte associ l'erreur gnre lors de la dernire requte Syntaxe : string mysql_error([int identifieur] ); Exemple : <html> <head> <title>Ouverture dune connexion et slection dune base de donnes</title> </head> <body> <? echo "<form method='POST' action='#'>"; $utilisateur = "utilisateur1" ; $mdp = "mdp1" ; $bdd = "films" ; $lien = mysql_pconnect("localhost",$utilisateur,$mdp) ; if( !lien ) die("Connexion au serveur MySQL impossible ! : ". mysql_error() ) ; echo "<h2>Connexion au serveur russie !</h2>" ; mysql_select_db($bdd) or die("Ouverture de la base de donnes $bdd impossible ! : ". mysql_error() ) ; echo "<h2>Slection de la base de donnes $bdd russie !</h2>" ; echo "</form>"; ?> </body> </html>
ESAT/DMSI/PROA/WGR
Page 94 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
103.5. mysql_query
Pour effectuer rellement une requte SQL (select, create, delete, update , insert, ) vous pouvez utiliser la fonction mysql_query(). mysql_query() envoie la requte SQL la base de donnes actuellement active sur le serveur MySQL. Si lidentifieur n'est pas prcis, la dernire connexion est utilise. Si aucune connexion n'a t ouverte, la fonction tentera d'en ouvrir une, avec la fonction mysql_connect() mais sans aucun paramtre (c'est dire avec les valeurs par dfaut). La chane de requte ne doit pas se terminer par un point virgule. mysql_query() retourne un identicateur de rsultat (qui permet de rcuprer les rsultats des requtes) vrai (TRUE) ou faux (FALSE), pour indiquer le succs ou l'chec de la requte. En cas de retour TRUE, la requte tait valide et a pu tre excute sur le serveur. Cela n'indique pas le nombre de lignes affectes, ou retournes. Il est parfaitement possible qu'une requte valide n'affecte aucune ligne ou ne retourne aucune ligne. mysql_query() chouera aussi et retournera aussi FALSE si les droits d'accs ne sont pas suffisants. Pour connatre le nombre de lignes affectes par les commandes DELETE, INSERT, REPLACE, ou UPDATE vous pouvez appeler la fonction mysql_affected_rows(). Cette commande n'est pas possible aprs un SELECT, car elle ne fonctionne qu'aprs des commandes qui modifient les enregistrements. Pour connatre le nombre de lignes retournes par un SELECT, utilisez mysql_num_rows(). Pour les commandes SELECT , mysql_query() retourne un identificateur de rsultat que vous pouvez passer mysql_result(). Lorsque vous avez termin avec le rsultat, librez la mmoire avec mysql_free_result(). Syntaxe : int mysql_query(string requete, [int identifieur] ); Exemple : $requete = "select distinct num_titre from films.titres" ; //slection de tous les titres de la table titres de la base de //donnes films $result = mysql_query($requete) ; echo "la base de donnes $bdd contient ".mysql_num_rows($result)." titres de films diffrents<br>"; Lexemple suivant dcrit la cration dune table grades : echo "Dbut de la cration de la table grades..."; echo "<br>"; $ requete = "CREATE TABLE grades "; $ requete.= "("; $ requete.= "CodeGrade INTEGER(11) UNSIGNED NOT NULL DEFAULT 0 PRIMARY KEY AUTO_INCREMENT,"; $ requete.= "TriGramme VARCHAR(7) BINARY NULL DEFAULT NULL,"; $ requete.= "ClairGrade VARCHAR(50) BINARY NULL DEFAULT NULL"; $ requete.= ")"; $result = mysql_query($requete) ; // cette requte peut tre valide et retourner zro if(mysql_errno()) echo "Une erreur sest produite lors de la cration de la table grades : ".mysql_error() ; else echo "Fin de la cration de la table grades.<br> " ;
ESAT/DMSI/PROA/WGR
Page 95 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
103.6. mysql_fetch_array
Retourne un tableau qui contient la ligne demande, ou faux si il ne reste plus de ligne. mysql_fetch_array() est une version tendue de mysql_fetch_row(). En plus d'enregistrer les donnes sous forme d'un tableau d'indices numriques, il peut aussi les enregistrer dans un tableau associatif, en utilisant les noms des champs comme indices. Syntaxe : array mysql_fetch_array(int result, [int result_type] ); Si plusieurs colonnes ont le mme nom, la dernire colonne aura la priorit. Pour accder aux autres colonnes du mme nom, vous devez utiliser l'index numrique, ou faire un alias (as) pour chaque colonne. select t1.f1 as foo t2.f1 as bar from t1, t2 Il est important de souligner que cette fonction N'est PAS plus lente que mysql_fetch_row(), tandis qu'elle ajoute un confort d'utilisation. L'option result_type de mysql_fetch_array() est une constante qui peut prendre les valeurs suivantes : MYSQL_ASSOC, MYSQL_NUM, et MYSQL_BOTH. Exemple : <? mysql_pconnect($host,$user,$password); $id_result = mysql_db_query("base_RH","select nom, prenom from table_personnes"); while($row = mysql_fetch_array($id_result)) { echo "Nom : $row[nom], prnom : $row[prenom]<br>"; } mysql_free_result($result); mysql_close() ; ?>
ESAT/DMSI/PROA/WGR
Page 96 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
Page 97 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Vous pouvez complter cet exercice avec : 1. La cration de la table grades 2. Laffichage des tables de la base de donnes "resa_salles" 3. Laffichage des champs de la table grades <? echo "<form method='POST' action='#'>"; echo "<div align='center'>"; $lien = mysql_pconnect("localhost","","") ; if( !$lien ) { echo "Connexion au serveur MySQL impossible ! ".mysql_stat(); } else { echo "Connexion au serveur MySQL russie ! ".mysql_get_server_info() ; $bdd = "resa_salles"; echo "<br>Cration de la base de donnes : $bdd"; mysql_create_db($bdd); $id_result = mysql_list_dbs(); echo "<br>Nombre de bases de donnes : ".mysql_num_rows($id_result)."<br>"; $result = mysql_fetch_array($id_result); while ($result) { echo "Base de donnes : ".$result[0]."<br>"; $result = mysql_fetch_array($id_result); } mysql_select_db($bdd) or die("Slection de la base de donnes $bdd impossible ! : ". mysql_error() ) ; echo "<h2>Slection de la base de donnes '$bdd' russie !</h2>" ; echo "Dbut de la cration de la table grades..."; echo "<br>"; $requete = "CREATE TABLE grades "; $requete.= "("; $requete.= "CodeGrade INTEGER(11) UNSIGNED NOT NULL DEFAULT 0 PRIMARY KEY AUTO_INCREMENT,"; $requete.= "TriGramme VARCHAR(7) BINARY NULL DEFAULT NULL,"; $requete.= "ClairGrade VARCHAR(50) BINARY NULL DEFAULT NULL"; $requete.= ")"; $result = mysql_query($requete) ; // cette requte peut tre valide et retourner zro if(mysql_errno()) echo "Une erreur s'est produite lors de la cration de la table grades : ".mysql_error() ; else echo "Fin de la cration de la table grades.<br><br>" ; $id_tables = mysql_list_tables($bdd); $result_tables = mysql_fetch_array($id_tables); while ($result_tables) { echo "Table : ".$result_tables[0]."<br>"; $req = "select * from ".$result_tables[0]; $result_champs = mysql_query($req); $nb_champs = mysql_num_fields($result_champs); for($index_champ = 0 ; $index_champ < $nb_champs ; $index_champ++) { echo "Champ : ". mysql_field_name($result_champs, $index_champ) ."<br>";
ESAT/DMSI/PROA/WGR
Page 98 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
echo "type : ". mysql_field_type($result_champs, $index_champ) ."<br>"; echo "longueur : ". mysql_field_len($result_champs, $index_champ) ."<br><br>"; } $result_tables = mysql_fetch_array($id_tables); } } mysql_close(); echo "</div>" ; echo "</form>"; ?> Rsultat laffichage :
ESAT/DMSI/PROA/WGR
Page 99 sur137
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Function fetch_row() { return (mysql_fetch_row($this->_result_query)); } Function free() { return (mysql_free_result($this->_result_query)); } Function fetch_array() { return (mysql_fetch_array($this->_result_query)); } Function fetch_field() { return (mysql_fetch_field($this->_result_query)); } Function num_rows() { return (mysql_num_rows($this->_result_query)); } Function num_fields() { return (mysql_num_fields($this->_result_query)); } } ?> </body> </html>
Le script config.php3 dfinit les variables globales qui permettront la connexion la base de donnes : <? /*ce fichier de configuration permet de dfinir la base de donnes *(variables $host_resa, $base_resa, $user_resa, $password_resa). */ $host_resa = "localhost"; $base_resa = "resa_salles"; $user_resa = ""; $password_resa = ""; ?>
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
La classe grade dcrite ci-dessous contient les proprits et les mthodes qui permettront dinstancier un objet partir duquel nous soumettrons les requtes au serveur MySQL. Le constructeur cre un pointeur ($this->_new_database) sur un objet de la classe Database. Cest laide de ce pointeur que nous ferons appel aux fonctions lmentaires daccs MySQL. Cette classe sera incluse dans les exemples suivants laide de la fonction : include "grade.php3" ; Script grade.php3 : <html> <head> <title> classe grade </title> </head> <body> <? require "config.php3"; class grade { var $_search_result; var $_new_database; Function grade() { global $host_resa, $base_resa, $user_resa, $password_resa; $this->_new_database = new Database($host_resa, $base_resa, $user_resa, $password_resa); $this->_new_database->connect_database(); } Function ask_query($query) { $this->_new_database->query_database($query); } Function access_result() { return ($this->_search_result); } Function read_results() { $this->_search_result = $this->_new_database->fetch_array(); } Function num_results() { return ($this->_new_database->num_rows()); } } ?> </body> </html>
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Ce script remplit la table grades partir des donnes (spares par un ;) stockes dans le fichier "grades.csv" dont le contenu est affich la page suivante : <html> <head> <title> Remplissage de la table grades </title> </head> <body> <b> Dbut du remplissage de la table grades... </b> <br> <br> <? include "base.php3"; include "grade.php3"; $file = "grades.csv"; $new_grade = new grade(); echo "Dbut du vidage de l'ancienne table grades..."; echo "<br>"; $query = "DELETE FROM resa_salles.grades"; $new_grade->ask_query($query); echo "Fin du vidage de l'ancienne table grades."; echo "<br>"; echo "<br>"; echo "Dbut du remplissage de la nouvelle table grades..."; echo "<br>"; $result = file($file); for ($compteur = 1; $compteur <= 51; $compteur++) { $array = explode(";", $result[$compteur]); $query = "INSERT INTO resa_salles.grades (TriGramme,ClairGrade) VALUES "; $query .= "('"; $query .= $array[1] . "','"; $query .= addslashes($array[2]) . "')"; $new_grade->ask_query($query); } echo "Fin du remplissage de la nouvelle table grades."; ?> <br> <br> <b> Fin du remplissage de la table grades. </b> </body> </html>
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Contenu du fichier grades.csv : CodeGrade;TriGramme;ClairGrade; 1;TRS;Transmetteur; 2;1TRS;1er Transmetteur; 3;SCI;Scientifique du contingent; 4;CAL;Caporal; 5;CCH;Caporal-chef; 6;BRI;Brigadier; 7;BCH;Brigadier-chef; 8;SGT;Sergent; 9;SCH;Sergent-chef; 10;MDL;Marchal des logis; 11;MCH;Marchal des logis-chef; 12;ADJ;Adjudant; 13;ADC;Adjudant-chef; 14;MAJ;Major; 15;EOR;Elve officier de rserve; 16;ASP;Aspirant; 17;SLT;Sous-lieutenant; 18;LTN;Lieutenant; 19;CNE;Capitaine; 20;CDT;Commandant; 21;CBA;Chef de bataillon; 22;CEN;Chef d'escadron; 23;CES;Chef d'escadron; 24;LCL;Lieutenant-colonel; 25;COL;Colonel; 26;GDI;Gnral de division; 27;GBA;Gnral de brigade; 28;GCA;Gnral de corps d'arme; 29;GAR;Gnral d'arme; 30;AGT/C;Agent sur contrat; 31;OGR;Ouvrier de groupe; 32;ATE;Agent technique de l'lectronique; 33;ATPE;Agent technique principal de l'lectronique; 34;AA;Adjoint administratif; 35;AAP;Adjoint administratif principal; 36;TSEF;Technicien suprieur d'tudes et fabrication; 37;CCN;Controleur de classe normale; 38;CCS;Controleur de classe suprieure; 39;CCE;Controleur de classe exceptionnelle; 40;SACN;Secrtaire administratif de classe normale; 41;SACS;Secrtaire administratif de classe suprieure; 42;SACE;Secrtaire administratif de classe exeptionnelle; 43;IEF;Ingnieur d'tudes et fabrication; 44;INSP;Inspecteur des services; 45;IP;Inspecteur principal des transmissions; 46;ASA;Attach de service administratif; 47;CSA;Chef de service administratif; 48;AAC;Attach d'administration centrale; 49;M.;Monsieur; 50;MME;Madame; 51;MLLE;Mademoiselle;
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Ce script affiche le contenu de la table grades : <html> <head> <title> Affichage de la table grades </title> </head> <body> <? include "base.php3"; include "grade.php3"; $new_grade = new grade(); echo "Affichage du contenu de la table grades...<br><br>"; $query = "SELECT * FROM resa_salles.grades"; $new_grade->ask_query($query); $new_grade->read_results(); $result = $new_grade->access_result(); $cpt=0; echo "<table border='1'>"; while($result) { $cpt++; if( ($cpt%2) == 1 ) echo "<tr>"; // $cpt impair
echo "<td><font size='2'>"; print $result['TriGramme']; echo "</font></td> <td><font size='2'>"; print $result['ClairGrade']; echo "</font></td>"; if( ($cpt%2) == 0) // $cpt pair echo "</tr>"; $new_grade->read_results(); $result = $new_grade->access_result(); } echo "</table>"; ?> </body> </html>
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Rsultat laffichage :
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Les attributs particuliers du message (pice jointe, copie, etc.) doivent tre construits respectivement dans le corps et dans len-tte du message. Exemple simple : $adresse = "destinataire@fai1.com"; $sujet = "Envoi de message" ; $message = "Bonjour, voici mon premier message envoy avec PHP" ; $en_tetes = "From : expediteur@fai2.com\r\nReply-To : expediteur@fai2.com " ; // envoi du message if( mail($adresse, $sujet, $message, $en_tetes) ) echo "Votre message a t envoy avec succs : $adresse<br>" ; else echo "Lenvoi de votre message : $adresse a chou<br>" ; le script suivant permet denvoyer un message avec une pice jointe : $piece_jointe = $path_data."piece.txt"; $nom_fichier_pj = "piece.txt"; $contenu_mail = "Vous trouverez la rponse votre demande dans la pice jointe \"$ nom_fichier_pj \" "; $from = "Mon application PHP"; $objet_mail = "Envoi d\un message avec piece jointe"; $limite = "_parties_".md5(uniqid (rand())); $mail_mime = "Date: ".date("l j F Y, G:i")."\n"; $mail_mime .= "MIME-Version: 1.0\n"; $mail_mime .= "Content-Type: multipart/alternative;\n"; $mail_mime .= " boundary=\"----=$limite\"\n\n"; // Le message en texte simple pour les navigateurs qui n'acceptent pas le HTML $texte = "Ceci est un message au format MIME.\n"; $texte .= "------=$limite\n"; $texte .= "Content-Type: text/html; charset=\"US-ASCII\"\n"; $texte .= "Content-Transfer-Encoding: 7bit\n\n"; $texte .= $contenu_mail; $texte .= "\n\n"; // Attachement de la pice jointe $attachement = "------=$limite\n";
ESAT/DMSI/PROA/WGR Page 107 sur137 jj/10/OO
Cours Programmation
Langage PHP
php.doc
$attachement .= "Content-Type: application/octet-stream; name=\"$nom_fichier_pj\"\n"; $attachement .= "Content-Transfer-Encoding:base64\n\n"; $attachement .= chunk_split(base64_encode(implode("", file($piece_jointe)))); mail($adresse, $objet_mail, $texte.$attachement, "From: $from\n".$mail_mime);
Quelle que soit la taille spcifie dans cette variable cache, la taille du fichier transfr ne pourra pas dpasser la taille maximale spcifie dans le fichier php.ini (paramtre upload_max_filesize).
Si lupload sest droul correctement, ce stade, le fichier est dj prsent sur le serveur, et des variables globales ont intgr toutes les valeurs utiles la gestion de ce fichier. Elles sont au nombre de quatre : $nom_de_fichier : nom temporaire sous lequel le fichier a t enregistr sur le serveur. $nom_de_fichier_name : nom original du fichier sur la machine de lexpditeur. $nom_de_fichier_size : taille du fichier transfr, en octets. $nom_de_fichier_type : type MIME du fichier transfr, si le navigateur du client envoie cette information.
Le prfixe de ces quatre variables, savoir "nom_de_fichier", est le nom donn au champ de type file . Il peut bien entendu prendre nimporte quel nom.
On peut donc afficher ces renseignements, en guise de confirmation de transfert : <? echo "Le fichier $nom_de_fichier_name ($nom_de_fichier_size octets) de type $nom_de_fichier_type" ; echo " a t sauvegard sous le nom $nom_de_fichier" ; ?>
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
PHP propose deux fonctions pour grer ce codage : Urlencode() permet de coder une chane qui contient des caractres spciaux. Urldecode() est sa rciproque, cest--dire quelle remplace les codes hexadcimaux par leur caractre quivalent.
108.2. urlencode
Syntaxe : string urlencode(string str); Cette fonction retourne une chane dont les caractres non alphanumrique (hormis - et _) sont remplacs par des squences commenant par un caractre pourcentage (%) suivi de deux chiffres hexadcimaux. Les espaces sont remplacs par des signes plus (+). Cette fonction est pratique pour transmettre des informations via une URL. Cest aussi un moyen de passer des informations dune page lautre. Exemple : <? echo urlencode("http://www.url.org/page.php3? var1=valeur1& var2=valeur2") ; ?> Rsultat laffichage : http%3A%2F%2Fwww.url.org%2Fpage.php3%3F var1%3Dvaleur1%26 var2%3Dvaleur2
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
108.3. urldecode
Syntaxe : string urldecode(string str); Cette fonction dcode toutes les squences commenant par un % et les remplace par leur valeur. La chane ainsi dcode est retourne. Exemple : <? echo urldecode("http%3A%2F%2Fwww.url.org%2Fpage.php3%3F var1%3Dvaleur1%26 var2%3Dvaleur2") ; ?> Rsultat laffichage : http://www.url.org/page.php3? var1=valeur1& var2=valeur2
108.4. parse_url
Syntaxe : array parse_url(string url); Cette fonction retourne un tableau associatif contenant les diffrents lments de lURL. Les lments recherchs sont : "scheme", "host", "port", "user", "pass", "path", "query", et "fragment". Ils constituent chacun une des cls du tableau retourn. Seuls les lments qui possdent une valeur affecte sont retourns dans le tableau. Exemple : <? $tab = parse_url("http://www.url.org/page.php3?var1=valeur1&var2=valeur2") ; foreach($tab as $cle => $val) echo "$cle : $val<br>" ; ?> Rsultat laffichage :
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Variables caches
Le ? marque la sparation entre lURL de base, qui dsigne la page, et lextension de lURL, qui contient les variables. Le & marque la sparation entre chaque couple variable-valeur . Dans la page PHP rfrence, ces variables seront accessibles simplement par leur nom. Cette mthode permet donc trs facilement de transmettre des informations de page en page. Cependant, plusieurs facteurs sont prendre en compte : La taille dune URL est le plus souvent limite 2 ou 4 Ko (en fonction de lOS utilis), ce qui limite la quantit de variables et la longueur de leur valeur. Les URL saccommodent trs mal des caractres spciaux. Il faut donc penser encoder lURL au moment de sa construction, laide de la fonction urlencode(), afin de ne pas provoquer derreurs. Lappel la page seffectue ncessairement laide dun hyperlien ou dune fonction JavaScript. Le contenu des variables est visible dans la zone daffichage dURL du navigateur, ou dans la fentre dinformation quil propose, ce qui peut tre gnant pour des raisons de scurit ou de robustesse.
Page 111 sur137 jj/10/OO
ESAT/DMSI/PROA/WGR
Cours Programmation
Langage PHP
php.doc
Si le formulaire est envoy au moyen de la mthode GET, on se retrouve dans un contexte trs proche des URL longues, ce qui implique la mme limitation de longueur et la mme visibilit des valeurs transmises.
On considrera donc que le formulaire est envoy au moyen de la mthode POST. Pour transmettre les mmes valeurs que celles utilises dans lexemple prcdent, on aura le code HTML suivant : <FORM ACTION = "nom_de_la_page.php3" METHOD = POST NAME = "form1"> <INPUT TYPE = HIDDEN NAME = "variable1" VALUE = "valeur1"> <INPUT TYPE = HIDDEN NAME = "variable2" VALUE = "valeur2"> </FORM> Pour valider ce formulaire, et ainsi transmettre les variables la page "nom_de_la_page.php3", plusieurs solutions sont possibles : 1. Passer par un bouton classique de type submit , inclus dans le formulaire <INPUT TYPE = SUBMIT > 2. Passer par une image cliquable, incluse dans le formulaire <INPUT TYPE = IMAGE > 3. Passer par une fonction JavaScript, qui valide le formulaire ( document.form1.submit(); ) dclench par un clic sur un hyperlien ou sur un simple bouton <INPUT TYPE = BUTTON > (cette fonction fait appel la mthode POST du formulaire). Exemple : <INPUT TYPE = BUTTON VALUE = "Envoyer" NAME = "envoyer" OnClick=" document.form1.submit();"> Lexemple suivant est identique mais il ne fait pas appel la balise <FORM .>, ce qui oblige crire les couples variable-valeur, qui doivent tre passs, aprs le nom de la page appele : <INPUT TYPE = BUTTON VALUE = "Envoyer" NAME = "envoyer" OnClick=" document.location = "nom_de_la_page.php3?variable1=\"valeur1\"&variable2=\"valeur2\""> Seule la troisime mthode possde une restriction. En effet, toute action fonde sur du langage JavaScript est soumise au paramtrage du navigateur de lutilisateur, qui peut refuser son excution. Aucune autre contrainte ne vient trancher entre ces trois mthodes. Le choix doit donc tre effectu en fonction de lergonomie et du design des pages concernes.
109.2.3. Cookies
Un cookie est une information stocke sur le poste client, cest--dire sur celui o sexcute le navigateur. Comme pour les fonctions JavaScript, lutilisation des cookies est dpendante de la configuration du navigateur du client, ce qui peut constituer un handicap. En pratique, chaque cookie peut stocker une ou plusieurs informations. Le principal avantage de cette technique est quune information stocke dans un cookie peut tre consulte depuis nimporte quelle page ; il nest pas ncessaire de la faire passer de page en page tout au long de lapplication. En PHP, lutilisation des cookies est extrmement simple, et ne ncessite quune seule fonction : setcookie() La syntaxe de la fonction setcookie() est la suivante : int setcookie(string nom [,string valeur] [,int expiration] [,string chemin] [, string domaine] [, int secure]) ;
Le champ expiration spcifie la date au-del de laquelle le cookie ne sera plus valide (lorsque ce paramtre nest pas spcifi, le cookie devient permanent, moins dtre supprim manuellement). Les paramtres chemin et domaine peuvent tre utiliss en conjonction pour spcifier les URL auxquelles doit tre associ le cookie. Le mot cl secure vient indiquer que le cookie ne peut tre envoy que via une connexion HTTPS scurise. Si vous souhaitez affecter plusieurs valeurs un seul cookie, ajoutez [] au nom du cookie. Si le formulaire est envoy au moyen de la mthode GET, on se retrouve dans un contexte trs proche des URL longues, ce qui implique la mme limitation de longueur et la mme visibilit des valeurs transmises.
Page 112 sur137 jj/10/OO
ESAT/DMSI/PROA/WGR
Cours Programmation
Langage PHP
php.doc
Les Cookies font parties de l'entte HTTP, ce qui impose que la fonction setcookie() soit appele avant tout affichage sur le client. Elle doit donc tre appele avant la premire balise HTML, et avant nimporte quel envoi de commande PHP. Cest une erreur trs courante que de lire du code avec la fonction include() ou avec auto_prepend et davoir des espaces ou des lignes vides dans ce code qui produisent un dbut de sortie avant que setcookie() nai t appele. Exemple1 : <? // Ecriture des cookies ayant pour nom "variable1" et "variable2" sur le poste client setcookie("variable1", "valeur1") ; setcookie("variable2", "valeur2") ; // Pour accder ces cookies, il suffit dutiliser la variable globale du mme nom cre // automatiquement par PHP echo $variable1 ; // affiche la valeur du cookie "variable1" ?> Vous pouvez galement accder la valeur de la variable $variable1 via $HTTP_COOKIE_VARS["variable1"] Exemple2 : // $login et $password ont t pralablement saisis par lutilisateur // la classe utilisateur a t pralablement dfinie $new_utilisateur = new utilisateur(); $req = "select index_utilisateur, nom, password from utilisateurs"; // le contenu du champ password est crypt $new_utilisateur->ask_query($req); $new_utilisateur->read_results(); $result = $new_utilisateur->access_result(); $password_code = crypt($password,"xx"); $login = strtolower($login); $nom = strtolower($result['nom']); if( ($login == $nom) && ($password_code == $result['password']) ) { $index_util = $result['index_utilisateur']; setcookie("cook1",$index_util); setcookie("cook2",$login); setcookie("cook3",$password_code); header("Location: menu.php3"); // redirige le navigateur sur la page menu.php3 } else { echo "<script language=\"JavaScript\">"; echo "alert('Erreur ! Vous n\'avez pas t enregistr); echo "</script>"; }
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
A la fin de lapplication il ne faut pas oublier de rinitialiser les cookies, car leur existence sur le poste client est persistante. Exemple : // contenu de la page quitter.php3 <? setcookie("cook1",""); setcookie("cook2",""); setcookie("cook3",""); ?> <html> <head> <title></title> </head> <body onload="parent.close();" bgproperties="fixed"> </body> </html>
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
session_decode(string data) : Dcode les donnes de session partir de la chane data, et affecte les valeurs des variables de session. session_encode() : Encode les donnes de session dans la chane retourne.
Mise en uvre :
La premire opration consiste, lors de laccs au site, crer une session, puis transmettre son identifiant au navigateur. On fait alors appel la fonction session_start(), sans lui passer aucun paramtre. Cette fonction doit tre place en tout dbut de script. En effet, tant donn quelle gnre un cookie, elle doit tre place avant lenvoi des headers HTTP, sinon une erreur se produit. A ce moment, la session est cre. Elle charge les variables de session enregistres, afin que vous puissiez les utiliser. Lidentifiant est alors stock dans la constante SID, et dans la suite du script, lappel la fonction session_id() retourne la valeur de cet identifiant unique. Pour transmettre la valeur dune variable dune page une autre, il faut spcifier que lon souhaite faire enregistrer cette variable en tant que variable de session. Pour cela on utilise la fonction session_register(), laquelle on passe en paramtre le nom de la variable, dbarass de son prfixe $.
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Exemple1 : <? // test dexistence de session, sinon cration dune nouvelle session if ( $PHPSESSID ) session_start($PHPSESSID) ; else session_start() ; ?> <!-- Dbut du HTML, envoi des enttes par le serveur HTTP <html> <head> <title> PHP4 Session Start</title> </head> <body> <h1>PAGE 1 : PHP4 Session Start </h1> <hr><br> <!-- Affichage de lidentifiant de session, enregistrement dune variable au contexte de la session <? $id = session_id() ; $sname = session_name() ; echo "Votre identifiant de session est : $id<br>" ; echo "Le nom de cette session est : $sname<br>" ; // ajout de la variable $venant_depuis au contexte de la session $venant_depuis = $HTTP_REFERER ; // adresse de la page de rfrence session_register("venant_depuis ") ; ?> <!-Pour passer la cl de session la page suivante, il est conseill de la placer dans lURL de la page de destination. PHP4 propose un raccourci, afin de rendre cette criture plus concise et plus facile interprter. Le lien vers la page de destination scrira : <?=SID?>
<br> <hr> <center> <!--Ecriture courte <a href = "page_de_destination.php?<?=SID?>">Cliquer ici (criture courte)</a> <br><br> <!--Ecriture longue <a href = "page_de_destination.php?session_name()=session_id()">Cliquer ici (criture longue)</a> </center> </body> </html> Par la suite, toute autre page utilise dans la session devra rpercuter la cl de session sur les pages suivantes. Il faudra donc commencer chaque page par lcriture du test dexistence de session ( les 7 premires lignes de lexemple1). Exemple2 : Compter le nombre de visites dun utilisateur. <? session_start() ; session_register("compteur"); $compteur++; ?> Bonjour visiteur, vous avez vu cette page <? echo $compteur; ?> fois.<p> <!-- le <?=SID?> est ncessaire pour transmettre lidentifiant de session Pour continuer, <A HREF="nextpage.php?<?=SID?>">cliquez ici </A> Notez que la valeur de la variable $compteur est ajuste aprs que la variable a t enregistre. La procdure inverse aurait galement t correcte : ajuster la valeur puis enregistrer la variable. La valeur finale de la variable dans la page est celle qui sera disponible dans les pages subsquentes.
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
A la fin du script, la variable de session est gele jusqu son rechargement (automatique) par un autre appel de la fonction session_start(). Le prochain script doit par consquent lui aussi dbuter par un appel de la fonction session_start().
session.save_path
/tmp
session.use_cookies
1 (activ)
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
else {
// le nom et le mot de passe du visiteur ne sont pas corrects echo "<h1>Vous ntes pas autoris visiter notre site !</h1>" ;
} echo "</div>"; ?> Ce script pose nanmoins plusieurs problmes : Il possde un nom dutilisateur et un mot de passe inscrits directement dans son code source. Il enregistre et transmet le mot de passe en clair. Il ne protge quune seule page. Ces problmes peuvent tre rsolus de diffrentes manires.
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
// slection de la base de donnes 'resa_salles' mysql_select_db('resa_salles') or die("Slection de la base de donnes 'resa_salles' impossible ! : ". mysql_error()); // interrogation de la table 'util' pour chercher un enregistrement qui correspond $req = "select * from util where nom_util = '".$nom."' and mdp_util = '".$mdp_code."'"; $id_result = mysql_query($req); if(!$id_result) echo "Requte non valide !"; else { $nb = mysql_num_rows($id_result); if( $nb > 0 ) { // le nom et le mot de passe du visiteur sont corrects $row = mysql_fetch_array($id_result); echo "<h1>".$row['nom_util'].", Bienvenue sur notre site !</h1>"; } else { // le nom et le mot de passe du visiteur ne sont pas corrects echo "<h1>Vous n'tes pas autoris visiter notre site !</h1>"; } } } echo "</div>"; ?> </body> </html>
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Les scripts PHP sont en gnral compatibles entre diffrentes plates-formes, mais lutilisation de lauthentification de base se fonde sur des variables denvironnement dfinies par le serveur. Pour quun script dauthentification HTTP puisse tre excut sur Apache avec PHP, sous la forme dun module Apache, ou sur IIS laide de PHP, sous la forme dun module ISAPI, le script doit dtecter le type du serveur et se comporter en consquence. Dans le script suivant (auth_base.php3), nous allons voir que si lutilisateur na pas encore fourni dinformations dauthentification, elles lui seront demandes. Si des informations errones ont t fournies, lutilisateur obtient un message derreur. Si lutilisateur saisit un nom dutilisateur et un mot de passe valides, il peut accder au contenu de la page. <? //si nous utilisons IIS, nous devons dfinir $PHP_AUTH_USER et $PHP_AUTH_PW if( (substr($_SERVER["SERVER_SOFTWARE"],0,9) == "Microsoft") && ! isset($_SERVER["PHP_AUTH_USER"]) && !isset($_SERVER["PHP_AUTH_PW"]) && (substr($_SERVER["HTTP_AUTHORIZATION"],0,6) == "Basic ") ) { list($_SERVER["PHP_AUTH_USER"],$_SERVER["PHP_AUTH_PW"]) = explode(":",base64_decode(substr($_SERVER["HTTP_AUTHORIZATION"],6))); } if (!isset($_SERVER["PHP_AUTH_USER"])) { // utilisation de l'authentification de base, realm est le nom de domaine de scurit header("WWW-Authenticate: Basic realm=\"Mon application\""); } // l'instruction suivante peut tre remplace par une requte de base de donnes if (($_SERVER["PHP_AUTH_USER"] != "util1") || ($_SERVER["PHP_AUTH_PW"] != "passwd1")) { if(substr($_SERVER["SERVER_SOFTWARE"],0,9) == "Microsoft") header("Status: 401 Unauthorized"); // Microsoft IIS else header("HTTP/1.0 401 Unauthorized"); // Apache echo "<div align='center'>"; echo "<h1> Impossible ! Vous n'tes pas autoris !</h1>"; echo "</div>"; } else { // l'utilisateur est identifi echo "<div align='center'>"; echo "<h1>".$_SERVER["PHP_AUTH_USER"].", Bienvenue sur notre site !</h1>"; echo "</div>"; ?> <html> <head> <title>Utilisation d'une authentification de base dans PHP</title> </head> <body> <? phpinfo(); ?> </body> </html> <?
} ?> Lauthentification de base doit tre place au dbut du script, car elle doit tre la premire requte den-tte envoye par le navigateur.
Page 123 sur137 jj/10/OO
ESAT/DMSI/PROA/WGR
Cours Programmation
Langage PHP
php.doc
Excution du script auth_base.php3 : La bote de dialogue est affiche par le navigateur de lutilisateur :
Comme le mcanisme dauthentification est assist par des caractristiques intgres dans le navigateur, celui-ci peut grer sa faon les checs dauthentification. Par exemple, Internet Explorer permet aux utilisateurs deffectuer trois tentatives dauthentification avant dafficher une page derreur. Netscape Navigator permet aux utilisateurs deffectuer autant de tentatives quils le veulent, en affichant une bote de dialogue de confirmation aprs un chec. Netscape naffiche la page derreur que si lutilisateur clique sur le bouton Annuler de cette bote de dialogue.
Cours Programmation
Langage PHP
php.doc
Script rejet.html (exemple de page derreur) : <html> <body> <div align=center><h1>Vous ntes pas autoris visiter notre site !</h1></div> </body> </html> Le fichier .htaccess permet dactiver lauthentification de base dans un dossier et aux sous-dossiers de son propre dossier. Plusieurs paramtres peuvent tre dfinis dans un fichier .htaccess, mais les six lignes de lexemple cidessous sont toutes en rapport avec lauthentification. Exemple de fichier .htaccess : ErrorDocument 401 /rejet.html AuthUserFile /home/book/ .htpass AuthGroupFile /dev/null AuthName "nom_du_domaine_scuris" AuthType Basic Require valid-user La premire ligne : ErrorDocument 401 /rejet.html indique Apache le document afficher pour les visiteurs qui nont pas russi sauthentifier. Vous pouvez utiliser dautres directives ErrorDocument pour proposer vos propres pages derreur, la place des erreurs HTTP standard. En voici la syntaxe : ErrorDocument numero_d_erreur URL Pour une page qui gre lerreur 401, il est important que son URL soit disponible pour tout le monde. En effet, il nest pas trs intressant de fournir une page derreur personnalise indiquant aux utilisateurs que leur authentification a chou, si cette page se trouve dans un dossier ncessitant une authentification. La ligne : AuthUserFile /home/book/ .htpass indique Apache lendroit o il peut trouver le fichier contenant les mots de passe des utilisateurs autoriss. Ce fichier sappelle souvent .htpass, mais vous pouvez lui donner nimporte quel nom. Le nom de ce fichier na aucune importance, contrairement son emplacement. Il ne doit pas se trouver dans larborescence Web (/Apache Group/), ou dans nimporte quel dossier accessible depuis le serveur Web. Un exemple de fichier htpass est prsent un peu plus loin. La ligne : AuthGroupFile /dev/null permet dindiquer que seuls les utilisateurs autoriss et qui appartiennent certains groupes peuvent accder aux ressources . Ici AuthGroupFile pointe vers le fichier /dev/null, cela signifie que ce mcanisme ne nous intresse pas. En effet, le fichier /dev/null est un fichier spcial des systmes Unix qui ne contient rien du tout. La ligne : AuthName "nom_du_domaine_scuris" fournit un nom de domaine de scurit pour se servir de lauthentification HTTP. Ce nom apparatra vos visiteurs. La ligne : AuthType Basic spcifie la mthode dauthentification utilise. La dernire ligne : Require valid-user spcifie que nimporte quel utilisateur authentifi a le droit daccder aux pages. Vous pouvez galement dsigner des utilisateurs ou des groupes particuliers.
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Exemple de fichier .htpass : util1 : 0bL5eKkd7beL4 util2 : hd4Kkj2gFR22s util3 : zK5kjGF25fhLK util4 : 2JgiK4Fk1jfFD Chaque ligne du fichier .htpass contient un nom dutilisateur, le caractre deux-points :, et le mot de passe crypt de cet utilisateur. Pour crer ce fichier, vous pouvez vous servir dun petit programme appel htpasswd, fourni avec la distribution dApache. Le programme htpasswd peut tre utilis de lune des manires suivantes : htpasswd [cmdps] nom_du_fichier_des_mots_de_passe nom_d_utilisateur Ou : htpasswd b[cmdps] nom_du_fichier_des_mots_de_passe nom_d_utilisateur mot_de_passe_utilisateur La seule option que vous devrez utiliser est c. cette option demande htpasswd de crer le fichier. Vous devez utiliser cette syntaxe pour le premier utilisateur que vous ajoutez. Faites attention de ne pas lutiliser pour les autres utilisateurs, puisque si le fichier existe dj, htpasswd le supprime et en cre un nouveau. Les options m, d, p et s peuvent tre utilises si vous souhaitez spcifier lalgorithme de cryptage utiliser (ou bien aucun dentre eux). Loption b demande au programme de prendre le mot de passe en paramtre, au lieu de le demander. Cette approche est intressante si vous souhaitez appeler htpasswd dune manire non interactive, dans un processus de traitement par lots, mais elle ne doit pas tre utilise si vous invoquez htpasswd partir de la ligne de commande. Les commandes suivantes ont t utilises pour crer le fichier prsent ci-dessus : htpasswd bc /home/book/.htpass util1 passwd1 htpasswd b /home/book/.htpass util2 passwd2 htpasswd b /home/book/.htpass util3 passwd3 htpasswd b /home/book/.htpass util4 passwd4 Utilisation : Les noms dutilisateurs et les mots de passe sont enregistrs dans un fichier texte. Chaque fois quun navigateur demande un fichier qui est protg par le fichier .htaccess, le serveur doit analyser le fichier .htaccess, puis analyser le fichier des mots de passe, et tenter de trouver un nom dutilisateur et un mot de passe qui correspondent. Au lieu dutiliser un fichier .htaccess, vous pouvez spcifier les mmes lments dans le fichier httpd.conf, fichier de configuration principal du serveur Web (/Apache Group/). Un fichier .htaccess est analys chaque fois quun fichier est demand. En revanche, le fichier httpd.conf nest analys quune seule fois, au dmarrage du serveur. Cette approche est donc plus rapide, mais elle signifie que si vous souhaitez apporter des modifications, il faut interrompre et redmarrer le serveur. Le fichier des mots de passe quant lui, devra tre analys pour chaque requte. Cela signifie que, comme pour les autres techniques, cette approche nest pas approprie pour authentifier des centaines voire des milliers dutilisateurs.
Cours Programmation
Langage PHP
php.doc
Internet
Serveur Web
Moteur PHP
Moteur MySQL
Fichiers de donnes
Donnes MySQL
Les dtails de chaque transaction sur votre systme peuvent varier lgrement, en fonction de larchitecture de votre systme, et des donnes ou des actions des utilisateurs qui ont entran la transaction, mais le principe reste le mme. Chaque transaction entre une application Web et un utilisateur commence par un envoi au niveau du navigateur de lutilisateur dune requte vers le serveur Web, passant par Internet. Si la page est un script PHP, le serveur Web dlgue le traitement de la page au moteur PHP. Le script PHP peut lire ou crire des informations sur le disque. Il peut galement faire appel dautres fichiers PHP ou HTML, avec include() ou require(). Il peut galement envoyer des requtes SQL au dmon MySQL, et recevoir les rponses correspondantes. Le moteur MySQL soccupe de lire et dcrire ses propres donnes sur le disque. Ce systme est compos de trois parties : 1. Lordinateur de lutilisateur : celui-ci fait tourner un navigateur Web. Vous ne pouvez pas contrler les autres facteurs de ce systme, par exemple sa scurit. Il faut se rappeler que cet ordinateur peut tre trs peu scuris, ou quil peut mme sagir dun terminal partag. Il faut galement savoir que certaines personnes dsactivent plusieurs caractristiques quils considrent comme peu scurises, par exemple Java, les cookies ou JavaScript. Les fonctionnalits fournies par PHP peuvent tre compatibles avec nimporte quel navigateur, puisque le rsultat final est essentiellement une page HTML. A partir du moment o lon traite avec des scripts JavaScript ( part peut-tre les plus simples), il faut prendre en compte les capacits et la configuration de chaque navigateur. Du point de vue de la scurit, il vaut mieux avoir recours des scripts PHP au niveau du serveur pour la validation des donnes, puisque de cette manire votre code source nest pas accessible aux utilisateurs. Si vous validez des donnes avec JavaScript, les utilisateurs pourront rcuprer la source du script, et ventuellement la modifier. Les donnes qui doivent tre conserves peuvent tre enregistres sur le serveur Web, dans votre base de donnes, ou sur lordinateur de lutilisateur sous la forme de cookies. Nanmoins, si les informations sont stockes en dehors de votre systme, vous ne pouvez pas contrler leur niveau de scurit, vous ne pouvez pas vous assurer que lutilisateur ne les effacera pas, et vous ne pouvez pas empcher lutilisateur de les modifier.
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
2. Internet : celui-ci possde plusieurs caractristiques trs intressantes, mais il sagit par essence dun rseau peu scuris. Lorsque vous envoyez des informations dun point un autre, il ne faut pas oublier que dautres personnes peuvent intercepter ou modifier les informations transmises. Vous pouvez donc choisir de crypter les informations avant de les transmettre, pour garantir leur confidentialit ou pour les protger contre dventuelles tentatives de modification. Il existe au moins deux moyens de scuriser les informations que vous transmettez sur Internet/Intranet : - SSL (Secure Sockets Layer) - S-HTTP (Secure Hyper Text Transfer Protocol) Ces deux technologies permettent de transmettre des messages la fois confidentiels et robustes, mais SSL est dj largement utilis et disponible, alors que S-HTTP nen est qu ses dbuts. 3. Votre systme : Il convient denvisager le cas dune transmission de donnes entre plusieurs composants de votre systme, en passant par un rseau. A titre dexemple, on peut citer une base de donnes MySQL qui se trouverait sur un autre ordinateur que votre serveur Web. Dans ce cas, PHP se connecte votre serveur MySQL via TCP/IP, et cette connexion nest pas crypte. Si les deux ordinateurs participants cette communication appartiennent un rseau local priv, vous devez vous assurer que ce rseau est scuris. Si les ordinateurs communiquent via Internet, votre systme sera probablement ralenti, et vous devrez traiter cette connexion de la mme manire que toute autre connexion passant par Internet. PHP ne possde aucun moyen intgr dtablir ses connexions via SSL. Linstruction fopen() supporte HTTP, mais pas HTTPS. Cependant, vous pouvez utiliser SSL grce la bibliothque cURL. Il est important que vos visiteurs, partir du moment o ils pensent traiter avec vous, soient rellement en connexion avec votre site. Vous pouvez vous procurer un certificat numrique pour les protger dun autre site qui se ferait passer pour le votre, mais aussi pour vous permettre dutiliser SSL sans afficher de message davertissement chez vos utilisateurs.
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Les protocoles rseau et les logiciels qui les implmentent sont gnralement organiss en couches, que lon appelle aussi des niveaux. Chaque niveau peut transmettre des donnes (ou demander des services) au niveau suprieur ou au niveau infrieur. Lorsque vous vous servez du protocole HTTP pour transfrer des informations, celui-ci fait appel au protocole TCP (Transmission Control Protocol), qui son tour sappuie sur le protocole dInternet (IP). Ce protocole a lui-mme besoin dun protocole appropri pour le priphrique rseau qui soccupe de transmettre les paquets de donnes vers leur destination, en passant par un support lectrique. Lorsque des donnes sont envoyes, elles traversent ces couches de lapplication jusquau rseau physique. Lorsque des donnes sont reues, elles traversent ces couches dans lautre sens, du rseau physique jusqu lapplication. Lutilisation de SSL ajoute un niveau supplmentaire, ainsi que des protocoles dans le niveau dapplication. Le niveau SSL se situe entre le niveau de transport et le niveau dapplication. Le niveau SSL modifie les donnes de votre application HTTP avant de les envoyer au niveau de transport, qui les enverra vers leur destination.
HTTP Protocole daccord SSL Changement de Cryptage SSL Protocole dalerte SSL
Niveau dapplication Niveau SSL Niveau de transport Niveau rseau Niveau hte vers rseau
111.2. Processus
Le navigateur de lutilisateur entre en communication avec le serveur. Ce dernier possde dj sa paire de cls publique/prive. Cest cette paire de cls quil utilise dans ses communications avec tous les logiciels clients. Le processus est le suivant : 1. Une fois reconnu par le logiciel serveur, le logiciel client gnre une paire de cls publique/prive. 2. Le logiciel client demande au logiciel serveur de lui fournir sa cl publique (celle du serveur). 3. La cl publique du client est aussitt crypte avec la cl publique du serveur, puis transmise au serveur. 4. Le serveur dcode le message laide de sa cl prive, puis authentifie la cl publique de lutilisateur. 5. Le serveur envoie ensuite au logiciel client une confirmation crypte, du bon droulement de lopration. Toutes les informations futures, changes entre lutilisateur et le serveur, seront dsormais cryptes. De plus, seul ce serveur est en mesure de communiquer avec cet utilisateur, car il est le seul connatre la cl publique de cet utilisateur. Lutilisateur et le serveur peuvent maintenant changer toutes les donnes voulues, de faon sre. Lensemble de ce processus est compltement transparent pour lutilisateur. Avec ce protocole, une nouvelle paire de cls est gnre chaque tablissement de la communication entre le logiciel client de lutilisateur et le logiciel serveur. La communication est donc entirement sre, mais en aucun cas le serveur ne peut sassurer de lidentit de lutilisateur lautre extrmit. Une faon de rsoudre ce problme est de joindre ce processus un systme de validation, par exemple un numro didentification personnel, qui sobtient par une inscription pralable.
111.3. Fonctionnement
Le systme repose sur lalgorithme RSA, un standard utilis pour le cryptage des donnes et la signature de messages lectroniques. Cet algorithme est trs utilis pour lauthentification et le cryptage des donnes dans le domaine informatique. Deux paires de cls (une pour le verrouillage, lautre pour le dverrouillage) 40 bits sont utilises. Chaque paire est compose dune cl publique et dune cl prive. La cl publique est distribue, alors que la cl prive ne lest jamais ; cette dernire est toujours garde secrte. Les donnes cryptes avec la cl publique peuvent uniquement tre dcryptes avec la cl prive, et inversement.
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
111.4. Certificats
Un certificat est un document lectronique qui atteste quune cl publique est bien lie une organisation ou un individu. Il permet la vrification de la proprit dune cl publique, afin de prvenir la contrefaon de cls publiques. Un certificat contient gnralement une cl publique, un nom, ainsi que dautres champs qui identifient le propritaire, une date dexpiration, un numro de srie, le nom de lorganisation qui contresigne le certificat, et la signature elle-mme. Le format des certificats est dfini par la norme X509. Le certificat donne donc lassurance que les informations quil contient sont exactes. Pour cela, le certificat doit tre gnr par un tiers de confiance, cest--dire un organisme indpendant, qui contrle la vracit de ces informations. Le CA (Certifying Autority, lorganisme certificateur) donne la crdibilit au certificat. Il existe deux types de certificats utiliss avec SSL : pour le serveur et pour le client. Techniquement, ils utilisent le mme format, mais diffrent par linformation quils contiennent. Ainsi, un certificat ct client sert identifier un utilisateur ; il contiendra donc des informations sur cet utilisateur. Ct serveur, le certificat a pour mission dauthentifier le serveur, ainsi que lorganisme qui lexploite. cest ce type de certificat dont vous avez besoin dans la mise en place dun serveur scuris HTTPS.
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
a:11:{i:0;i:0;i:1;i:2;i:2;i:4;i:3;i:6;i:4;i:8;i:5;i:10;i:6;i:12;i:7;i:14;i:8;i:16;i:9;i:18;i:10;i:20;}
Le premier caractre indique le type de lobjet srialis : a : array o : objet s : string Le nombre suivant correspond la taille de lobjet (nombre dlments). Entre les accolades nous trouvons le contenu de lobjet : - pour un tableau nous avons le type et la valeur de chaque indice suivi du type et de la valeur de chaque lment, - pour un objet nous avons le type, la longueur (pour les string), le nom suivi du type de la valeur, de la longueur de la valeur et de la valeur de chaque proprit. Voici, en exemple, la srialisation de lobjet $v1 dfini et initialis prcdemment : $serial_v1 = serialize($v1); echo $serial_v1; Rsultat laffichage :
Ne pas oublier dutiliser la fonction addslashes() avant dcrire des donnes de type chane de caractres dans une base de donnes. Pour replacer les donnes dans leur format dorigine, il suffit dinvoquer la fonction unserialize(). Bien entendu, si la fonction addslashes() a t invoque avant le stockage de lobjet dans la base de donnes, la fonction stripslashes() doit tre appele avant de d srialiser la chane.
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Si vous rencontrez des difficults lors du chargement dynamique dune extension, vrifiez lajustement du paramtre de configuration enable_dl dans le fichier php.ini (voir la copie dcran ci-dessus). Ce paramtre doit tre activ (On) pour que linterprteur PHP puisse charger dynamiquement des extensions. Il peut toutefois tre dsactiv pour des raisons de scurit, notamment si vous travaillez sur un ordinateur qui ne vous appartient pas. Par ailleurs, la fonction dl() nest pas utilisable si PHP est excut en mode scuris. Les fichiers DLLs des extensions PHP sont prfixs par 'php_' en PHP 4, et 'php3_' en PHP 3. Cela vite la confusion des extensions PHP et de leurs librairies.
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
En PHP 4.0.4pl1, les extensions BCMath, BCMath, Calendar, COM, FTP, MySQL, ODBC, PCRE, Sessions, WDDX et XML sont actives par dfaut . Vous n'avez rien faire pour qu'elles soient incluses. Lisez le fichier README.txt ou install.txt dans votre distribution pour connatre la liste des modules par dfaut. Certaines de ces extensions requirent des librairies DLL supplmentaires pour fonctionner correctement. Certaines d'entre elles sont disponibles dans la distribution. dans le dossier dlls mais certaines (comme Oracle (php_oci8.dll)), demandent des dlls qui ne sont pas dans la distribution. Copiez les dlls fournies depuis le dossier dlls dans votre PATH Windows. Les bons emplacements sont typiquement c:\windows\system pour Windows 9x/Me c:\winnt\system32 pour Windows NT/2000 Si elles sont dj installes sur votre systme, ne les crasez que si PHP ne fonctionne pas correctement (et de toutes manires, faites une sauvegarde de ces DLL, en cas de problme). Extensions PHP : Extension
php_bz2.dll php_calendar.dll php_cpdf.dll php_crypt.dll php_ctype.dll php_curl.dll php_cybercash.dll php_db.dll php_dba.dll php_dbase.dll php3_dbm.dll php_domxml.dll php_dotnet.dll php_exif.dll php_fbsql.dll php_fdf.dll php_filepro.dll php_ftp.dll php_gd.dll php_gettext.dll php_hyperwave.dll php_iconv.dll php_ifx.dll php_iisfunc.dll php_imap.dll php_ingres.dll php_interbase.dll php_java.dll php_ldap.dll php_mhash.dll php_ming.dll php_msql.dll php3_msql1.dll php3_msql2.dll php_mssql.dll php3_mysql.dll php_nsmail.dll php3_oci73.dll
Description
Fonctions de compression Bzip2 Fonctions de conversions calendaires (Depuis PHP 4.03, elles sont actives par dfaut) Fonctions ClibPDF Fonctions de cryptage Fonctions ctype Fonctions CURL Fonctions de paiement Cybercash Fonctions DBM Fonctions dbm-style Fonctions DBase Librairie d'mulation GDBM via Berkely DB2 Fonctions DOM XML Fonctions .NET Enttes EXIF des images JPEG Fonctions FrontBase Fonction FDF (Forms Data Format) Lecture des bases filepro Fonctions FTP Bibliothque GD (pour les manipulations d'images) Fonctions GNU Gettext Fonctions HyperWave Fonctions de conversions ICONV Fonctions Informix Fonctions IIS Fonctions IMAP 4(en PHP 3:@: php3_imap4r1.dll) Fonctions Ingres II Fonctions InterBase Extension Java Fonctions LDAP Fonctions Mhash Fonctions Ming pour Flash Fonctions mSQL Fonctions mSQL 1 Fonctions mSQL 2 Fonctions MSSQL (anciennement php_mssql70.dll, requiert MSSQL DB-Libraries) Fonctions MySQL (Actives par dfaut en PHP 4) Fonctions Netscape mail Fonctions Oracle Aucune
Notes
Active automatiquement depuis PHP 4.0.3 Aucune Aucune Requiert :@: libeay32.dll, ssleay32.dll (fournies) Aucune Obsolte. Utilisez DBA la place (php_dba.dll) Aucune Aucune Aucune Requiert :@: libxml2.dll (fournie) Aucune Aucune Aucune Requiert:@: fdftk.dll (fournie) Accs en lecture seule Active par dfaut depuis PHP 4.0.3 Aucune Requiert :@: gnu_gettext.dll (fournie) Aucune Requiert :@: iconv-1.3.dll (fournie) Requiert:@: librairies Informix Aucune PHP 3:@: php3_imap4r1.dll Requiert:@: librairies Ingres II Requiert:@: gds32.dll (fournie) Requiert:@: jvm.dll (fournie) Requiert:@: libsasl.dll (fournie) Aucune Aucune Requiert:@: msql.dll (fournie) Aucune Aucune Requiert:@: ntwdblib.dll (fournie) Aucune Aucune Aucune
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation php_oci8.dll php_openssl.dll php_oracle.dll php_pdf.dll php_pgsql.dll php_printer.dll php_sablot.dll php_snmp.dll php_sybase_ct.dll php_yaz.dll php_zlib.dll Fonctions Oracle 8 Fonctions OpenSSL Fonctions Oracle Fonctions PDF Fonctions PostgreSQL Fonctions d'impression Focntions XSLT Fonctions SNMP get et walk Fonctions Sybase Fonctions YAZ Fonctions ZLib
Langage PHP
php.doc Requiert:@: librairies clientes Oracle 8 Requiert:@: libeay32.dll (fournie) Requiert:@: librairies clientes Oracle 7 Aucune Aucune Aucune Requiert:@: sablot.dll (fournie) NT uniquement! Requiert:@: librairies clientes Sybase Aucune Aucune
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
Les sources de PHP peuvent tre tlcharges sur le site http://www.php.net Les sources de Apache peuvent tre tlcharges sur le site http://www.apache.org Les sources de MySQL peuvent tre tlcharges sur le site http://www.mysql.org
(Il s'agit de choisir l'extension associe aux scripts PHP. Par souci d'homognit, il est courant de choisir l'extension .php3 pour php3.0 ou .php pour php4) 8. Dmarrez le serveur Apache. (Il est essentiel d'arrter et redmarrer le serveur, et non uniquement de le relancer). Il suffit gnralement de taper apachectl stop, puis apachectl start.
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
ESAT/DMSI/PROA/WGR
jj/10/OO
Cours Programmation
Langage PHP
php.doc
18. Bibliographie
Les ouvrages qui ont servi llaboration de ce support :
PHP & MySQL de Luke Welling et Laura Thomson aux ditions Campus Press Programmation Web avec PHP de L. Lacroix, N. Leprince, C. Boggero, et C. Lauer aux ditions Eyrolles Pratique de MySQL et PHP de Philippe Rigaux aux ditions OREILLY Lintro PHP4 de Matt Zandstra aux ditions Campus Press www.commentcamarche.fr fr2.php.net/manual/fr www.yellis.net/docs
ESAT/DMSI/PROA/WGR
jj/10/OO