Ministère de l’Enseignement Supérieur et de la Recherche Scientifique Direction Générale des Études Technologiques Institut Supérieur des Études Technologiques de Kélibia Département des technologies de l’informatique Houda TOUKABRI Technologue Version 2018
Pré requis Maitriser le langage HTML Avoir les bases de la programmation et de l’algorithmique Public concerné 2 eme niveau de licence appliquée en informatique Objectif général À l’issue de ce cours, l’étudiant sera capable de maîtriser le processus de mise en œuvre et de développement d’une application web dynamique. Objectifs spécifiques vV Distinguer le principe de la programmation web dynamique et du fonctionnement d’un serveur PHP. Programmer avec le langage PHP Maîtriser le processus de mise en œuvre d’une application web dynamique avec PHP. Reconnaitre l’intérêt de la sécurité des pages web à travers le langage PHP Mode d'évaluatio „\S Contrôle continu Charge horaire 1.5h par semaine soit 22.5 heures par semestre
Développement côté serveur Plan du cours Chapitre 1. Introduction au langage PHP Site web statique vs site web dynamique Site web statique Site web dynamique Comparaison PHP : Qu’est-ce que c’est ? Définition Origine et histoire Les caractéristiques du langage PHP 1.3. Syntaxe élémentaire de PHP Intégration à HTML Les instructions Les commentaires Les instructions d’affichage :\_Ji Chap ‘ re! “‘““ d ^ d " n, *" PHP ^ 2.1. Les variables Déclaration des variables Types de variables Les variables dynamiques Les variables d’environnement Les fonctions prédéfinies de manipulation de types %*.2.1. Fonctions de gestion des variables Fonctions de gestion des chaînes Les constantes Les constantes prédéfinies Les constantes magiques Les constantes définies par le développeur ISET Kélibia: H.TOUKABRI
Développement côté serveur Plan du cours 2.4. Les opérateurs Définition Catégories des opérateurs Chapitre 3. Les structures de contrôle Introduction Structures conditionnelles L’instruction if else La structure switch 3.3. Structures répétitives L’instruction for L’instruction while L’instruction do..while 3.4. Branchements inconditionnel Saut inconditionnel (continue) *A\ Arrêt inconditionnel (break) Chapitre 4. Les tableaux V Qu’est-ce qu’un tableau ? Types des tableaux Tableau simple (scalaire) Tableau associatif Parcours d’un tableau v ^ V x ♦ Boucle for r Boucle foreach La fonction print_r Les tableaux multidimensionnels Définition Accès aux éléments Parcours d’un tableau multidimensionnel ISET Kélibia: H.TOUKABRI
Développement côté serveurPlan du cours 4.5. Opérations sur les tableaux Chapitre 5. Les fonctions Qu’est-ce qu’une fonction ? Visibilité des variables Portée des variables Passage de paramètres Par valeur Par référence Quelques fonctions internes de PHP Fonctions de gestion des arguments Inclusion de fichiers Fonctions sur les dates r\V Chapitre 6. Gestion des formulaires Introduction Méthode GET Méthode POST La fonction extract La fonction import request variables Validation des données : Expressions régulières Définition Utilité Syntaxe de base Fonctions de manipulation des expressions régulières Chapitre 7. L’orienté objet avec PHP Notion de classe Qu’est-ce qu’une classe ? Composition d’une classe Visibilité des attributs et des méthodes iii ISET Kélibia: H.TOUKABRI
Développement côté serveur Plan du cours Déclaration d’une classe 7.2. Notion d’objet Qu’est-ce qu’un objet ? Création d’un objet Utilisation des objets Accès aux attributs Accès aux constantes Accès aux méthodes La variable courante $this 7.5. Les méthodes magiques _construct () et_destruct () _get () _set () _isset () et_unset () _toString () _call () _clone () 7.6. L’héritage Définition Redéfinition des méthodes Classe et méthode abstraite Classe et méthode finale..... Chapitre 8. Persistance des données Gestic lestion des fichiers Fonctions de manipulation des fichiers Upload de fichiers Redirection PHP PDO Définition ISET Kélibia: H.TOUKABRI iv
Développement côté serveur Plan du cours Gestion de connexion Exécution d’une requête Exploitation du résultat d’une requête Select Les requêtes préparées Gestion des erreurs Gestion des transactions Chapitre 9. Sessions, Cookies et s 9.1. Les sessions Principe Utilisation Fin de session Les cookies Définition Création : la fonction setcookie() Accès : tableau superglobal $_COOKIE J Suppression d’un cookie Les s Chapitre 10. La sécurité avec PHP Introduction Attaque Cross Site Scripting (XSS) Définition Conséquences possibles Remèdes Attaque Cross Site Request Forgery (CSRF) Définition Conséquences possibles Remèdes Attaque par injection SQL Définition Conséquences possibles ISET Kélibia: H.TOUKABRI
Développement côté serveur Plan du cours Remèdes Attaque Local File Inclusion (LFI) ou Remote File Inclusion (RFI) Définition Conséquences possibles Remèdes Travaux dirigés (TD) TD N° 1 TD N° 2 TD N° 3 TD N° 4 TD N° 5 Corrigés des TD Correction TD N° 1 Correction TD N° 2 Correction TD N° Correction TD N° 4 Correction TD N° 5 Bibliographie, Annexe A. Les variables d’environnement Annexe B. Les constantes prédéfinies iv Annexe C. Les constantes magiques ix Annexe D. Les fonctions de manipulation de fichiers x i ISET Kélibia: H.TOUKABRI Vi
Développement côté serveur Chapitre 1. Introduction au langage PHP Objectifs spécifiques À l’issue de ce chapitre l’étudiant serait capable de : Distinguer la différence entre un site web statique et un site web dynamique Reconnaitre le langage PHP et ses caractéristiques Intégrer du code PHP à HTML Manipuler les instructions élémentaires en PHP Durée 45 mn Plan du chapitre 1.1. Site web statique vs site web dynami Site web statique Site web dynamique Comparaison V e s> # 1.2. PHP : Qu’est-ce que c > e c’est ? Définiti Origine et histoire Les caractéristiques du langage PHP xe élémentaire de PHP Intégration à HTML Les instructions Les commentaires Les instructions d’affichage ISET Kélibia: H.TOUKABRI 7
Développement côté serveur Chapitre 1. Introduction au langage PHP 1.1. Site web statique vs site web dynamique Site web statique Un site web statique est un site où chacune des pages est créée en HTML. Un ordinateur (à travers un navigateur internet) qui se connecte au serveur et demande une page. Celle-ci lui est directement servie sans compilation ni traitement par le serveur. (Voir Figure 1-1) Client Demande d’une page statique Envoi de la page demandée Figure 1-1: Cas de page wi Site web dynamique Un site web dynamique est un site web dont les pages sont générées à la demande. Le A' contenu est obtenu en combinant différentes sources pour constituer des pages HTML. D’un côté il y a une base de données (MySQL, Oracle, etc.), et de l’autre des fichiers dans un langage de programmation dynamique (PHP, Java, etc.) qui à la demande d’un ordinateur se connectant au serveur, compile la page HTML avant de la délivrer. (Voir Figure 1-2) -# Serveur web Demande d'une page dynamique Envoi de la page générée Compilation Données Figure 1-2 : Cas de page web dynamique ISET Kélibia: H.TOUKABRI 8
Développement côté serveur Chapitre 1. Introduction au langage PHP Comparaison Site web statiqueSite web dynamique Interaction pas d’interactivité côté serveur interactif Flexibilité plus le nombre de pages augmente plus on perd en flexibilité son architecture est définie dès sa création donc il est plus adapté dans le cas de forte volumétrie Maintenance très difficile voire impossible si le nombre de pages est important la mise à jour des pages d’un site se fait rapidement sans nécessiter des K \ V compétences techniques avancées grâces aux outils de gestion généralement intégrés Référencement facile grâce à des pages HTML individualisées plus difficile car les pages HTML sont générées à la demande Hébergementsimple et facile < contraignant et varie selon les offres des hébergeurs et les langages et technologies utilisées Sk. ▼ Coût pas cher lors de la création mais le coût de sa maintenance s accroit a long terme beaucoup plus cher qu’un site statique mais ce coût s’amortie lors des opérations de maintenance 1.2. PHP : Qu’est-ce que c’est ? Définition PHP ou Hypertext Preprocessor est un langage de script libre côté serveur. Grâce à son interaction avec la base de données MySQL et son intégration facile dans du code HTML, PHP est devenu le langage le plus utilisé en développement web Origine et histoire En 1994, le développement de PHP a été créé par Rasmus Lerdorf pour suivre le nombre de visiteurs en ligne de son CV Le 8 Juin 1995, il a été rendu public ISET Kélibia: H.TOUKABRI 9
Développement côté serveur Chapitre 1. Introduction au langage PHP En Avril 1996, PHP 2.0 a été lancé incluant un support interne pour les bases de données DBM, mySQL et Postgres95, pour les cookies et un support des fonctions définies par l’utilisateur En 1998, PHP 3 a été officiellement lancé En 1999 Suraski et Andi Gutmans produirent le Zend Engine Le 22 mai 2000, PHP 4 a été publié et il était propulsé par Zend Engine 1.0. Il apportait le support de nombreux serveurs web, des sessions HTTP, la bufferisation de sortie, une sécurité accrue de la gestion des informations visiteurs, et plusieurs nouvelles structures de langage. En Juillet 2004, PHP 5 est sorti. Il est régi par son moteur, le Zend Engine 2.0 avec un nouveau modèle objet et des dizaines d’autres nouvelles fonctionnalités Les caractéristiques du langage PHP A ' Licence : PHP est un langage de script interprété, gratuit, OpenSource et distribué sous une licence autorisant la modification et la redistribution. e. „ Portabilité : PHP est multi-plateforme. Il sera alors très facile de déplacer une application écrite en PHP d’un serveur Windows d’origine vers un serveur Linux sans avoir à la modifier (ou très peu). PHP est également compatible avec n’importe quel serveur web (Apache, IIS 1, etc.). Exécution : PHP interagit avec le serveur de base de données ou avec des fichiers en entrée, construit une page HTML que le serveur web se charge de la renvoyer au client qui la demandée. Apprentissage facile : PHP est un langage dit de « haut niveau » dont la syntaxe est très proche du langage C. Cette syntaxe proche du langage naturel lui assure un apprentissage rapide et peu de contraintes d’écriture de code. Richesse des_ fonctionnalités : Une des forces du langage PHP est sa richesse en termes de fonctionnalités. En effet, il dispose à l’origine de plus de fonctions natives prêtes à l’emploi. Ces fonctions permettent de traiter les chaînes de caractères, d’opérer mathématiquement sur des nombres, de convertir des dates, de 1 IIS (Internet Information Services) : est le serveur web de Microsoft. Il assure les mêmes fonctions qu’un serveur web tel qu’Apache. [Wikipedia] ISET Kélibia: H.TOUKABRI 10
Développement côté serveur Chapitre 1. Introduction au langage PHP se connecter à un système de base de données, de manipuler des fichiers présents sur le serveur, etc. Fiabilité et performance : Grâce aux efforts des différents développeurs, le langage est maintenant devenu un langage fiable, performant et viable. Il est capable de supporter des sites sollicités par des millions de requêtes journalières Syntaxe élémentaire de PHP Intégration à HTML Une page PHP : porte l’extension.php peut être codé entièrement en PHP ou mélangé avec du HTML. On dit alors que PHP J/' est un langage « Embedded HTML » car il peut être placé à n’importe quel endroit jS # ISET Kélibia: H.TOUKABRI 11
Développement côté serveur Chapitre 1. Introduction au langage PHP Premier exemple en PHP Les instructions Une instruction se termine par « ; ». Néanmoins la balise fermante ?> peut marquer la fin d’une instruction. Exemple Remarque Æ Un bloc d’instructions est placés entre deux accolades {et}. Un bloc peut à son tour imbriquer un autre bloc d’instructions Les commentaires Les commentaires peuvent s’écrire : Sur une seule ligne en utilisant les caractères // ou # Sur plusieurs lignes en les entourant par les caractères /* et */ Exemple __ <?php //Ceci est un commentaire sur une seule VA'VA' ligne #Ceci est un commentaire sur une seule ligne /*Ceci est un commentaire sur Plusieurs lignes*/?> Les instructions d’affichage Deux instructions sont généralement utilisées : ISET Kélibia: H.TOUKABRI 12
Développement côté serveur Chapitre 1. Introduction au langage PHP L’instruction print s’utilise avec des parenthèses : print ('message') L’instruction echo permet d’afficher du texte et des balises HTML. On peut l’utiliser par des guillemets ou des apostrophes. Remarque Si l’on souhaite afficher un message contenant des guillemets, il est préférable de l’encadrer par des apostrophes et vice versa. Cadrer un message contenant des guillemets (respectivement apostrophes) par des VO guillemets (respectivement apostrophes) doit s’accompagner par l’utilisation du caractère d’échappement « \ ». ___________________.S* L affichage d un contenu de variables ne s accompagne pas d apostrophes ou guillemets. Cependant, cadrer une variable par des guillemets entraîne l’évaluation de celle-ci, ce qui n’est pas le cas des apostro] ohes. La concaténation de deux messages est faite par les caractère Exemple «. » ou «, ». <?php $a = 20 echo "message avec guillemets"; r- v > echo 'message avec apostrophes' ; X 1 echo "C'est le groupe \"MDW\" "; V. echo 'C\'est le groupe "MDW" ' ;. r\ p echo " message au centre "; v T' echo ' message au centre '; echo $a ; \W 1 echo "$a = echo "\$a = //affiche la valeur 20 $a ; //affiche 20 = 20.. "$a" ; //affiche $a = 20 ISET Kélibia: H.TOUKABRI 13
Développement côté serveur Chapitre 2. Définitions des données en PHP Objectifs spécifiques À l’issue de ce chapitre l’étudiant serait capable de : Distinguer les types de variables en PHP Reconnaitre la panoplie de fonctions prédéfinies de manipulation de types Reconnaitre une constante, une constante prédéfinie et une constate magiq Distinguer les différentes catégories d’opérateurs 4#4# Durée <SS Les fonctions prédéfinies de manipulation de types Fonctions de gestion des variables Fonctions de gestion des chaînes Sortie vers le navigateur Recherche, comparaison et fragmentation Transformation, conversions Suppression Divers Les constantes Les constantes prédéfinies Les constantes magiques ISET Kélibia: H.TOUKABRI 14
Développement côté serveur Chapitre 2. Définitions des données en PHP Les constantes définies par le développeur Les opérateurs Définition Catégories des opérateurs La valeur des variables est modifiée La valeur des variables n’est pas modifiée Autres % ISET Kélibia: H.TOUKABRI 15
Développement côté serveur Chapitre 2. Définitions des données en PHP 2.1. Les variables Déclaration des variables Une variable est un objet ou une information stockée en mémoire temporairement. En effet, la variable existe tant que la page est en cours de génération. Une variable est caractérisée par un nom significatif et une valeur. Un nom de variable valide commence par une lettre ou un souligné « _ », suivi de lettres, VL X chiffres ou soulignés. Pour déclarer une variable, on place le symbole « $ » devant son nom. Remarque Un script PHP ne contient pas une partie déclarative clairement définie. Pour définir une variable, il suffit de l’initialiser. Le nom d’une variable est sensible à la casse (majuscule / minuscule). liffre Une variable ne doit pas commencer par un chiffre. L’affectation d’une valeur à une variable se fait à travers le signe « = » suivi d’un « ; » pour marquer la fin de l’instruction. Après l’exécution du programme toutes les variables sont supprimées de la mémoire. % rvv Types de variables <5^ En PHP, les variables prennent le type des données qui leurs sont affectées. Il n’est pas obligatoire de préciser le type. Néanmoins, on distingue donc : Entier (int, integer) : pour les nombres entiers relatifs Décimal (real, float, double) : pour les nombres réels. Les nombres s’écrivent avec un point et non pas une virgule ISET Kélibia: H.TOUKABRI 16
Développement côté serveur Chapitre 2. Définitions des données en PHP Chaîne de caractères (string) : pour les chaînes de caractères. Tout texte est habituellement écrit entre guillemets « "" » ou entre apostrophes « '' ». Le caractère d’échappement est « \ » dans le cas ou il y a imbrication de guillemets ou d’apostrophes. Booléen (boolean) : pour les données ayant vrai ou faux comme valeurs. On note true pour vrai et false pour faux. Ce type est valable à partir de PHP4. Tableau (array) : pour stocker des données du même type Objet (object) : pour stocker des instances de classes Par ailleurs, PHP propose deux autres types particuliers : NULL : pour des valeurs de type non définie. On parle de l’absence de ressource : retournées fréquemment par des fonctions accédant à des ressources externes (fichiers, BD, etc.). elles sont rarement manipulées Les variables dynamiques variable et l’utilise comme nom d’une autre Une variable dynamique prend la valeur d’une vai variable. Une variable dynamique se distingue par le nombre de « $ » qui la précède. Exemple <?php ^5 $a = 'bonjour'; //variable simple. XX * $$a = 'monde'; //variable de variable ou variable ^ « -v ■w dynamique echo "$a ${$a}"; //affiche bonjour monde \fVX i echo "$a $bonjour"; //affiche bonjour monde ?> Les variables d’environnement Les variables d’environnement permettent au programme d’avoir des informations sur son environnement. Dans le cas d’un script PHP, l’environnement est défini par le serveur et le client. ISET Kélibia: H.TOUKABRI 17
Développement côté serveur Chapitre 2. Définitions des données en PHP Ces variables sont créées par le serveur à chaque appel de script. Elles permettent d’avoir des informations sur le type de serveur, son administrateur, la date à laquelle le script a été appelé, l’adresse IP et le type de navigateur du client, etc. Ces variables se déclinent en deux catégories : (Voir Annexe A) Les variables dépendant du serveur Les variables dépendant du client Pour retourner la valeur d’une variable d’environnement, on peut __ getenv("NOM_VARIABLE") ; e type de la variable. bool isobject ($var) : indique si $var est de type objet. bool is_resource ($var) : détermine si $var est une ressource. bool isnull ($var) : indique si $var vaut NULL. bool isscalar ($var) : détermine si la variable $var est scalaire, c’est à dire si c’est un entier, une chaîne, un double ou booléen. bool isnumeric ($var) : détermine si la variable $var est un nombre ou une chaîne numérique. ISET Kélibia: H.TOUKABRI 18 Remarque Il est possible de définir des variables d’environnement à l’aide de la fonction % putenv("MA_VARIABLE=mavaleur"); lique si $var est un nombre décimal. Les fonctions is_double() bool isint ($var) : indique si $var est un nombre entier. Les fonctions is_long() et is_integer() sont des alias de is_int(). bool is string ($var) : indique si $var est une chaîne de caractères. \VS
Développement côté serveur Chapitre 2. Définitions des données en PHP Trois fonctions sont utilisées pour savoir l’état d’une variable : bool isset ($var) : retourne true ou false selon que la variable passée en paramètre existe et différente de NULL. void unset ($var) : supprime la variable passée en paramètre. bool empty($var) : retourne un booléen selon que la variable est non vide et non nulle Fonctions de gestion des chaînes I. Sortie vers le navigateur echo chaine : renvoie la chaine vers la sortie standard. print (string chaine) : renvoie la chaine vers la sortie standard. envoie v # s- int strlen(string chaine) : retourne la longueur de printf (string chaine, arguments) : fonction tirée du C. Elle renvoie vers la sortie \\V' standard les arguments en utilisant la chaine. flush() : vide les buffers de sortie Recherche, comparaison et fragmentation le la chaine. int strcmp (string chaine1, string chaine2) : comparaison sensible à la case. string strchr (string chaine1, char car) : recherche la première occurrence d’un caractère. Elle retourne une sous chaîne à partir du caractère à trouver. int strrpos (string chaine1, string chaine2) : recherche la dernière occurrence de chaine2 dans chaine1. int strpos (string chaine1, string chaine2) : recherche la première occurrence de chaine2 dans chaine1. string str_replace (string chaineï, string chaine2, string chaine3) : remplace toutes les occurrences de chaine1 dans chaine3 par chaine2. string strtr(string chaineï, char carï, char car2) : remplace toutes les occurrences d’un caractère (car1) par un autre (car2) dans chaine1. string substr (string chaine, int deb) : retourne une partie de la chaine. o 2 Liste non exhaustive ISET Kélibia: H.TOUKABRI 19
Développement côté serveur Chapitre 2. Définitions des données en PHP string strtok (string delim) : découpe la chaine en plusieurs chaines en utilisant les caractères de delim Transformation, conversions string strtolower (string chaine) : met tous les caractères en minuscule. string strtoupper (string chaine) : met tous les caractères en majuscule. string strrev (string chaine) : inverse une chaine. string n12br (string chaine) : convertit les "n" en " " Suppression string chop (string chaine) : enlève les espaces de fin de chaine. string trim (string chaine) : enlève les espaces au début et à la fin de la chaine. % string ltrim (string chaine) : enlève les espaces de début de chaine Divers s<> V v? string sprintf (string chaine, arguments) : retourne une chaine construite avec les arguments en utilisant la chaine. int ord (char chaine) : retourne la valeur ASCII du caractère. ~ valeur, char chr (int code ascii) : retourne un caractère. string bin2hex (string chaine) : convertit une valeur binaire en hexadécimal. string md5 (string chaine) : calcule un md5 avec la chaine Les constantes Les constantes prédéfinies Centes sont définies par le cœur de PHP. Cela inclut notamment PHP, le moteur Zend et les modules SAPI 3. (Voir Annexe B ) 3 Server Application Programming Interface (SAPI), l’interface de programmation des applications serveurs, est le terme générique utilisé en informatique pour désigner les modules d’interface d’applications serveur web. ISET Kélibia: H.TOUKABRI 20
Développement côté serveur Chapitre 2. Définitions des données en PHP Les constantes magiques PHP fournit un grand nombre de constantes magiques. Cependant, il y a huit constantes magiques qui changent suivant l’emplacement où elles sont utilisées. (Voir Annexe C) Les constantes définies par le développeur Une constante est une variable dont le contenu est initialisé à une valeur fixe et ne peut être modifié. Pour définir une constante, on utilise la fonction define (nomConstante, valeur). La définition d’une constante doit obéir aux règles suivantes : une constante ne commence pas par un $ une constante est accessible depuis n’importe quel endroit du code une constante ne peut pas être redéfinie une constante ne peut contenir qu’un scalaire (entier, booléen, chaîne, double). Remarque Les noms des constantes sont sensibles à la casse. & Définition Un opérateur est un symbole qui indique la réalisation d’une opération. Les variables mis en jeu lors d’une opération peuvent être simplement consultées ou modifiées. ISET Kélibia: H.TOUKABRI 21
Développement côté serveur Chapitre 2. Définitions des données en PHP Catégories des opérateurs PHP dispose des opérateurs utilisés en langage C ainsi que d’autres inspirés du langage Perl. Ces opérateurs sont répartis en trois familles selon la modification de valeurs des variables I. La valeur des variables est modifiée Opérateurs d’affectation : l’affectation consiste à attribuer une valeur à une variable. OpérateurSignification =affectation simple +=addition puis affectation.= soustraction puis affectation * =multiplication puis affectation /=division puis affectation %=modulo puis affectation |=ou puis affectation &=et puis affectation => C associe une valeur à une clé dans un tableau réalise un appel de méthode # Tableau 2-1 : Les opérateurs d’affectation Opérateurs d’incrémentation/décrémentation : Il s’agit d’opérateurs permettant l’augm entation ou la diminution de la valeur d’une variable. L’incrémentation fonctionne également avec les lettres. (Non valide pour la décrémentation). OpérateurI NomI Résultat I ++$aIPré-incrémentIlncrémente $a d’un, puis renvoie $a. I $a++IPost-incrémentIRenvoie $a, puis incrémente $a de un. I --$aIPré-décrémentdécrémente $a d’un, puis renvoie $a. I $a--IPost-décrémentIRenvoie $a, puis décrémente $a d’un. ISET Kélibia: H.TOUKABRI 22
Développement côté serveur Chapitre 2. Définitions des données en PHP Tableau 2-2 : Les opérateurs d’incrémentation/décrémentation Opérateurs de décalage de bits : ce type d’opérateurs permet d’effectuer des opérations bit à bit sur des nombre binaires. OpérateurOpérationRésultats &ET1&1=1; 1&0=0; 0&1=0; 0&0=0; |OU1|1=1; 1|0=1; 0|1=1; 0|0=0; AOU EXCLUSIF1A1=0; 1A0=1; 0A1=1; 0A0=0; ~NON~1=0 ; ~0=1; & Tableau 2-3 : Les opérateurs binaires La valeur des variables n’est pas modifiée Opérateurs arithmétiques : C’est les opérateurs de calcul arithmétique. OpérateurOpération +addition -soustraction /division *multiplication %modulo reste de la division **exposant Tableau 2-4 : Les opérateurs arithmétiques rateurs de comparaison : Ces opérateurs sont utilisés pour réaliser les tests : essentiellement dans les instructions de contrôle. Le résultat de test est booléen. ExempleOpérationRésultat & P II & O - ÉgalVrai si les valeurs de $a et $b sont égales $a---$bIdentique Vrai si $a == $b et si $a et $b sont de même type. (PHP4) $a != $b ou Non égalVrai si $a n’est pas égal à $b. ISET Kélibia: H.TOUKABRI 23
Développement côté serveur Chapitre 2. Définitions des données en PHP $a <> $b $a !== $bNon identique Vrai si $a n’est pas égal à $b, ou si $a et $b sont de types différents (PHP 4). $a < $bPlus petit queVrai si $a est plus petit que $b. $a > $bPlus grand queVrai si $a est plus grand que $b. $a <= $b Plus petit ou égal à Vrai si $a est plus petit ou égal à $b $a >= $b Plus grand ou égal à Vrai si $a est plus grand ou égal à $b. Tableau 2-5 : Les opérateurs de comparaison Opérateurs logiques : Une variable n’est à l’état « vrai » que si elle est non vide et différente de 0. Les opérateurs logiques sont utilisés dans les instructions de contrôle. _ ExempleOpérationRésultat $a and $b ou $a && $b ANDVrai si $a et $b sont vrais $a or $b ou $a || $b OR oNr# Vrai si $a, ou $b, ou les deux, sont vrais $a xor $b ou $a A $b XORVrai si un et un seul parmi $a ou $b est vrai ! $a. ~ $ a NOT ^_ Vrai si $a est faux. Tableau 2-6 : Les opérateurs logiques rateur ternaire : C’est l’opérateur de test ternaire « ? ». Sa syntaxe est : [test logique] ? [expression si vrai] : [expression si faux] Opérateurs sur les chaînes : Deux opérateurs sont utilisés. L’opérateur de concaténation «. » et l’opérateur combiné «.= ». ISET Kélibia: H.TOUKABRI 24
Développement côté serveur Chapitre 2. Définitions des données en PHP Autres Opérateurs d’erreur : L’opérateur » appliqué à une expression empêche la sortie de message d’erreur en cas de problème. On peut toujours récupérer le message d’erreur éventuel via la variable $phperrormsg si l’option « track_errors » est à « On » dans le php.ini. Opérateurs d’exécution : On peut exécuter des commandes externes au PHP comme en Shell avec les opérateurs guillemets inverses « ' » (altgr+7). L’option « safe_m » doit être à « On » dans le php.ini. On peut aussi utiliser la fonction « shell exec » qui fait exécuter une commande par le Shell. Opérateurs sur les tableaux : l’opérateur « + » est exploité par les tableaux pour réaliser la somme entre eux. MA £ # sS» ISET Kélibia: H.TOUKABRI 25
Développement côté serveurChapitre 3. Les structures de contrôle Objectifs spécifiques À l’issue de ce chapitre l’étudiant serait capable de : Distinguer les différentes instructions conditionnelles et répétitives Ecrire des scripts utilisant les structures conditionnelles et répétitives Expliquer les mécanismes de branchements inconditionnels Durée 1h30 # L’instruction while L’instruction do..while üranchei 3.4. Branchements inconditionnel Saut inconditionnel (continue) Arrêt inconditionnel (break) ISET Kélibia: H.TOUKABRI 26
Développement côté serveurChapitre 3. Les structures de contrôle 3.1. Introduction Un script PHP est une suite d’instructions. Une instruction peut être : Une affectation Un appel de fonction, de procédure, de classe ou de pseudo-fonction (echo, print) Une inclusion d’une autre source Une structure affectant le déroulement du programme : - Une instruction conditionnelle - Une boucle 3.2. Structures conditionnelles L’instruction if else # L’expression if...else permet d’exécuter une autre série d’instructions en cas de non- C,. \v réalisation de la condition. Syntaxe <?php if (condition réalisée) \> { } bloc 1 d'instructions else { A V.ons ; _ ^ } ?> bloc 2 d'instructions e Remarque Les instructions situées dans le bloc qui suit else (bloc 2) sont les instructions qui seront exécutées si la ou les conditions ne sont pas remplies. Exemple <?php $b=$a=2 ; if ($a==$b) ISET Kélibia: H.TOUKABRI 27
Développement côté serveurChapitre 3. Les structures de contrôle echo '$a et $b sont égaux '; } else { echo '$a et $b sont différents '; } ?> Le retour de ce code est l’affichage de la chaîne « $a et $b sont égaux » suivie d’un retour à la ligne. Il est également possible de combiner des if dans des else. On peut ainsi utiliser plusieurs «Y conditions dans une même structure. Syntaxe < ?php if (condition 1) { bloc instructions 1 ; } elseif (condition 2) { bloc instructions 2 ; } else — insi utilise { o<^ bloc instructions 3 ; rN> ?> ' Exemple <?php $a=1; $b=2; if ($a==$b) { echo '$a et $b sont égaux '; } ISET Kélibia: H.TOUKABRI 28
Développement côté serveurChapitre 3. Les structures de contrôle if ($a == 5): gale M. ; rs echo "a é v*\ X' echo "... » » 1 x elseif ($a == 6) : echo "a égale 6"; echo "!!!"; else: echo "a ne vaut ni 5 ni 6"; endif; ?> La structure switch Elle permet de faire plusieurs tests de valeurs sur le contenu d'une même variable. ISET Kélibia: H.TOUKABRI 29
Développement côté serveurChapitre 3. Les structures de contrôle Syntaxe <?php switch ($var) { case valeur 1 : Liste d'instructions ; break ; case valeur 2 : Liste d' instructions ; break ; case valeur n : Liste d'instructions ; break ; default : Liste d'instructions ; } ?> Remarque $var ne peut être que scalaire c’est-à-dire nombre entier, nombre à virgule flottante et chaîne de caractère. Le mot clé break indique la sortie de la structure conditionnelle. Lorsque l’on omet le break, l’exécution continue dans les blocs suivants. M X i Le mot clé default précède la liste d’instructions qui sera exécutée si l’expression / x ~ n’est jamais égale à l’une des valeurs. Exemple <?ph p $i=5 ; l\ switch ($i) { AfV\\ case 0: print "i égale 0"; break; case 1: print "i égale 1"; break; case 2: print "i égale 2"; break; default: ISET Kélibia: H.TOUKABRI 30
Développement côté serveurChapitre 3. Les structures de contrôle print "i n\'est ni égal à 2, ni à 1, ni à 0."; }?> Syntaxe alternative Les accolades sont remplacés par « : » au début et endswitch ; à la fin. <?php switch ($var) : case valeur 1 : Liste d'instructions break ; case valeur 2 : Liste d'instructions break ; case valeur n : Liste d'instructions break ; default : Liste d'instructions endswitch; ?> 3.3. Structures répétitives L’instruction for — \# J 6< L’instruction for permet d’exécuter plusieurs fois la même série d’instructions. V* Syntaxe < ?php for (initialisation compteur ; condition ; modification du compteur) { bloc d'instructions ; ?> Syntaxe alternative < ?php for (initialisation compteur ; condition ; modification du compteur) : bloc d'instructions ; endfor; ISET Kélibia: H.TOUKABRI 31
Développement côté serveurChapitre 3. Les structures de contrôle ?> Exemple Elle permet d’exécuter plusieurs fois la même série d’instructions tant que la condition est ■ réalisée. Syntaxe <?php while (condition réalisée) { * V/ bloc d'instructions ; AJ* } ?> _IternativSyntaxe alternative Exemple < ?php $i = 1 ; ISET Kélibia: H.TOUKABRI 32
Développement côté serveurChapitre 3. Les structures de contrôle while ($i < 4) { echo ”$i ” ; $i++ ; } ?> /* tant que i < 4 répéter */ /* incrémentation */ Ce code affiche les chiffres 1,2 et 3 avec des retours à la ligne après chaque nombre L’instruction do..while Elle est comme while, mais l’instruction est au moins exécutée une fois, avant la première La boucle précédente affiche le 0 puis s’arrête Branchements inconditionnel Saut inconditionnel (continue) L’instruction continue est utilisée dans un bloc d’instructions afin de ne pas exécuter le restant des instructions de l’itération courante et passer directement à l’itération suivante. ISET Kélibia: H.TOUKABRI 33
Développement côté serveurChapitre 3. Les structures de contrôle Remarque L’instruction continue accepte un argument numérique optionnel qui indique combien de structures emboitées doivent être ignorées. Exemple <?php $i = 0; while ($i++ < 4) { echo "$i"; echo " Dehors\n"; while (1) { echo " Milieu\n"; while (1) { x# echo " Fin\n"; continue 3; } x echo "Ceci n'est jamais atteint.\n"; } }?> echo "Ceci non plus.\n"; rV^ Dans l’exemple précédent, on affiche les valeurs prises par la variable $i suivi des mots : Dehors, Milieu et Fin. L’instruction continue indique le passage à la troisième itération par rapport à l’itération courante c'est-à-dire que les messages « Ceci n’est jamais atteint. » et « Ceci non plus. » ne seront jamais affichés Arrêt inconditionnel (break) L’instruction break permet de sortir d’une structure for, while, foreach ou switch. break accepte un argument numérique optionnel indiquant le nombre de structures emboitées devant être interrompues. Exemple <?php ISET Kélibia: H.TOUKABRI 34
Développement côté serveurChapitre 3. Les structures de contrôle $i = 0; while ($i < 10) { for($j=0 ;$j<5 ;$j++) { if ($i==$j) break; /* Vous pouvez aussi écrire 'break 1;' ici. */ if($j==3) break 2 ; /*On sort des deux boucles*/ echo "$i" ; } $i++; } ?> K\A Ce code permet d’afficher les valeurs de $i jusqu’à la valeur 4 et ce $j fois. On aura l’affichage suivant : # # ISET Kélibia: H.TOUKABRI 35
Développement côté serveur Chapitre 4. Les tableaux Objectifs spécifiques À l’issue de ce chapitre l’étudiant serait capable de : Reconnaître les types de tableaux en PHP Réaliser le parcours des tableaux scalaires, associatifs et multidimensionnels Appliquer les fonctions prédéfinies sur les tableaux Durée 1h30 ■ Boucle foreach Utilisation avec des tableaux scalaires X\' Utilisation avec des tableaux associatifs * La fonction print_r Les tableaux multidimensionnels Définition Accès aux éléments Parcours d’un tableau multidimensionnel Opérations sur les tableaux ISET Kélibia: H.TOUKABRI 36
Développement côté serveur Chapitre 4. Les tableaux 4.1. Qu’est-ce qu’un tableau ? Un tableau, en anglais array, est un type de données structuré rassemblant plusieurs valeurs. Chaque élément d’un tableau est identifié par une clé (numérique ou texte) permettant de lui faire référence. À chaque clé d’un tableau, on fait correspondre une valeur. Déclaration La création d’un tableau à travers la fonction array () n’est pas obligatoire. On peut r\ déclarer un tableau à la volée par ajout d’éléments un à un. A\> Les valeurs contenues dans un tableau peuvent être de types différents. La taille du tableau s’incrémente à chaque nouvel élément. (aucune restriction de taille). ; v\N Une valeur dans un tableau peut elle-même correspondre à un tableau. On parle alors de tableau multidimensionnel. La notion d’énumération est absente en PHP. Pour pallier à ce manque, on peut utiliser un tableau. Une chaîne de caractère est un exemple de tableau particulier dont la taille est le nombre de caractères composant la chaîne. ISET Kélibia: H.TOUKABRI 37
Développement côté serveur Chapitre 4. Les tableaux 4.2. Types des tableaux Tableau simple (scalaire) C’est un tableau dont les clés sont des entiers qui commencent toujours par zéro. Dans ce cas, la clé correspond à l’indice du tableau incrémenté à chaque ajout d’éléments. Exemple C’est un tableau dont la clé est de type chaîne de caractères. Les cases du tableau ne sont pas Boucle for Le parcours basé sur la boucle for est utilisé avec les tableaux scalaire. En effet, la clé correspond à un indice allant de 0 jusqu’à la taille du tableau - 1. Exemple ISET Kélibia: H.TOUKABRI 38
Développement côté serveur Chapitre 4. Les tableaux <?php // Création du tableau $saisons $saisons = array ('automne', 'hiver', 'printemps', 'été'); // Affichage du contenu du tableau for ($cpt = 0; $cpt < 4; $cpt++) { echo $saisons[$cpt]. ' '; //chaque élément est suivi par un espace }?> Boucle foreach./vQ\V La boucle foreach permet de parcourir toutes les cases d’un tableau. Il s’agit d’une sorte de, K. V boucle for spécialisé pour les tableaux. À chaque itération, foreach va mettre la valeur de chaque élément du tableau dans une variable temporaire. Remarque V?-.ssV La boucle foreach est utilisée pour les deux types de tableaux (scalaire et associatif). * L_VJ Dans le cas de tableau associatif, foreach permet de parcourir non seulement les Dciées. valeurs mais aussi les clés associées I. Utilisation avec des tableaux scalaires Syntaxe <?p h p vNS $id tab = array (valeur, valeur 2,..., valeur n ) ; — IV foreach($id tab as $element) { echo $element. ' '; // Affiche $id tab[0], $id tab [1], etc. } ?> " " ^-^- Exemple <?php // Création du tableau $saisons $saisons = array ('automne', 'hiver', 'printemps', 'été'); // Affichage du contenu du tableau foreach($saisons as $saison) { ISET Kélibia: H.TOUKABRI 39
Développement côté serveur Chapitre 4. Les tableaux echo $saison. ' // Affiche les saisons séparés par des espaces } ?> Utilisation avec des tableaux associatifs Syntaxe <?php $id tab = array (clé 1 => valeur, clé 2 =>valeur 2, clé n =>valeur n ) foreach($id tab as $cle => $valeur) { echo '['. $cle. '] vaut $valeur. ' '; } ?> Exemple € & <?php $tab = array( "nom"=>"Ben foulen", "prenom"=>"Foulen", "specialite"=>"TI", "groupe"=>21, "option"=>"MDW") ; V foreach($tab as $cle => $valeur) { ^ "V echo '[' } ?> 35 ? Remarque $cle. '] vaut ît' $valeur., '; ue 8? Pour un tableau associatif, on peut se limiter à un simple accès et/ou modification de la valeur sans toucher aux clés. Dans ce cas le parcours se limitera seulement aux valeurs. Ainsi, le parcours serait le même qu’un tableau scalaire La fonction print_r L’utilisation de la fonction print r () n’est pas typique au tableau. En effet, cette fonction permet d’afficher des informations lisibles sur une variable. Son utilisation pour les tableaux convient lors du débogage où on veut afficher le contenu d’un tableau sans se soucier de sa mise en forme. ISET Kélibia: H.TOUKABRI 40
Développement côté serveur Chapitre 4. Les tableaux Syntaxe <?php $id tab = array (clé i => valeur i, clé 2 =>valeur 2,clé n =>valeur n ) ; echo ' '; print r($id tab); echo ' '; ?> La balise est une balise de HTML5 permettant l’affichage d’un texte préformaté c'est- à-dire que le texte mis dans cette balise est affiché tel qu’il est écrit. Nous n’avons pas besoin d’utiliser des balises de mise en forme tel que la balise de retour à la ligne. La balise convient énormément pour la mise en forme rapide des tableaux Les tableaux multidimensionnels Définition Un tableau multidimensionnel est un tableau dont les valeurs sont des tableaux. Il s’agit de U.2. A Accès aux éléments L’accès aux éléments d’un tableau de tableaux s’effectue à travers le numéro de la ligne et le numéro de la colonne de l’élément. Syntaxe < ?php ISET Kélibia: H.TOUKABRI 41
Développement côté serveur Chapitre 4. Les tableaux echo $tab dim [$i][$j] ; //Affichage de l'élément situé à la i ème ligne et j ème colonne?> Parcours d’un tableau multidimensionnel Syntaxe <?php //Création du tableau multidimensionnel $tab dim = array (); $tabdim[ligne 1 ]= array(val 1,val 2,...,val n ) ; $tabdim[ligne 2 ]= array(val 1,val 2,..,val n ); $tabdim[ligne n ]= array(val 1,val 2,.,val n ); //Parcours de la matrice foreach ($matrice as $vecteur){ foreach ($vecteur as $element){ echo $element. ' '; } }?> Exemple <?php //Création de la matrice $matrice = array (); $matrice [0] = array (1,2,3); V 'V'**’ $matrice [1] = array (4,5,6); $matrice [2] = array (7,8,9); V.H 'V''»’ //Parcours de la matrice * * I XV foreach ($matrice as $vecteur){ r foreach ($vecteur as $element){ * echo $element. par des espaces //Les éléments sont affichés triés et séparés } }?> ISET Kélibia: H.TOUKABRI 42
Développement côté serveur Chapitre 4. Les tableaux 4.5. Opérations sur les tableaux PHP propose plusieurs fonctions prédéfinies manipulant les tableaux dont les plus utilisées sont : count() et sizeof() retournent toutes les deux la taille du tableau passé en paramètre. sort() trie les éléments d’un tableau du plus petit au plus grand. rsort() trie les éléments d’un tableau du plus grand au plus petit. in_array() permet de vérifier qu’une valeur est présente dans un tableau. array_key_exists() indique si un tableau contient ou non une clé donné. hasard. > array_rand() extrait une ou plusieurs valeurs du tableau au ù se trouve le current() retourne la valeur de l’élément courant du table pointeur). implode() rassemble les éléments d’un tableau en une chaîne de caractères en ajoutant entre les éléments un séparateur : $chaine = implode($separateur,$tableau); explode() coupe une chaîne en segments selon un séparateur et retourne un tableau qui contient ces segments (l’inverse de la fonction implode) : $tableau =.....^ explode($separateur,$chaine); £ # ISET Kélibia: H.TOUKABRI 43
Développement côté serveur Chapitre 5. Les fonctions Objectifs spécifiques À l’issue de ce chapitre l’étudiant serait capable de : Utiliser les fonctions pour écrire un script structuré Distinguer les modes de passage des paramètres (par valeur et par références) Réutiliser un script en se basant sur l’inclusion de fichiers Reconnaitre les fonctions prédéfinies sur les dates Durée Par réfé rence..... t ére Quelques fonctions internes de PHP ' 5L F onc ^ I Fonctions sur les dates ctions de gestion des arguments Inclusion de fichiers Fonction date () Le timestamp en PHP ISET Kélibia: H.TOUKABRI 44
Développement côté serveur Chapitre 5. Les fonctions 5.1. Qu’est-ce qu’une fonction ? Une fonction permet la réutilisation du code PHP. Elle se compose d’une série d’instructions qui retourne zéro ou plusieurs valeurs. On distingue deux types de fonctions : Les « fonctions intégrées » ou « built-in » incluses par défaut avec les distributions de PHP (print, echo, etc.). Une fonction peut être définie sans paramètres. L’instruction return est optic mnelle. Elle renvoie le retour de la fonction s’il existe. Une fonction doit être déclarée une seule fois, sinon un message d’erreur sera affiché. ne fonc L’appel d’une fonction se fait dans le programme principal après sa déclaration. Une fonction est appelée grâce à son nom suivi de ses paramètres. Lors de la déclaration d’une fonction, on peut affecter une valeur par défaut à un ramètre P. Ainsi, si on appelle la fonction sans spécifier une valeur pour P, la valeur par défaut sera affectée à P Visibilité des variables La visibilité d’une variable dépend de son contexte de déclaration. On distingue trois niveaux de visibilité en PHP : ISET Kélibia: H.TOUKABRI 45
Développement côté serveur Chapitre 5. Les fonctions Les variables super globales : Il s’agit des tableaux tels que $_SESSION, $_COOKIE, $_GET, $_POST, $_SERVER, etc. Ils sont créés par PHP et sont accessibles (en lecture et écriture) depuis n’importe où dans le programme. Ils peuvent donc être appelés à l’intérieur d’une fonction sans être passés en paramètre de celle-ci. Les variables globales : Il s’agit des structures de données qui ne sont visibles que dans le programme principal. Les variables locales : Il s’agit de variables (y compris les paramètres) visibles seulement à l’intérieur d’une fonction. Aucune modification ne peut être faite sur ces variables par le programme principal. Les variables locales sont automatiquement ment exécutée. supprimées de la mémoire lorsque la fonction a été complète 5.3. Portée des variables # Trois niveaux de portée de variables sont définis par le langage PHP : Une variable déclarée dans la fonction et préfixée par le mot clé global est considérée comme globale. Elle devient alors visible dans la fonction mais aussi à l’extérieur de celle-ci. Une variable déclarée traditionnellement dans la fonction prend par défaut une portée locale. Elle est alors visible uniquement dans la fonction et est détruite à la fin de son exécution. 'O' Une variable déclarée dans la fonction et préfixée par le mot-clé static est considérée comme une variable locale dont la valeur se conserve tout au long de l’exécution du programme principal. Cette valeur pourra alors être réutilisée en appelant la fonction de nouvelles fois. <?php // Déclaration de la fonction function remplirReservoir($volume, $prixAuLitre){ // Déclaration des variables global $budgetEssence; // accessible en lecture/écriture dans la fonction et à l'extérieur static $volumeTotalEssence; //Sa valeur est conservée pour les appels suivants de la fonction ISET Kélibia: H.TOUKABRI 46
Développement côté serveur Chapitre 5. Les fonctions 3) $montant = 0; // Calcul du prix du remplissage de l'essence $montant = round ($volume * $prixAuLitre, l'arrondissement à 3 chiffres après la virgule // Retrait de $montant à $budgetEssence $budgetEssence -= $montant; // Ajout du volume au volume total enregistré $volumeTotalEssence += $volume; // Affichage des informations echo 'Vous avez mis ', $volume,' L d\'essence.'; echo 'Prix au Litre : ', $prixAuLitre,' dinars. '; echo 'Prix total : ', $montant,' dinars. '; echo 'Budget essence restant : //réalise $budgetEssence,' dinars. '; W \ V»\ echo 'Volume total d\'essence depuis le début $volumeTotalEssence L. } // Déclaration des variables globales $budgetEssence = 500; // Premier plein d'essence remplirReservoir(42, 1.200); echo ' '; // Second plein d'essence remplirReservoir( ); echo ' ■ // Troisième plein d'essence l \. remplirReservoir(43, 1.300); ?> 5.4. Passage de paramètres Par valeur Le passage par valeur désigne un mode de passage tel que si la variable subit des modifications à l’intérieur d’une fonction, ces modifications ne sont pas perçues par le programme principal. Exemple <?php function multiplierParDeux($nombre) { ISET Kélibia: H.TOUKABRI 47
Développement côté serveur Chapitre 5. Les fonctions Le passage par référence consiste à faire passer l’adresse de la variable à la fonction. Ainsi, si la variable est modifiée à l’intérieur de la fonction, ces modifications auront v W it des répercussions sur le programme principal. Remarque. Le passage par référence est réalisé par le signe « & » devant la variable référencée. — Exemple <?php function multiplierParDeux($nombre) { } $nombre *= 2; $unNombre = 5; « £ multiplierParDeux(&$unNombre); //Passage par référence de $unNombre vV. echo $echo $unNombre; // Affiche 10 ?> 5.5. Quelques fonctions internes de PHP “ de gestion des arguments À partir de PHP4, trois fonctions ont été définies pour la manipulation des arguments passés en paramètres à une fonction : intfunc num args (void) : retourne le nombre d’arguments passés à la fonction utilisateur courante. mixed func get arg (int $arg_num) : récupère un élément de la liste des arguments d’une fonction utilisateur. Les arguments sont comptés à partir de 0. ISET Kélibia: H.TOUKABRI 48
Développement côté serveur Chapitre 5. Les fonctions array func_get_args (void) : récupère les arguments d’une fonction sous forme d’un tableau Inclusion de fichiers PHP propose quatre fonctions différentes d’inclusion de fichiers : include 'nomjichier.php' : elle sert à inclure un fichier en spécifiant son chemin. Si le chemin fourni n’est pas trouvé, PHP renvoie un warning. includeonce 'nom_fichier.php' : elle sert à inclure un fichier une seule fois. Si le viter les me seu l le fc fichier à inclure contient plusieurs fonctions, cette fonction sera utile pour é erreurs dues à une redéfinition des fonctions. require 'nomjichier.php' : elle agit de la même manière que la fonction include sauf que celle-ci génère une erreur si le fichier spécifié est introuvable. Le fichier est requis pour le fonctionnement de l’application. requireonce 'nomfichier.php' : c’est une combinaison des fonctions require et include_once. De ce fait cette fonction s’assure d’abord que le fichier à inclure existe bien, et si ce n’est pas le cas, génère une erreur. Puis elle s’assure que le fichier n’est utilisé qu’une seule fois Fonctions sur les dates I. Fonction date () ' C’est la fonction par défaut utilisée pour afficher une date dans le format souhaité. Elle affiche la date et/ou l’heure courante dans le format indiqué en paramètre. Parmi ces paramètres sur 4 chiffres, ex : 2015 îée sur 2 chiffres, ex : 15 m : numéro du mois courant d ou j : jour du mois H : heure sur 24 heures i : minutes s : secondes F : nom du mois (en toutes lettres) ISET Kélibia: H.TOUKABRI 49
Développement côté serveur Chapitre 5. Les fonctions Exemple <?php $date = date("d-m-Y"); $heure = date("H:i"); print("Nous sommes le $date etilest$heure"); ?> Ce code affiche la date et l’heure courante : Nous sommes le jj-mm-aaaa et il est hh:mm & Le timestamp en PHP Un timestamp est un nombre qui indique le nombre de secondes qui se sont écoulées depuis le premier janvier 1970 (début de l’époque UNIX). Le premier janvier 1970 à minuit, le ISET Kélibia: H.TOUKABRI 50
Développement côté serveur Chapitre 6.Gestion des formulaires Objectifs spécifiques À l’issue de ce chapitre l’étudiant serait capable de : Manipuler les méthodes d’envoi de données GET et POST Valider les données côté serveur en utilisant les expressions régulières Durée 1h30 Plan du chapitre 6.2. Méthode GET Méthode POST La fonction extract La fonction import_request_ # estjvariable; s Validation des données : Expressions régulières Définition Utilité Syntaxe de base Caractères spéciaux Les classes de caractères Les intervalles de caractères prédéfinis Fonctions de manipulation des expressions régulières La fonction preg_match La fonction preg_match_all La fonction preg_replace La fonction preg_split ISET Kélibia: H.TOUKABRI 51
Développement côté serveur Chapitre 6.Gestion des formulaires 6.1. Introduction L’écriture de site web en PHP repose sur l’interactivité, et donc la capacité du client à envoyer, avec son navigateur, des données. Les méthodes principales pour envoyer les données sont : L’utilisation d’une URL (méthode GET) L’utilisation d’un formulaire HTML (méthode POST) Un formulaire est défini en utilisant l’élément. L’action à réaliser pou ^ & r traiter,e nées. formulaire est précisée en utilisant les attributs : ACTION : il indique l’action à exécuter lors de l’envoi des données. METHOD : il permet de définir la méthode de transfert des données vers le serveur. Les deux valeurs possibles sont GET et POST. Syntaxe ÆL 6.2. Méthode GET « £ «r — La méthode GET permet de récupérer des valeurs passées dans l’URL. Les paramètres v\ \ passés sont placées après le point d’interrogation (?). Ensuite, chaque paramètre et sa valeur * u i sont séparés par un ET commercial (&). v.çS> Exemple u Dans l’URL précédente, on a deux paramètres id et name qui valent respectivement 5 et toto dans la page maj.php Afin de récupérer les valeurs des paramètres présents dans une URL, PHP utilise le tableau super global (accessible depuis partout) $_GET. ISET Kélibia: H.TOUKABRI 52
Développement côté serveur Chapitre 6.Gestion des formulaires Exemple //Adresse URL //Accès au paramètre id dans la page maj.php $une variable php = $ GET['id']; 6.3. Méthode POST Quand un formulaire est posté (method=posf comme attribut de form) à l’aide du bouton submit, le navigateur transmet les valeurs saisies dans le formulaire à l’URL spécifiée dans l’attribut action. PHP utilise alors le tableau associatif super global $_POST. Les clés de ce %Y tableau sont les noms des champs du formulaire. Exemple //Formulaire de saisie avec méthode POST Champ texte : » r\ v //Accès au champs du formulaire dans le fichier. 'V»- maj.php $une variable php = $ POST['monchamp']; 6.4. La fonction extract & La fonction extract appliquée à $_POST ou à $_GET permet de créer des variables issus des champs du formulaire. Exemple Se basant sur le formulaire précédent : ISET Kélibia: H.TOUKABRI 53
Développement côté serveur Chapitre 6.Gestion des formulaires 6.5. La fonction import_request_variables La fonction import_request_variables permet d’accéder aux champs d’un formulaire. Cette fonction prend un ou deux paramètres, le second étant optionnel. Après exécution, on récupère les variables sans passer par un tableau. Le premier paramètre est le type de variables qu’on souhaite récupérer : P / p : variables de type POST G / g : variables de type GET C / c : variables de type cookie s# Le second paramètre est le préfixe qu’on souhaite donner au nom des variables qu’on va \ récupérer. Remarque & r xy On peut cumuler les trois types de paramètres récupérés mais i ^ Exemple En reprenant le même exemple : <?php import request variables("P","Post "); echo $Post monchamp uperesm ■sT il faut faire attention à l’ordre. ?> ■JS? 6.6. Validation des données : Expressions régulières Définition Une expression régulière est une suite de caractères (normaux et spéciaux). Cette suite de caractère constitue un masque qui sera appliqué à une chaîne pour trouver les occurrences correspondant à ce masque Utilité Les expressions régulières (aussi appelées regexp) servent à manipuler des données. Elles permettent, à partir d’un masque (pattern en anglais), de trouver les différentes parties d’une ISET Kélibia: H.TOUKABRI 54
Développement côté serveur Chapitre 6.Gestion des formulaires chaîne de caractères correspondant à ce masque. Une des utilisations les plus courantes est le contrôle d’informations fournies via un formulaire Syntaxe de base I. Caractères spéciaux CaractèreDescription \ AntislashCaractère d’échappement à usage multiple A Accent circonflexe Représente le début d’une chaîne de caractères (ou d’une ligne si l’option m est active) $ Dollar Représente la fin d'une chaîne de caractères (ou d’une ligne si l’option m est active) | Barre verticaleOpérateur d’alternative entre l’élément de gauche et celui de droite. Point Remplace n’importe quel caractère, hormis un saut de ligne (sauf si l’option s est active) * Astérisque Nombre d’occurrence de zéro ou plus du caractère ou de la séquence de caractère qui le précède + Signe plus Nombre d’occurrence de un ou plus du caractère ou de la séquence de caractère qui le précède ? Point d'interrogation Nombre d’occurrence de zéro ou un du caractère ou de la séquence de caractère qui le précède { } Accolades spécifient un intervalle de nombre d’occurrences du caractère ou de la séquence de caractère qui le précède ( ) Parenthèses Respectivement ouverture et fermeture d’un sous-masque ou séquence de caractères [ ] CrochetsRespectivement ouverture et fermeture d’une classe de caractères Remarque Si le masque commence par A ou se termine par $, on parle de masque ancré. ISET Kélibia: H.TOUKABRI 55
Développement côté serveur Chapitre 6.Gestion des formulaires Exemple A test : Une chaîne de caractère commençant par test fin$ : Une chaîne de caractère se terminant par fin Aexact$ : La chaîne « exact » essai : Une chaîne de caractère contenant la chaîne « essai » a{3} : Correspond à la chaîne « aaa » b{0,2} : Correspond à une chaîne vide, à « b », ou encore « bb » c{1,} : Correspond à un ou plusieurs « c » ab* : Le caractère « a » suivi de zéro ou plusieurs « b » ab+ : Le caractère « a » suivi de un ou plusieurs « b » ab? : Le caractère « a » suivi de zéro ou un « b » d.? : Le caractère « d » suivi de zéro ou un caractère quelconque % A.{2}t : Une chaîne commençant par deux caractères quelconque suivis d’un « t » o|p : Le caractère « o » OU le caractère « p » bonjourjsoir : On accepte les mots bonjour ou soir bon(jour|soir) : On accepte les mots bonjour ou bons isoir bon (bon){0,2} : On accepte la chaîne bon, bon bon ou bon bon bon Les classes de caractères Une classe de caractères est une liste de caractères potentiels. La classe de caractère x* remplace uniquement un caractère dans le masque (sauf indication contraire avec en spécifiant le nombre ou l’intervalle de nombre d’occurrences). Remarque £ Dans une classe de caractères : Le signe moins (-), s’il n’est pas au début ou à la fin de la classe, désigne un intervalle de caractères. L’accent circonflexe ( A ) au début de la classe désigne une classe d’exclusion (pas ce ou ces caractères). ISET Kélibia: H.TOUKABRI 56
Développement côté serveur Chapitre 6.Gestion des formulaires Exemple a[b-d] : On accepte une chaine contenant le caractère « a » suivi du caractère « b », « c » ou « d » A a[b-d] {1,3} : On accepte une chaine commençant par le caractère « a » suivi de un à trois caractères qui sont soient « b », « c » ou « d » Les intervalles de caractères prédéfinis Nom de l’intervalleDescription [:alnum:]Tout caractère alphanumérique ; équivaut à a-zA-Z0-9 [:alpha:]Tout caractère alphabétique, équivaut à a-zA-Z [:blank:]Tout caractère blanc (espacement, tabulation, etc.) [:digit:]Tout caractère numérique, équivaut à 0-9 [:punct:]Tout caractère de ponctuation [:space:]Caractère d’espacement [:xdigit:]Tout caractère héxadécimal; équivaut à a-fA-F0-9 [:ctrl:]Tout caractère de contrôle [:print:]Tout caractère imprimable (hormis les caractères de contrôle) Fonctions de manipulation des expressions régulières I. La fonction preg_match Syntaxe Int preg match (masque, chaîne sujet [, tableau résultat]); Avec : ^'masque : le masque recherché. chaîne sujet : chaine dans laquelle on cherche le masque. tableau resultat : champ optionnel. Il s’agit d’un tableau de correspondance rempli par la fonction preg_match. La fonction preg_match retourne 1 si le masque fourni correspond, 0 s’il ne correspond pas, ou FALSE si une erreur survient. ISET Kélibia: H.TOUKABRI 57
Développement côté serveur Chapitre 6.Gestion des formulaires La fonction preg_match_all Syntaxe Int preg_match_all (masque, chaine_sujet[, tableau_resultat, paramètre optionnel]); Avec : masque : le masque recherché. chaine_sujet : chaine dans laquelle on cherche le masque. tableau resultat : champ optionnel. Il s’agit d’un tableau de correspondance rempl par la fonction preg_match_all. # C\_ La fonction preg_match_all renvoie dans un tableau toutes les occurrences du maque trouvé dans la chaîne sujette. Un ordre peut être envoyé par le paramètre optionnel. La fonction retourne le nombre de résultats qui satisfont le masque complet, ou FALSE si une erreur survient. S La fonction preg_replace v# Syntaxe <v rV mixed preg_replace (motif de chaîne, nouveau motif, chaîne sujet, int limite).V» La fonction preg_replace remplace le motif de chaîne par le nouveau motif et retourne la chaîne modifiée. Si limite est posé, le nombre de remplacements sera limité La fonction preg_split Syntaxe Array preg split (motif de chaîne, chaîne sujet, int limite, options); La fonction preg_split retourne un tableau contenant les sous-chaînes de chaîne sujet, séparée par les chaînes qui vérifient le motif. Si limite est fournie, alors les limite premières sous-chaînes sont retournées. ISET Kélibia: H.TOUKABRI 58
Développement côté serveur Chapitre 7.L'orienté objet avec PHP Chapitre 7. L’orienté objet avec PHP Objectifs spécifiques À l’issue de ce chapitre l’étudiant serait capable de : Distinguer les notions de classe et objet Définir une classe et l’instancier Produire un script basé sur l’héritage Durée 2h15 Plan du chapitre 7.1. Notion de classe Qu’est-ce qu’une classe ? Composition d’une classe Les attributs Les constantes Les méthodes Visibilité des attributs et des méthodes Déclaration d’une classe P 7.2. Notion d’objet srST.2.1. Qu’est-ce qu’un objet ? Création d’un objet Utilisation des objets Accès aux attributs Accès aux constantes Accès aux méthodes La variable courante $this ISET Kélibia: H.TOUKABRI 59
Développement côté serveur Chapitre 7.L'orienté objet avec PHP 7.5. Les méthodes magiques _construct () et_destruct () get () set () _isset () et_unset () _toString () _call () _clone () L’héritage Définition Redéfinition des méthodes Classe et méthode abstraite Classe abstraite Méthode abstraite Classe et méthode finale Classe finale Méthode finale sO # J* # ISET Kélibia: H.TOUKABRI 60
Développement côté serveur Chapitre 7.L'orienté objet avec PHP 7.1. Notion de classe Qu’est-ce qu’une classe ? Une classe est une collection de variables (attributs) et de fonctions (méthodes) qui fonctionnent avec ces variables Composition d’une classe Les attributs Les attributs (appelés également propriétés, membres ou champs) sont les variables au sein d’une classe. Ils sont définis en utilisant un mot clé spécifiant leur visibilité suivi d’une déclaration classique de variable Les constantes K \ ' Les constantes sont des variables à valeurs non modifiables. La définition d’une constante de classe se fait en utilisant le mot clé const suivi du nom de la constante (sans $) et de sa valeur Les méthodes Les méthodes (parfois appelées fonctions membres) sont des opérations qui utilisent les variables et les constantes d’une classe. Elles sont définies de la même manière que les fonctions traditionnelles en précédent cette déclaration par un mot clé spécifiant le niveau de visibilité de la fonction. Remarque Parmi les méthodes, il existe deux méthodes particulières : le constructeur : Il permet la création d’un objet (instanciation). Un constructeur est une méthode qui porte le même nom que la classe. le destructeur : Il permet la suppression d’un objet. Il est défini par void_destruct ( void). ISET Kélibia: H.TOUKABRI 61
Développement côté serveur Chapitre 7.L'orienté objet avec PHP Visibilité des attributs et des méthodes La visibilité permet de définir de quelle manière un attribut ou une méthode sera accessible dans le programme. PHP introduit 3 niveaux différents de visibilité applicables aux propriétés ou méthodes : Publique : C’est l’accès par défaut de PHP si aucune visibilité n’est précisée. Notée par le mot clé public, la visibilité publique indique qu’un attribut ou méthode est accessible depuis n’importe où dans le programme principal ou bien dans les classes mères héritées ou classes filles dérivées. fvo Privé : Le mot-clé private permet de déclarer des attributs et des méthodes qui ne seront visibles et accessibles directement que depuis l’intérieur de la classe. Aucun accès externe à la classe n’est permis. Protégé : L’accès protégé (protected) est un intermédiaire entre l’accès publique et l’accès privé. Il permet d’utiliser des attributs et méthodes communs dans une classe parente et ses classes dérivées (héritantes). Une classe est définie en utilisant le mot-clé « class » suivi du nom de la classe qui Déclaration d’une classe <?php class Personne { ISET Kélibia: H.TOUKABRI 62
Développement côté serveur Chapitre 7.L'orienté objet avec PHP // Attributs public $nom; public $prenom; public $dateDeNaissance; public $taille; public $sexe; // Constantes const NOMBRE_DE_BRAS = 2; const NOMBRE_DE_JAMBES = 2; const NOMBRE_DE_YEUX = 2; const NOMBRE_DE_PIEDS = 2; const NOMBRE_DE_MAINS = 2; // Méthodes public function construct() { } public function boire() { echo 'La personne boit<br/ public function manger() echo 'La personne mange '; # } _ Remarque L’exemple précédent utilise un constructeur par défaut noté : public function_construct() Notion d’objet Qu’est-ce qu’un objet ? Un « objet » est une représentation du réel à laquelle on associe des propriétés et des actions. Un objet est issu d’une classe. ISET Kélibia: H.TOUKABRI 63
Développement côté serveur Chapitre 7.L'orienté objet avec PHP Exemple Compte bancaire, voiture, panier, etc. Remarque Les propriétés d’un objet sont les attributs propres à un objet. Les actions applicables sur un objet sont les méthodes Création d’un objet \ r VO V Une instance est une représentation particulière d’une classe. L’instanciation d’une classe permet la création d’un objet ayant les attributs et les méthodes de la classe. \ Syntaxe : & & $Nom_de_l_objet = new Nom_de_la_classe; //Cas de constructeur avec paramètres < $Nom de l objet = new Nom de la classe(param 1, param 2, param N ); Remarque On utilise le mot-clé « new Exemple Si le constructeur a des paramètres, l’instanciation se fait en donnant des valeurs à ces paramètres. tS_ $p1=new Personne; V v V \ _ $panier1=new Panier("pain"); s-* Utilisation des objets Accès aux attributs L’accès aux propriétés d’un objet se fait grâce au nom de l’objet, suivi d’une flèche (->) puis du nom de l’attribut (sans le signe $). ISET Kélibia: H.TOUKABRI 64
Développement côté serveur Chapitre 7.L'orienté objet avec PHP Syntaxe $Nom de l objet->Nom de la donnee membre Exemple //Accès en écriture aux attributs nom et prenom de la classe Personne $personne1->nom = 'Nom'; $personne1->prenom = 'Prénom'; //Accès en lecture aux atributs nom et prenom de la classe Personne echo "Nom : ", $personne1->nom ; echo " Prénom : ", $personne1- >prenom ; Accès aux constantes L’accès aux constantes ne peut se faire qu’en lecture via l’opératei Syntaxe Nom de la classe::Nom de la constante ___^-iteur :. S#> Exemple W <?php echo echo 'Chaque personne a ', Personne::NOMBRE DE YEUX,' yeux.'; ?> " " Accès aux métho L’accès aux méthodes se fait comme pour l’accès aux propriétés (le nom de l’objet suivi \\\j d’une flèche et du nom de la méthode). La méthode est suivie de parenthèses, contenant les A\V1 paramètres, si il y’en a. V Syntaxe ISET Kélibia: H.TOUKABRI 65
Développement côté serveur Chapitre 7.L'orienté objet avec PHP $personne1->boire(); $personne1- >manger(); 7.4. La variable courante $this Lorsque l’on désire accéder à une propriété d'un objet à partir d'une méthode du même objet, il suffit de faire précéder le nom de la donnée membre par la variable spéciale $this->. Remarque # Si la propriété d’un objet est définie par le mot clé static, l’accès se fait par SELF:: nomProriété. Exemple <?php class Personne {. // Attributs public $nom; public $prenom; public $dateDeNaissance; public $taille; public $sexe; S? // Constantes vA X" const NOMBRE DE BRAS = 2; const NOMBRE_DE_JAMBES = 2; V#v\\ const NOMBRE DE YEUX = 2; const NOMBRE_DE_PIEDS = 2; const NOMBRE DE MAINS = 2; // Méthodes public function construct() { } public function modifierNom($nom) { $this->nom = $nom; ISET Kélibia: H.TOUKABRI 66
Développement côté serveur Chapitre 7.L'orienté objet avec PHP }}}} 7.5. Les méthodes magiques Les méthodes magiques permettent la manipulation des objets. Elles se reconnaissent par un double underscore (_) avant leurs noms _construct () et_destruct () Ces deux méthodes magiques représentent le constructeur et le destructeur \ classe _get () par défaut d’une La méthode_get () est appelée pour lire des données depuis des propriétés inaccessibles. Son prototype est donné par : public mixed get (string $nomPropriété). mixed ^-^- Exemple < ?php class Personne { private $age ;. public function get($property) { \ if('age' === $property) { return $this->age; } else { v.\ "\> throw new Exception('Propriété invalide !'); } } ?> _set () La méthode_set () est sollicitée lors de l’écriture de données vers des propriétés inaccessibles. Son prototype est donné par : public void_set (string $name, mixed $value). ISET Kélibia: H.TOUKABRI 67
Développement côté serveur Chapitre 7.L'orienté objet avec PHP Exemple _isset () et_unset () La méthode_isset() permet d’utiliser isset() sur une propriété non accessible. Son unique argument est le nom de la propriété et elle retourne un booléen représentant l’existence de la propriété. £ î à_isse La méthode_unset () est similaire à_isset () à la seule différence qu’elle utilise unset () _toString () $ La méthode_toString() est appelée lorsque l’on tente d’utiliser un objet comme une chaine de caractères. Elle n’accepte aucun argument et elle retourne une chaine de caractères. Le développement du corps de la fonction est à la charge du développeur. Il est possible d’utiliser la surcharge de méthode avec_call(). De la même façon que pour les propriétés, cette méthode magique sert à appeler une méthode qui n’existe pas ou qui est inaccessible. Elle accepte deux arguments, le nom de la méthode et un tableau d’arguments. ISET Kélibia: H.TOUKABRI 68
Développement côté serveur Chapitre 7.L'orienté objet avec PHP _clone () Pour faire une copie d’un objet, il faut le cloner, car si l’on se borne à définir des valeurs différentes à un objet existant, on va seulement créer une nouvelle référence vers le même objet L’héritage Définition Quand on parle d’héritage, c’est qu’on dit qu’une classe B hérite d’une classe A. La classe A est donc considérée comme la classe mère et la classe B est considérée comme la classe fille. Exemple <?php class A { public function test() { ISET Kélibia: H.TOUKABRI 69
Développement côté serveur Chapitre 7.L'orienté objet avec PHP Classe et méthode abstraite I. Classe abstraite Une classe abstraite est une classe qu’on ne pourra pas se servir directement. La seule façon Une méthode abstraite d’une classe A est une méthode telle que toutes les classes filles de A doivent l’écrire. Si une classe fille ne réécrit pas une méthode abstraite, une erreur fatale sera générée. Remarque Pour définir une méthode abstraite, il faut que la classe elle-même soit abstraite. ISET Kélibia: H.TOUKABRI 70
Développement côté serveur Chapitre 7.L'orienté objet avec PHP Syntaxe <?php abstract class A { // On va forcer toute classe fille à écrire cette méthode abstract public function fct abstraite(A $cA); // Cette méthode n'aura pas besoin d'être réécrite. public function fct normale () { // Instructions. class B extends A x# // On écrit la méthode « fct abstraite » du même type de visibilité — 1 "V Æ que la méthode abstraite « fct abstraite » de la classe mère A. public function fct abstraite (A $cA) N;N; // Instructions. } } ?> Classe et méthode finale I. Classe finale \ Le concept des classes finales est exactement l’inverse du concept d’abstraction. Si une v\ classe est finale, on ne peut pas créer de classe fille héritant de cette classe. Pour déclarer une classe finale, il faut placer le mot-clé final juste avant le mot-clé class. Syntaxe ISET Kélibia: H.TOUKABRI 71
Développement côté serveur Chapitre 7.L'orienté objet avec PHP // Classe finale, on ne pourra créer de classe héritant de B. final class B extends A { } // Erreur fatale, car la classe C hérite d'une classe finale. class C extends B { } ?> Méthode finale Si une méthode est déclarée finale dans une classe A, toute classe fille comportant cette méthode finale héritera de cette méthode mais ne pourra pas la redéfinir. ISET Kélibia: H.TOUKABRI 72
Développement côté serveur Chapitre 8.Persistance des données Objectifs spécifiques À l’issue de ce chapitre l’étudiant serait capable de : Manipuler les fichiers au niveau serveur Etablir une connexion à une base de données utilisant PDO Exécuter des requêtes en utilisant des méthodes de la classe PDO Durée 2h15 Plan du chapitre 8.1. Gestion des fichiers. # Fonctions de manipulation des fichiers Upload de fichiers Création du formulaire Traitement du fichier uploadé côté serveur La méthode query() La méthode exec() Exploitation du résultat d’une requête Select Nombre de lignes et de colonnes retournés par une requête Accès aux résultats d’une requête ISET Kélibia: H.TOUKABRI 73
Développement côté serveur Chapitre 8.Persistance des données Les requêtes préparées Définition Construction et exécution Gestion des erreurs La méthode errorCode() La méthode errorInfo() Les exceptions Gestion des transactions ISET Kélibia: H.TOUKABRI 74
Développement côté serveur Chapitre 8.Persistance des données 8.1. Gestion des fichiers Fonctions de manipulation des fichiers Consulter Annexe D pour parcourir les fonctions de création, lecture, écriture et fermeture d’un fichier Upload de fichiers Création du formulaire L’upload de fichiers permet d’envoyer depuis un poste client un fichier sur données contenues dans le fichier sont envoyées avec les données stockées dans le formulaire. On parle, alors, de flot de données multiple. Pour tenir compte de ceci, on utilise l’attribut « enctype » de la balise « form » avec la valeur « multipart/form-data ». ■veur. Les Remarque % ^% ^ Au niveau de la création du formulaire, on doit ajouter un champ de type « file ». On peut ajouter un champ de type « hidden », ayant comme nom (attribut : name) « * fV Les informations sur le fichier uploadé sont récupérées via le tableau super global $_FILE. Syntaxe $ FILETnomlTpropriétél ISET Kélibia: H.TOUKABRI 75
Développement côté serveur Chapitre 8.Persistance des données Avec : nom : désigne le nom du champ du formulaire. propriété : elle peut avoir la liste des valeurs suivantes : - name : désigne le nom original du fichier tel que sur la machine du client. - type : désigne le type MIME 4 du fichier. - size : désigne la taille, en octets, du fichier uploadé. - tmp name : désigne le nom temporaire du fichier sur le serveur. - error : désigne le code d’erreur associé au téléchargement du fichier. r '~ f+ " propriété a été introduite à partir de PHP4. Remarque Pour savoir si un fichier a été correctement uploadé par la méthode POST, on peut utiliser la fonction is_uploadedJile() qui prend comme paramètre le nom du fichier uploadé. c'sv Exemple _.XT_ if(is uploaded file($ FILEt'nomFichier'H'name 1 ])) {// ou tmp name “ _ _ %\r\xv ' echo $ FILES['nomFichier, ][, size']; } 8.2. Redirection PHP La fonction header() envoie au client l’ordre de changer de page. Le code PHP situé après l’appel de la fonction header() sera interprété par le serveur, même si le visiteur est déjà parti à l’adresse spécifiée dans la redirection, ce qui signifie que dans la plupart des cas il faut faire suivre la fonction header() de la fonction exit() afin de ne pas faire travailler le serveur pour rien. 4 MIME (Multi-purpose Internet Mail Extensions) : Les types MIME constituent une façon normalisée de classer les différents types de fichiers sur Internet. Les programmes Internet (serveurs et navigateurs Web) disposent tous une liste de types MIME afin de pouvoir transférer les mêmes types de fichiers de la même façon. Un type MIME se compose de deux parties : un type et un sous-type. Ils sont séparés par une barre oblique (/). Exemple : application/pdf désigne un fichier pdf. ISET Kélibia: H.TOUKABRI 76
Développement côté serveur Chapitre 8.Persistance des données Exemple <?php //Redirection simple header('Location: page.php'); //Redirection en utilisant un chemin (absolu/relatif) header('Location: /repertoire/page.php'); //Redirection vers un lien externe header('Location: ?> 8.3. PDO Définition L’extension PHP Data Objects, notée PDO, définit une interface d’abstraction pour accéder à une base de données depuis PHP. PDO fait intervenir le concept de programmation orientée objet. Remarque So >. V xien.é, ■ PDO requiert les fonctionnalités orientées objet fournies par PHP5 et ne fonctionne pas avec les versions antérieures de PHP. PDO fournit une interface d’abstraction pour l’accès aux données d’une base et non pas une abstraction de la base de données. (Il n’y a pas une réécriture de SQL). PDO supporte la plupart de bases de données telles que MySQL, Oracle, PostgreSQL, etc. W*' de connexion xion à la base de données Indépendamment du driver de la base utilisé, l’établissement d’une connexion se fait en instanciant la classe PDO. Syntaxe $objet PDO = new PDO ("dsn","nom d utilisateur","mot de passe") ISET Kélibia: H.TOUKABRI 77
Développement côté serveur Chapitre 8.Persistance des données Avec : $objet_PDO : indique le nom de l’objet instancié. Ce nom est utilisé pour accéder à la base de données. dsn : (Data Source Name) désigne la source de la base de données. Ce paramètre se compose comme suit « type_de_base:host=machine_qui_héberge_la_base;dbname=nom_de_la_base » avec : type_de_base : désigne le type de la base utilisée. Il correspond à l’une des valeurs suivantes : mssql (FreeTDS/Microsoft SQL Server/Sybase) firebird (Firebird/Interbase 6) informix (IBM Informix Dynamic Server) mysql (MySQL 3.x/4.x/5.x) oci (Oracle Call Interface) V e * odbc (ODBC v3 --IBM DB2 unixODBC et win32 ODBC--)) pgsql (PostgreSQL) \>CSV sqlite (SQLite 3 et SQLite 2) - host=machine_qui_héberge_la_base : désigne l’adresse de la base de données. Par exemple localhost. - dbname=nom_de_la_base : désigne le nom de la base de données. nomdutilisateur : désigne le nom de l’utilisateur de la base. mot de_passe : désigne le mot de passe de l’utilisateur de la base de données Déconnexion de la base de données NT La déconnexion de la base est réalisée de 3 façons différentes : On assigne null à la variable gérant l’objet PDO. ($objet_PDO = null). On utilise la fonction unset(). (unset($objet_PDO)). PHP ferme automatiquement la connexion lorsque le script termine son exécution. ■ ■ ■ ■ ISET Kélibia: H.TOUKABRI 78
Développement côté serveur Chapitre 8.Persistance des données Exécution d’une requête I. La méthode query() Syntaxe $res = $objet PDO->query('requete SQL') ; Avec : $res : désigne un objet de type PDOStatemet. Il permet la manipulation du résulta de la requête. $objet_PDO : désigne l’objet PDO permettant l’accès à la base de données. ltat requete SQL : c’est une requête Select. & SS La fonction query() exécute une requête SQL et retourne un jeu de résultats en tant qu’objet de type PDOStatement. La fonction query() est bien adaptée pour les requêtes Select La méthode exec() Syntaxe W AS ; $nb = $objet PDO->exec('requete SQL') “ ~ V7V7 Avec : $nb : désigne le ; nombrre de ligne affectées par la requête. $objet_PDO : désigne l’objet PDO permettant l’accès à la base de données. requete SOL : c’est une requête de modification/insertion (UPDATE, INSERT, DE : DELETE). La fonction exec() exécute une requête SQL. Elle est bien adaptée pour les requêtes autres que Select et retourne le nombre de lignes affectées par la requête. ISET Kélibia: H.TOUKABRI 79
Développement côté serveur Chapitre 8.Persistance des données Exploitation du résultat d’une requête Select I. Nombre de lignes et de colonnes retournés par une requête Les fonctions rowCount() et columnCount() permettent de retourner respectivement le nombre de lignes et le nombre de colonnes d’une requête. Syntaxe $res = $objet PDO->query('requete SQL') ; $res->rowCount() ; //retourne le nombre de lignes $res->columnCount() ; //retourne le nombre de colonnes Accès aux résultats d’une requête { Après avoir exécuté la requête Select par la fonction query(), la fonction fetchAll() permet de renvoyer un tableau à deux dimensions (ligne, colonne) contenant le résultat. L’accès à ce tableau peut être effectué par les indices ou par les noms des colonnes. $res : désigne un objet de type PDOStatemet. Il permet la manipulation du résultat de la requête. $objet_PDO : désigne l’objet PDO permettant l’accès à la base de données. ^ : c est une requete Select Exemple On se donne la table Personne (CIN, Nom, Prénom, Age) $res = $obj_PDO->query("SELECT * FROM Personne”); $data = $res->fetchAll(); //Accès par les noms des colonnes foreach ($data as $ligne) { ISET Kélibia: H.TOUKABRI 80
Développement côté serveur Chapitre 8.Persistance des données echo $ligne["Nom"]. " : ". $ligne["Age"]. " "; } //Accès par les numéros des colonnes foreach ($data as $ligne) { for ($i=0 ; $i columnCount() ; $i++) { echo $ligne[$i]." ** "; } echo " "; } //Accès par les numéros des lignes et les numéros des colonnes for ($l=0;$l rowCount();$l++) { for ($i=0;$i columnCount();$i++) { echo $data[$l][$i]." ** "; } echo " "; } Les requêtes préparées I. Définition Une requête préparée (ou requête paramétra ible) est une requête récurrente, que l’on compile avec des variables, et donc réutilisable (exécutée plusieurs fois) en fournissant les valeurs manquantes. Sa visibilité est limitée à la session fournie par MySQL. Avantages d’une requête pr ■éyarée Performances (la requête est déjà compilée) Éviter les risques d’injection SQL (paramètres transmis sous forme binaire) Économiser la bande passante U Construction et exécution a. La méthode prepare() Syntaxe PDOStatement prepare (string $requête [, array $options driver = array() ]) ISET Kélibia: H.TOUKABRI 81
Développement côté serveur Chapitre 8.Persistance des données Avec : $requête : désigne la requête SQL préparée. $options_driver : Ce tableau contient une ou plusieurs paires « clé=>valeur » pour définir les valeurs des attributs pour l’objet PDOStatement que cette méthode retourne. Si le serveur de base de données prépare avec succès la requête, la méthode prepare() retourne un objet PDOStatement. Si le serveur de base de données ne réussit pas à préparer la requête, la méthode prepare() retourne FALSE ou émet une exception PDOException. K) & b. La méthode execute() Syntaxe # bool execute ([ array $paramètres Entrée] ) Avec : $paramètres_Entrée : Un tableau de valeurs avec autant d’éléments qu’il y a de paramètres à associer dans la requête SQL qui sera exécutée. La méthode execute() retourne TRUE en cas de succès ou FALSE si une erreur survient. $paramètre : Il s’agit d’un identifiant. Pour une requête préparée utilisant des marqueurs nommés, ça sera le nom du paramètre sous la forme :name. Pour une requête préparée utilisant les marqueurs interrogatifs, ce sera la position indexé -1 du paramètre. ISET Kélibia: H.TOUKABRI 82
Développement côté serveur Chapitre 8.Persistance des données $variable : C’est le nom de la variable PHP à lier au paramètre de la requête SQL. data type : désigne le type explicite de données pour le paramètre utilisant la constante PDO::PARAM_* constants. C’est un paramètre optionnel. $taille : désigne la longueur du type de données. C’est un paramètre optionnel. $options_driver : cela désigne les options liées au driver. C’est un paramètre optionnel. La méthode bindParam() retourne TRUE en cas de succès ou FALSE si une erreur survient. Elle permet de lier une variable PHP à un marqueur nommé ( :name) ou interrogatif ( ?) correspondant dans une requête SQL utilisée pour préparer la requête. Exemple Exécution d’une requête préparée avec des emplacements nommé imés <?php /* Exécution d'une requête préparée en liant des variables PHP */ $calories = 150; $couleur = 'rouge'; $sth = $dbh->prepare('SELECT nom, couleur, calories FROM fruit WHERE calories < :calories AND couleur = :couleur'); "V. ■v $sth->bindParam(':calories', $calories, PDO::PARAM INT); r Y ’ _ $sth->bindParam(':couleur', $couleur, PDO::PARAM STR, 12); $sth->execute(); cvV» ECT nom, Exécution dête préparée avec des marques de positionnement <?php A\vi /* Exécution d'une requête préparée en liant des variables PHP \ » */ $calories = 150; $couleur = 'rouge'; $sth = $dbh->prepare('SELECT nom, couleur, calories FROM fruit WHERE calories < ? AND couleur = ?'); $sth->bindParam(1, $calories, PDO::PARAM INT); $sth->bindParam(2, $couleur, PDO::PARAM STR, 12); $sth->execute(); ISET Kélibia: H.TOUKABRI 83
Développement côté serveur Chapitre 8.Persistance des données ?> Gestion des erreurs I. La méthode errorCode() La méthode errorCode() renvoie le code d’erreur associé avec la dernière opération effectuée sur la base de données. Sa valeur est 0 (zéro) s’il n’y a pas eu d’erreur. Exemple On suppose que la variable $req contient une requête à exécuter sur la base de données $db. On veut tester le résultat d’exécution de la requête. \ $db->query($req); // exécution de la requête if ($db->errorCode()==0) { echo 'La requête a été exécutée sans erreur'; % } La méthode errorInfo() La méthode errorInfo() retourne les informations associées à l’erreur survenue lors de la dernière opération sur la base de données. La méthode renvoie un tableau défini comme suit ÉlémentInformation 0 Code d’erreur SQLSTATE (un identifiant alphanumérique de 5 caractères défini dans le standard ANSI SQL) 1 Code d’erreur spécifique au driver 2 Message d’erreur spécifique au driver Remarque Si le code erreur SQLSTATE n’est pas défini ou s’il n’y a pas d’erreur spécifique du driver, l’élément suivant l’élément 0 sera défini à NULL. ISET Kélibia: H.TOUKABRI 84
Développement côté serveur Chapitre 8.Persistance des données Les exceptions Les exceptions sont une façon différente de gérer les erreurs. Une exception ne peut être traitée que si elle est déjà lancée. La gestion des erreurs en utilisant les exceptions nécessite l’utilisation du bloc try{} et catch().S’il y a une erreur dans le bloc try, PHP passe automatiquement dans le bloc catch et exécute l’instruction die() (c’est comme la fonction exit()) et termine le script. Syntaxe try{ //Code susceptible de lever une exception $objet_PDO->setAttribute (PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo $e->getMessage(); // affiche un message d'erreur die(); } S Gestion des transactions o# Une transaction est un ensemble d’actions qui prend la base de données dans un état cohérent et elle la rend dans un autre état cohérent. Elle donne l’illusion à l’utilisateur d’être seule à utiliser la base de données. L’exécution d’une transaction se termine par commit ou abort (rollback) : Commit : la transaction est réussie, ses mises à jour sont incorporées dans la BD. On utilise la méthode PDO commit(). Abort : la transaction a échoué, elle n’a aucun effet sur la base de données. On utilise la méthode PDO rollback(). Remarque Pour marquer le début d’une transaction, on utilise la méthode PDO beginTransaction(). Exemple <?php try ISET Kélibia: H.TOUKABRI 85
Développement côté serveur Chapitre 8.Persistance des données //on tente d'exécuter les requêtes suivantes dans une transaction //on lance la transaction $pdo->beginTransaction(); //Les 3 requêtes à exécuter $pdo- >query('$req1'); $pdo->query('$req2'); $pdo->query('$req3'); //si jusque là tout se passe bien on valide la transaction $pdo->commit(); } catch(Exception $e) //en cas d'erreur { //on annule la transation $pdo->rollback(); //on affiche un message d'erreur ainsi que les erreurs echo 'Erreur d'exécution, voir les erreurs ci-dessous rv v. '; echo 'Erreur : '. $e->getMessage(). ' '; echo 'N° : '. $e->getCode(); //on arrête l'exécution s'il y a du code après exit(); u co # ISET Kélibia: H.TOUKABRI 86
Développement côté serveur Chapitre 9. Cookies, sessions et s Chapitre 9. Sessions, Cookies et s Objectifs spécifiques À l’issue de ce chapitre l’étudiant serait capable d’appliquer le principe de sessions, cookies et s dans le développement d’un site web Durée 45 mn Plan du chapitre 9.1. Les sessions Principe Utilisation Ouverture Variables de session Fin de session Les cookies. :::sB s\ ,# Définition Création : la fonction setcookie() Accès : tableau superglobal $_COOKIE Suppression d’un cookie Les E- mails ISET Kélibia: H.TOUKABRI 87
Développement côté serveur Chapitre 9. Cookies, sessions et s 9.1. Les sessions Principe Les sessions permettent de préserver des données lors de la visite d’un site. Chaque personne se voit attribué un identifiant unique appelé identifiant de session, ou SID (Session IDentifier). Ce SID est soit stocké dans un cookie, soit passé par URL. On peut ainsi définir un nombre infini de variables qui seront accessibles durant toute la durée de la session. Remarque \T^ Le fait de relancer le navigateur, le SID change et la session précédente est perdue. On peut connaître son SID grâce à la constante de même nom, ou par la fonction session_id() Utilisation Ouverture Deux méthodes sont préconisées V ». Activer la valeur « session.auto_.start » d ans le fichier PHP.INI. Les sessions sont, dans ce cas, démarrées automatiquement lors de l’accès à une page. Utiliser la fonction session_start(). Son appel crée une session ou restaure une déjà stockée sur le se S/ sessionserveur. Syntaxe bool session start (void) session_start() crée une session ou restaure celle trouvée sur le serveur, via l’identifiant de session passé dans une requête GET, POST ou par un cookie. Elle retourne TRUE si une session a pu être démarrée avec succès, et FALSE sinon. Remarque La fonction session_name() permet de récupérer une session nommée. La fonction prend en paramètre le nom de la session et elle doit être appelée avant la fonction session_start(). ISET Kélibia: H.TOUKABRI 88
Développement côté serveur Chapitre 9. Cookies, sessions et s La session par défaut est appelée « PHPSESSID ». c’est cette session qui est chargée si session_name() n’est pas appelée. 9.I.2.2. Variables de session Deux moyens sont utilisés pour créer des variables de session : Le premier est avec l’utilisation de la fonction session_register() qui ne fonctionne que si register globals est à off dans PHP.INI. Ce mode est, donc, déconseill Le second consiste à l’utilisation du tableau superglobal $_SESSION. Exemple // Création de la variable de session txt $ SESSION[, txt, ]="Bonjour les amis"; // Affichage de la variable de session txt echo $_SESSION['txt'] // Suppression de la variable de session txt unset($_SESSION['txt']);. Jv> // Suppression de toutes les variables de session $ SESSlON=array(); Fin de session JO La fin d’une session est la destruction du tableau de variables $_SESSION. Elle pourrait être réalisée en appelant la fonction session_destroy(). N ^ 9.2. Les cookies Définition Un témoin de connexion (en anglais cookie) est un fichier texte de taille limitée (65 KO) qu’un serveur web installe sur l’ordinateur d’un internaute lors de la visite d’un site web et qui peut être récupéré par ce serveur lors de visites subséquentes. Remarque Les témoins ne sont ni des logiciels espions ni des virus. ISET Kélibia: H.TOUKABRI 89
Développement côté serveur Chapitre 9. Cookies, sessions et s Les cookies sont généralement stockés dans la liste des fichiers temporaires du navigateur du client Création : la fonction setcookie() Syntaxe bool setcookie (string $nom [, string $valeur [, int $expire = 0 [, string $chemin[, string $domaine [, bool $securise = false [, bool $httponly = false ]]]]]] ) Avec : $nom : Il désigne le nom du cookie $valeur : Ce champ désigne la valeur du cookie. Cette valeur est stockée sur l'ordinateur du client. Il ne faut pas stocker des informations importantes (mot de passe, etc.). $expire : C’est le temps après lequel le cookie expire. Il s'agit d'un timestamp. $chemin : Le chemin sur le serveur sur lequel le cookie sera disponible. $domaine : Le domaine pour lequel le cookie est disponible. Ssecurise : C’est un flag de sécurité. Le cookie n’est accessible que via une connexion securisee. $httponly : Si ce paramètre vaut TRUE, le cookie ne sera accessible que par le protocole HTTP. Cela signifie que le cookie ne sera pas accessible via des langages de scripts, comme Javascript. (Ajouté à partir de PHP5). Un cookie s'envoie avec la fonction setcookie().Si quelque chose a été envoyé sur la sortie standard avant l'appel à cette fonction, setcookie() échouera et retournera FALSE. Si setcookie() réussi, elle retournera TRUE. Cela n'indique pas si le client accepte ou pas le cookie. Remarque Seul le premier paramètre est obligatoire. Un cookie étant envoyé avec les entêtes HTTP, il ne peut pas être envoyé si une sortie a déjà eu lieu (html, texte, etc.) ISET Kélibia: H.TOUKABRI 90
Développement côté serveur Chapitre 9. Cookies, sessions et s Un cookie n’est pas disponible dans la page qui l’a créé. Il faut soit recharger la page, soit pointer sur une autre. Un cookie ne peut être supprimé qu’avec les mêmes paramètres qui ont servi à sa création. C’est le navigateur qui supprime le cookie Accès : tableau superglobal $_COOKIE L’accès au cookie se fait grâce au tableau superglobal $_COOKIE. L’index du tableau est le nom du cookie. Exemple % setcookie("nomCookie", "test",time()+3600); if(isset($ COOKIE['nomCookie'])) echo $ COOKIE['nomCookie']; Suppression d’un cookie r Pour supprimer un cookie, il suffit de donner une date antérieure à la date actuelle à celui-ci Les s Il existe différents moyens pour envoyer un en PHP, le plus simple étant d’utiliser la fonction mail(). ISET Kélibia: H.TOUKABRI 91
Développement côté serveur Chapitre 9. Cookies, sessions et s Syntaxe bool mail (string $pour, string $sujet, string $message [, string $entetes supplémentaires [, string $parametres supplémentaires]]) Avec : $pour : Ceci désigne Le ou les destinataires du mail. Il doit être un format de mail valide. $sujet : Sujet du mail à envoyer. cN? N $message : Ceci désigne le message envoyé qui est composé de lignes séparées par des retours chariot (\r) ou des retours à la ligne (\n). Chaque ligne ne doit pas dépasser 70 caractères. $entetes_supplementaires : C’est un paramètre optionnel. Il s’agit de la chaîne à insérer à la fin des en-têtes du mail. $parametres_supplementaires : C’est un paramètre optionnel. Il peut être utilisé pour passer des drapeaux additionnels. AV La fonction mail() envoi automatiquement le texte « message » au destinataire(s). Elle retourne TRUE si le mail est envoyé et FALSE dans le cas contraire. Remarque Pour envoyer un mail à plusieurs — destinataires, il faut séparer les adresses par des virgules. ISET Kélibia: H.TOUKABRI 92
Développement côté serveur Chapitre 10. La sécurité avec PHP5 Objectifs spécifiques À l’issue de ce chapitre l’étudiant serait capable de : Reconnaître quelques failles de sécurité des applications web et leurs conséquences Intégrer des moyens pour protéger son code d’éventuelles attaques Durée 45 mn Plan du chapitre Introduction Attaque Cross Site Scripting (XSS) Définition # Conséquences possibles Remèdes Attaque Cross Site Request Forgery (CSRF) Définition Conséquences possibles Remèdes Attaque par injection SQL Définition Conséquences possibles Remèdes Attaque Local File Inclusion (LFI) ou Remote File Inclusion (RFI) Définition Conséquences possibles Remèdes ISET Kélibia: H.TOUKABRI 93
Développement côté serveur Chapitre 10. La sécurité avec PHP Introduction Une application développée en PHP repose sur l’architecture client/serveur ce qui l’apprête à plusieurs vulnérabilités. Pour s’assurer de la sécurité d’une telle application, on peut vérifier : L’intégrité : les données échangées entre le client et le serveur sont-elles fiables. L’authentification : l’application communique-t-elle avec les bonnes entités. La confidentialité : les données échangées sont-elles préservées (confidentielles). s) Attaque Cross Site Scripting (XSS) Définition & Le cross-site scripting (abrégé XSS), permet d’injecter du contenu dans une page, N % provoquant ainsi des actions sur les navigateurs web visitant la page. Le script malicieux va avoir accès au Document Object Model (DOM) et exécute des actions à l’insu du visiteur. À leur insu, les utilisateurs envoient leurs infos à l’url du formulaire qui a été détournée. ^ r Conséquences possibles Vol d’information Détournement des sessions et des cookies Redirection du traitement vers un autre site similaire (pishing) Modification de la présentation du site ISET Kélibia: H.TOUKABRI 94
Développement côté serveur Chapitre 10. La sécurité avec PHP Remèdes Pour se protéger des attaques XSS, il faut : filtrer les entrées du site ($_GET, $_POST, $_COOKIE) en validant seulement les accès autorisés. protéger les données envoyées vers le navigateur avec htmlentities ou htmlspecialchars avec le paramètre ENT_QUOTES ; préciser le jeu de caractères de chaque page web dynamique (évite une interprétation différente selon le navigateur) ; <META http-equiv="Content-Type" content="text/html; charset=ISO "> m utiliser les fonctions prédéfinies utf8_decode et strip_tags (suppression des balises dans la chaîne) ; Attaque Cross Site Request Forgery (CS Définition Une attaque par falsification de requête inter-sites (CSRF) force le navigateur d’une victime authentifiée à envoyer une requête http, comprenant le cookie de session de la victime ainsi que toute autre information automatiquement inclue, à un site web vulnérable. Ceci permet à l’attaquant de forcer le navigateur de la victime à générer des requêtes, le site web vulnérable considérant alors qu’elles émanent légitimement de la victime Conséquences possibles Vol d’mf~~~" +: — on Corruption de données Remèdes Exiger une requête POST pour tout comportement ayant un effet de bord Empêcher l’inclusion d’une page dans une autre (avec l’en-tête HTTP X- Frame-Options) Faire en sorte que l’accès à cette page soit contrôlé par des tokens uniques non devinables ISET Kélibia: H.TOUKABRI 95
Développement côté serveur Chapitre 10. La sécurité avec PHP Attaque par injection SQL Définition L’injection SQL peut être une conséquence directe d’un mauvais contrôle des données saisies par l’utilisateur. En effet, les caractères « ‘ » et « ; » peuvent être utilisés pour enchaîner plusieurs requêtes SQL à la suite. Exemple Supposons que $p vale « ’ OR 1=1 -- » dans : $result=pg_query("SELECT * FROM T WHERE passwd=’$p’"); Conséquences possibles # Altération de données Révélation d’informations Déni de service r Il ne faut jamais construire une requête contenant des caractères spéciaux. A la place, il est conseillé d’utiliser les requêtes ^préparées. Dans le cas où l’utilisation de requêtes Remèdes paramétrées n’est pas possible, il faudrait mieux utiliser les fonctions de protections de caractères spéciaux tel que par exemple pg_escape_string Attaque Local File Inclusion (LFI) ou Remote File Inclusion (RFI) Définition ‘ NV ^’attaque LI L’attaque LFI consiste à intégrer un lien vers un script malveillant uploadé sur le site web. L’attaque RFI permet d’intégrer des fichiers et/ou des pages web externes au site web. Ces fichiers/ pages web contient la plupart de temps un lien vers un site web malveillant. Exemple <?php $page = array key exists('page', $ GET) ? $ GET['page'] : null ; ISET Kélibia: H.TOUKABRI 96
Développement côté serveur Chapitre 10. La sécurité avec PHP5 Ce script ne fait qu’attendre un paramètre HTTP GET nommé page, qui correspondra à un flux, pour ensuite le rendre dans la page résultante. Si le fichier de configuration php.ini contient les directives suivantes : allow_url_fopen = On allow url include = On # Attaque LFI possible Supposons l’existence d’un fichier nommé « config.xml » dans un sous dossier serait possible d’afficher son contenu « BD », il comme suit : Attaque RFI possible /v fig.xml On peut passer en paramètre une url pointant vers un script malicieux développé par un pirate : & Le script « exploit.php » sera récupéré par l’application et exécuté puis rendu dans la page ScS ’ Conséquences possibles LFI - D’accéder au code source de fichiers privés stockés sur le serveur ciblé par l’attaque - D’exécuter un script disponible sur le serveur dans un contexte non conventionnel (non prévu par le système d’information) RFI ISET Kélibia: H.TOUKABRI 97
Développement côté serveur Chapitre 10. La sécurité avec PHP5 - De faire exécuter par l’application un script stocké sur un serveur distant et construit sur-mesure par le pirate - De défigurer le site Remèdes Pour se protéger des attaques LFI/RFI, on doit utiliser : allow_url_include : include ne peut pas inclure d’URL allow_url_fopen : fopen ne peut pas ouvrir un stream HTTP register_globals : protège les variables globales # ISET Kélibia: H.TOUKABRI 98
2. $a=5; echo "a vaut $a"; 3. echo 'Ceci 'est 'un ', 'exemple.' ; 4. echo '\n'; 5. echo "\n"; \'oN 6. $var=3.14; $retFonc = settype($var,"integer"); echo '$var = ', $var, " ", '$retFonc = ', $retFonc; ■ 7. $varl = 1; $var2 = &$varl ; echo "$varl,$var2 | $varl = 2; echo "$varl,$var2" ; 9. <?php $var1= 9; echo gettype($var1). " | "; $var1= $var1 / 2; echo gettype($var1). " | "; unset($var1); ISET Kélibia: H.TOUKABRI 100
echo gettype($var1); ?> Exercice 2 Donner le type et la valeur de la variable $var suite à l’exécution de chacun des blocs suivants Considérons trois variables : module, nom et commentaire. Initialiser : - La variable module à « PHP » La variable nom à « Mohamed » ^a variable commentaire avec « Mon nom est : » Concaténer le commentaire au nom, le message « Je suis le module : » à la variable module. Créer la page PHP résultat. ISET Kélibia: H.TOUKABRI 101
û Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Développement côté serveur Enseignante : H. TOUKABRI Niveau : L2 Filières : DSI/MDW TD N° 2 Exercice 1 Ecrire un script qui teste si un nombre (déclaré directement dans le pi ) est à la fois un multiple de 8 et de 3. Exercice 2 Écrire un script permettant de :. % N !> Y N 1. Tirer aléatoirement un nombre entre 1 et 100 et de le stocker dans la variable $age. Pour cela, on utilise la fonction prédéfinie rand dont la syntaxe est donnée par : \A Y * int rand (rint $min, int $max ).La fonction rand retourne une valeur aléatoire entre $min et $max. \ 2. Afficher le contenu de la variable $age. vVO 3. Afficher un message selon les conditions suivantes : - si l’âge est inférieur à 10, on affiche « enfant » si l’âge est compris entre 10 et 19, on affiche « adolescent » i l’âge est compris entre 20 et 39, on affiche « jeune » si l’âge est compris entre 40 et 59, on affiche « adulte » si l’âge est supérieur ou égal à 60, on affiche « vieux » Exercice 3 Écrire un script permettant l’affichage de la table de multiplication d’un nombre (à choisir). ISET Kélibia: H.TOUKABRI 102
Exercice 4 Écrire un programme qui affiche les nombres de 0 à 20 de trois en trois. Exemple Exercice 5 Écrire un script php permettant de tracer une forme géométrique composée d’étoiles. # ISET Kélibia: H.TOUKABRI 103
€1 Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Développement côté serveur Enseignante : H. TOUKABRI Niveau : L2 Filières : DSI/MDW TD N° 3 Exercice 1 Écrire un script permettant de créer un tableau contenant une lis d’adresses de sites C\ J recommandés, puis créer un lien aléatoire vers le premier site de la e après avoir trié le. \y tableau en ordre aléatoire. On donne : mixed array_rand (array $array [, int $num = 1]) : Sélectionne une ou plusieurs valeurs au hasard dans un tableau et retourne la ou les clés de ces valeurs. $num désigne le nombre de 'N v valeurs à récupérer. Exemple Si on considère le tableai $tab = array ( "SQLite" = ite" => " leau $tab : ("PHP" => " "MySQL" => " ' Le résultat d’affichage serait après un choix aléatoire à partir de $tab est : Site recommandé : PHP Exercice 2 On considère le tableau suivant : $voy = array ('a', 'e', 'o', 'u', 'y') ; ISET Kélibia: H.TOUKABRI 104
Écrire le script permettant d’insérer la voyelle manquante à ce tableau. On donne : array array_slice (array $array, int $offset [, int $iength = NULL [, bool $preserv e_keys = false]]) : retourne une série d’éléments du tableau array commençant à l’offset offset et représentant length éléments. $preserve_keys permet de garder l'ordre des clés définies par l'utilisateur si elle est à true sinon l'ordre préconisé est un ordre numérique des indices. array array merge (array Sarrayï [, array $... ]) : fusionne plusieurs tableau en rassemblant les valeurs les unes à la suite de autres. Exercice 3 $ Créer un tableau contenant deux « sous-tableaux » (tableau à 2 dimensions) : un sous-tableau de 3 teintes (rouge, jaune, bleu) et un sous-tableau de 3 luminances (faible, moyenne, forte). Afficher le contenu du tableau dans une html. Exercice 4 Considérons les deux tableaux suivants : # its : ux suivani fX/ $mois = array (1=>'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Décembre'); i le = arra y (1 = $couleurCellule = array (1=>'blue', 'white', 'red', 'yellow', 'grey', 'lime', 'lightblue', 'fuchsia', 'lightgrey', 'olive', 'pink', 'purple'); olive. icnre un s iour chai cript permettant d’afficher la liste des mois dans une html en attribuant pour chaque mois une couleur d’arrière-plan issu du tableau $couleurCellule. ISET Kélibia: H.TOUKABRI 105
û Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Développement côté serveur Enseignante : H. TOUKABRI Niveau : L2 Filières : DSI/MDW TD N° 4 Exercice 1 Écrire une fonction récursive permettant de vérifier si un nombre passé en paramètre est un V entier. (Ne pas utiliser la fonction prédéfinie is integer). Exercice 2 Écrire une fonction txtToHTML qui reçoit en paramètre une chaîne de caractères et un entier x. m représentant un code de formatage HTML. Le code de formatage représente un nom de balise x ' -w HTML et sera parmi p, hl et h2, b. La fonction doit renvoyer la chaîne entourée de la balise correspondant au formatage demandé. Si le code de formatage n’est pas parmi ceux autorisés, la fonction ne renvoie rien. V S Exemple Si 4 correspond au code de formatage b, txtToHTML ("texte", 4) retourne texte. Exercice 3 Écrire une fonction ligne prenant en argument un entier $n et un caractère $c, et renvoyant une chaîne de caractère composées de $n fois le symbole $c. 1. En utilisant la fonction ligne, écrire une fonction pyramide qui prend en entrée un entier $n, et affiche une pyramide de caractères $c et de hauteur $n. ISET Kélibia: H.TOUKABRI 106
Exemple Pour $n=3 et $c='*', on affiche ** 2. Modifier la fonction précédente, de sorte que la pyramide ne soit construite que si l’entier donné en paramètre est plus petit que 10. Elle renverra un message d’erreur dans le cas contraire. Exercice 4 On se propose de gérer une classe d’étudiants. inf 5^5^ v 1. Définir la structure permettant de stocker les informations relatives à un étudiant. Un étudiant est défini par son numéro de carte d’identité, son nom, son prénom, sa date de naissance et sa note en PHP. 2. Écrire une procédure afficherEtudiant permettant d’afficher les informations relatives à un étudiant sous forme d’une ligne d’une table HTML. (Une ligne de la balise ). 3. Écrire une fonction getNote permettant de retourner la note d’un étudiant donné. 4. Créer une structure représentant une classe d’étudiants comme un tableau étudiants. Créer une procédure afficherClasse permettant d’afficher une classe d’étudiants. * ISET Kélibia: H.TOUKABRI 107
ffii Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Développement côté serveur Enseignante : H. TOUKABRI Niveau : L2 Filières : DSI/MDW TD N° 5 Exercice 2 Exercice 1 Écrire une classe représentant une ville. Elle doit avoir les propriétés nom et position (pour position géographique) et une méthode affichant « la ville X est au Y de la Tunisie ». Créer des objets ville, affecter leurs propriétés, et utiliser la méthode d’affichage. c ' Une entreprise a un certain nombre d’employés. Un employé est connu par son nom, son matricule (identifiant unique) et son indice salarial. Le salaire est calculé en multipliant cet indice par une certaine valeur qui peut changer en cas d’augmentation générale des salaires, mais qui est la même pour tous les employés. 1. Écrire la classe des employés avec les informations utiles et des méthodes pour afficher les caractéristiques d’un employé et pour calculer son salaire. 2. Créer l’e hamed » avec le matricule 1 et l’indice salarial 2. Afficher, ensuite, les informations de « Mohamed ». Exercice 3 1. Créer une classe abstraite représentant une personne. Elle déclare les propriétés nom et prénom et un constructeur. 2. Créer une classe client dérivée de la classe personne en y ajoutant la propriété adresse, une méthode getCoord() qui retourne les coordonnées de la personne et une méthode setCoord($adresse) qui affecte les coordonnées de la personne. ISET Kélibia: H.TOUKABRI 108
3. Créer une classe électeur dérivée de la même classe abstraite personne, et ajouter-y deux propriétés bureau_de_vote et vote, ainsi qu’une méthode aVote(), qui enregistre si une personne a voté dans la propriété vote. ISET Kélibia: H.TOUKABRI 109
Corrigés des
ffii Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Développement côté serveur Enseignante : H. TOUKABRI Niveau : L2 Filières : DSI/MDW Correction TD N° 1 Exercice 1 Les résultats d’affichage sont donnés par : & 1. a vaut $a : L’utilisation d’apostrophes ne permet pas l’évaluation du contenu de la V variable. 2. a vaut 5 : Utiliser des guillemets indique l’évaluation de $a qui est égale à Ceci est un exemple. : Les mots de cette phrase ont été attachés par le caractère de concaténation de chaînes «, ». 4. \n : L’instruction echo affiche le message entre apostrophes sans évaluation, « \n » est considéré comme étant une chaîne de caractères et non pas un caractère spécial. 5. Pas d’affichage car il s’agit d’un retour chariot : \n est évalué comme étant un retour chariot en HTML. Si l’on souhaite avoir un retour à la ligne, on doit utiliser la balise. 6. $var = 3 $retFonc = 1 : La fonction settype force la conversion de type de la variable $var en entier d’où le premier affichage $var = 3. Le retour de la fonction settype est stocké dans la variable $retFonc. Vu que la fonction a réussi donc le retour est égale à.u | 7. 1,1 | 2,2 : $var2 a été assigné par référence à $var1 donc toute modification de valeur de $var1 est répercuté sur $var2 vu que celle-ci n’est qu’un alias de $var1. 8. Aucun affichage : le premier echo n’affiche rien car $var1 n’est pas assigné. Le second affichage est précédé par la fonction unset qui supprime la variable $var1. 9. integer | double | erreur « undefined variable » : la première instruction gettype affiche le type integer, la deuxième instruction gettype retourne le type double car le retour $var1 ISET Kélibia: H.TOUKABRI 111
divisé par 2 est un réel. La troisième instruction gettype génère une erreur car elle a été précédé par une instruction de suppression (fonction unset) de la variable $var1. Exercice 2 Donner le type et la valeur de la variable $var suite à l’exécution de chacun des blocs suivants Exercice 4 Considérons trois variables : module, nom et commentaire. Initialiser : - La variable module à « PHP » - La variable nom à « Mohamed » ISET Kélibia: H.TOUKABRI 112
- La variable commentaire avec « Mon nom est : » Concaténer le commentaire au nom, le message « Je suis le module : » à la variable module. Créer la page PHP résultat. Exercice 4 A <meta http-equiv="Content-Type" content="text/html; charset=ISO "/> Exercice 4_TD1 <?php // initialisation des variables $module = "PHP" ; $nom = "Mohamed"; $commentaire ="Mon nom est echo $commentaire. $nom. # N " "; // opérateur de. i i y \ concaténation echo "Je suis le module : $module"; // variable dans la chaîne ?> 5>V5>V SS/ ISET Kélibia: H.TOUKABRI 113
û-i Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Développement côté serveur Enseignante : H. TOUKABRI Niveau : L2 Filières : DSI/MDW Correction TD N° 2 Exercice 1 <?php $var = 45; if (($var % 3 == 0) && ($var % 8 == 0)) echo "$var est multiple de 3 et 8"; else echo "$var ne divise pas 3 et ?> Exercice 2 echo 'la valeur de $age est O. $age; echo " "; switch ($age): /SV \ case $age < 10 : echo "enfant";break; V A v v — case $age >= 10&&$age<=19:echo"adolescent";break; I vv case $age >= 20&&$age<=39:echo"jeune";break;. S AV V case $age >= 40&&$age<=59:echo"adulte";break; case $age >= 60: echo "vieux";break; endswitch; ?> Exercice 3 <?php $var = 5; ISET Kélibia: H.TOUKABRI 114
echo "La table de multiplication de $var est donnée par "; for($i=0;$i "; } ?> Exercice 4 ISET Kélibia: H.TOUKABRI 115
û-i Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Développement côté serveur Enseignante : H. TOUKABRI Niveau : L2 Filières : DSI/MDW Correction TD N° 3 <?php $tab=array("PHP"=>" rg","SQLite"=>" $site=array rand($tab); \ echo "Site recommandé : ",$site," "; ?> Exercice 2 <?php $voy = array ('a', 'e', 'o', 'u', 'y') ; echo 'Affichage avant insertion V -\ '; echo ' '; print r($voy) ; echo ' '; l\\A $voy1= array slice ($voy, 0, 2); //Range dans $voy1 les 2 premiers éléments de $voy v\ I \V $voy2= array slice ($voy, 2); //stocke dans $voy2 les reste des éléments k. - de $voy à partir de la position 2 array push ($voy1, 'i'); //Ajout du caractère manquant "V “ $voy = array merge ($voy1, $voy2); //Fusionne les deux tableaux echo 'Affichage après insertion '; echo ' '; print r($voy); echo ' '; ?> ISET Kélibia: H.TOUKABRI 116
Exercice 3 <?php $tab = array ( array (, rouge,,, jaune,,, bleu'), array ('faible^'moyenne^'forte') ); echo " "; foreach ($tab as $vecteur){ echo, '; foreach ($vecteur as $element){ echo,,. $element. ' ' } echo, '; } echo " "; ?> Exercice 4 — <?php $mois = array(1=>,Janvier',,Février,,,Mars,,,Avril,, * VvW,Mai',,Juin', $couleurCellule =,Juillet',,Aout,,,Septembre,,,Octobre, r x,, Novembre,,, Décembre,); y v W V array(1=>, blue,,, white,,, red,,, yello w’,,grey,,,lime,,,lightblue,,,fuchsia,,,lightgrey,,,olive,,,pink,,,purple,); echo " "; for($i=1;$i<=12;$i++) echo " ". $mois[$i]. " " ; if ($i%3==0) echo " "; } ISET Kélibia: H.TOUKABRI 117
ISET Kélibia: H.TOUKABRI 118
echo ”39.4 est-il un entier ? ". verifierNb(39.4). " "; echo "-2 est-il un entier ? ". verifierNb(-2). " "; echo "-3.14 est-il un entier ? ". verifierNb(-3.14). " "; Exercice 2 <?php function txtToHTML($balise,$texte){ $tab = array( "p" => ' '.$texte.' ', "h1" => ' '.$texte.' ', "h2" => ' '.$texte.' ', "b" => ' '.$texte.' ' ); if (array key exists($balise,$tab)) return "$tab[$balise]"; return "$balise n'est pas reconnue"; } echo txtToHTML ('l','test') ie"; * OvX v _V (> x# echo txtToHTML ('h1','test " "; y " " "; echo txtToHTML ('p','test') yv \ ' " "; echo txtToHTML ('b','test') ■v ■* " "; echo txtToHTML ('i' V ' test') L" "; Exercice 3 1. La fonction ligne est donnée par : <?php ’V function ligne ($c,$n){ $l = ''; for($cpt=0;$cpt<$n;$cpt++ ) $l = $c; return $l; }?> ISET Kélibia: H.TOUKABRI 119
2. La fonction pyramide est donnée par : $Etudiant1 = array ( "cin" =>' ', "nom" =>'Menjli', "prénom"=> 'Mohamed', "naissance" => '21/06/95', "notePHP"=> 12 ISET Kélibia: H.TOUKABRI 120
2. Procédure d’affichage de la structure Etudiant ISET Kélibia: H.TOUKABRI 121
ISET Kélibia: H.TOUKABRI 122
ea* Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Développement côté serveur Enseignante : H. TOUKABRI Niveau : L2 Filières : DSI/MDW Correction TD N° 5 <?php class ville public $nom; public $position; public function getinfo() { $texte="La ville de $this->nom est au $this->position de la Tunisie "; return $texte; } } //Création d'objets $ville1 = new ville() vV. $ville1->nom="Tunis"; & $ville1->position="nord"; V ' $ville2 = new ville(); V \ ’ $ville2->nom="Médenine"; $ville2->position="sud"; \\ echo $ville1->getinfo(); echo V A ' echo $ville2->getinfo(); ?> Exercice 2 <?php /** * Classe Employe ISET Kélibia: H.TOUKABRI 123
*/ class Employe { private $nom; private $matricule; private $indiceSalarial; private static $valeur = 120; function construct($nom,$matricule,$indiceSalarial) { $this->nom = $nom; $this->matricule = $matricule; $this- >indiceSalarial = $indiceSalarial; } public function getNom() { return $this->nom; } public function setNom($nom) { $this->nom = $nom; } public function getMatricule() { } tricu r<<V return $this->matricule; public function setMatricule($matricule) { rvV* $this->matricule = $matricule; } public function getIndiceSalarial() X,' return $this->indiceSalarial; ' > } public function setIndiceSalarial($indiceSalarial) { } $this->indiceSalarial = $indiceSalarial; public function getValeur() { } return SELF::valeur; public static function setValeur($valeur) # ISET Kélibia: H.TOUKABRI 124
Exercice 3 abstract protected function construct($a,$b); //Le constructeur doit 'V 'V — être rédéfini dans les classes filles } p //Classe client 4. ' l X V class client extends personne S? private $adresse; ■'T' //Redéfinition du constructeur par défaut public function construct($nom,$prenom) { $this->nom=$nom; $this->prenom=$prenom; } public function getCoord() { ISET Kélibia: H.TOUKABRI 125
ISET Kélibia: H.TOUKABRI 126
Bibliographie [1] B. Bogaert, A. Goguey, H. Rateau, et L. Weinberg, « Cours PDO ». Université Lille 1, [2] J. Engels, PHP 5 Cours et exercices, 2 e éd [3] P. Rigaux, Pratique de MySQL et PHP: Conception et realisation de sites web dynamiques, 4 e éd. [4] D. Seguy et P. Gamache, Sécurité PHP 5 et MySQL, 3 e éd # ISET Kélibia: H.TOUKABRI 127
Développement côté serveur Annexe A : Les variables d'environnement Annexe A. Les variables d’environnement A.1. Variables dépendant du serveur $_SERVER['DATE_GMT'] : Date actuelle au format GMT $_SERVER['DATE_LOCAL'] : Date actuelle au format local $_SERVER['DOCUMENT_ROOT'] : Racine des documents Web sur le serveur $_SERVER['GATEWAY_INTERFACE'] : Version des spécifications CGI utilisées par le serveur W X * $_SERVER['$HTTP_HOST'] : Nom de domaine du serveur ;ur $_SERVER['SERVER_ADDR'] : Adresse IP du serveur $_SERVER['SERVER_ADMIN'] : Adresse de l’administrateur du serveur $_SERVER['SERVER_NAME'] : Nom donné au serveur en local $_SERVER['SERVER_PORT'] : N nméro de port associé au protocole HTTP sur le serveur $_SERVER['SERVER_PROTOCOL'] : Nom et version du protocole utilisé pour envoyer la requête au script PHP $_SERVER['SERVER_SOFTWARE'] : Type (logiciel) du serveur web : Pour un serveur Apache sous Unix : Apache/1.3.2 (Unix) PHP/3.0.5 Pour un serveur Apache sous Windows : Apache/1.3.2 (Win32) PHP/3.0.5 A.2. Variables dépendant du client $_SERVER['AUTH_TYPE'] : Il s’agit de la méthode d’authentification qui a été utilisée par le client pour accéder au script PHP ISET Kélibia: H.TOUKABRI
Développement côté serveur Annexe A : Les variables d'environnement $_SERVER['COMSPEC'] : Location de l’interpréteur de commandes sur la machine (Sous Windows) $_SERVER['CONTENT_TYPE'] : Type de données présent dans le corps de la requête. Il s’agit du type MIME des données $_SERVER['DOCUMENT_ROOT'] : Racine des documents sur le serveur $_SERVER['DOCUMENT_URI'] : Adresse du script PHP en relatif (à partir de la racine du serveur) $_SERVER['HTTP_ACCEPT'] : Types MIME reconnus par le serveur ( 'és par des virgules) $_SERVER['HTTP_ACCEPT_ENCODING'] : Types d’encodage que le serveur peut réaliser (gzip,deflate) $_SERVER['HTTP_ACCEPT_LANGUAGE'] : Langu e utilisée par le serveur (par défaut en-us) $_SERVER['HTTP_CONNECTION'] : Type de connexion ouverte entre le client et le serveur (par exemple Keep-Alive) $_SERVER['HTTP_HOST'] : Nom d’hôte de la machine du client (associée à l’adresse IP) >ST'] : î $_SERVER['HTTP_REFERER'] : URL de la page qui a appelé le script PHP $_SERVER['HTTP_USER_AGENT'] : Cette variable permet d’avoir des informations sur le type de navigateur utilisé par le client, ainsi que son système d’exploitation. e type < S $_SERVER['LAST_MODIFIED'] : Date et heure de la dernière modification du fichier $_SERVER['PATH'] : Il s’ agit du chemin d’accès aux différents répertoires sur le serveur $_SERVER['PATH_INFO'] : Il s’agit du chemin d’accès au script PHP en relatif (de la racine du serveur jusqu’au script PHP) $_SERVER['PHP_SELF'] : Nom du script PHP ISET Kélibia: H.TOUKABRI
Développement côté serveur Annexe A : Les variables d'environnement $_SERVER['REDIRECT_STATUS'] : Il s’agit de l’état de la redirection (échec ou succès) $_SERVER['REDIRECT_URL'] : Il s’agit de l’URL vers laquelle le navigateur du client a été redirigé $_SERVER['QUERY_STRING'] : Il s’agit de la partie de l’URL (ayant servi à accéder au script PHP) située après le point d’interrogation. C’est de cette manière que sont transmises les données d’un formulaire dans le cas de la méthode GET $_SERVER['REMOTE_ADDR'] : Cette variable contient l’adresse IP du client appelant le script CGI « du client $_SERVER['REMOTE_PORT'] : Cette variable permet de savoir le port sur lequel la requête HTTP a été envoyée au serveur $_SERVER['SCRIPT_FILENAME'] : Chemin d’accès complet au script PHP. Sous windows, il sera de la forme : c:/php/php.exe $_SERVER['SCRIPT_NAME'] : Ch la racine web ($DOCUMENT_ROOT)) au script PHP ’’accès relatif (par rapport au chemin d’accès à - ïg s # ISET Kélibia: H.TOUKABRI iii
Développement côté serveur Annexe B : Les constantes prédéfinies Annexe B. Les constantes prédéfinies 5 PHP_VERSION (chaîne de caractères) : La version courante de PHP sous la forme d’une chaîne de caractères dans la notation "major.minor.release[extra]". PHP_MAJOR_VERSION (entier) : La version majeure courante de PHP sous la forme d’une chaîne de caractères (i.e., int(5) depuis la version "5.2.7-extra"). Disponible depuis ❖ PHP PHP_MINOR_VERSION (entier) : La version mineure courante de PHP sous la forme d’une chaîne de caractères (i.e., int(5) depuis la version "5.2.7-extra"). Disponible depuis sous \ PHP % PHP_RELEASE_VERSION (entier) : La version stable courante de PHP sous la forme d’une chaîne de caractères (i.e., int(5) depuis la version "5.2.7-extra"). Disponible depuis So PHP PHP_VERSION_ID (entier) : La version courante de PHP sous la forme d’un entier, utile pour la comparaison de versions (i.e., int(50207) depuis la version "5.2.7-extra"). Disponible „. L, ^ depuis PHP PHP_EXTRA_VERSION (chaîne de caractères) : La version "extra" courante de PHP sous la forme d’une chaîne de caractères (i.e., '-extra' depuis la version "5.2.7-extra"). Habituellement utilisée par les packagers des distributions pour indiquer une version de paquet. Disponible depuis PHP PHP_ZTS (entier) : Disponible depuis PHP cette constante vaut 1 si le Zend Thread Safety est activé et 0 sinon. PHP_DEBUG (entier) : Disponible depuis PHP Elle indique si PHP est paramétré de façon à utiliser l’outil PHP_DEBUG ou non. 5 ISET Kélibia: H.TOUKABRI iv
Développement côté serveur Annexe B : Les constantes prédéfinies PHP_MAXPATHLEN (entier) : La longueur maximale des noms de fichiers (y compris le chemin) supportée par ce binaire PHP. Disponible depuis PHP PHP_OS (chaîne de caractères) : Elle renvoie le nom du système d’exploitation sur lequel l’exécutable PHP a été compilé. On a donc généralement WINNT sur une plateforme Windows, Linux ou FreeBSD sur des systèmes Unix. PHP_SAPI (chaîne de caractères) : L’API du serveur pour ce binaire PHP. forme. PHP_EOL (chaîne de caractères) : Le bon symbole de fin de ligne pour cette plateforme. D is p on ib le d e pui s PHP 502 -L pe "- de m e, tre,e c° d e de f a ç on c**, à l PHP_INT_MAX (entier) : Le plus grand entier supporté par ce binaire de PHP. Habituellement, int( ). Disponible depuis PHP PHP_INT_MIN (entier) : Le plus petit entier supporté dans cette version de PHP. Habituellement, int( ) sur les systèmes 32 bit et int( ) sur les systèmes 64 bit. Disponible depuis PHP :<b- PHP_INT_SIZE (entier) : La taille d’un entier, en octets, dans cette version de PHP. Disponible depuis PHP E_ERROR (entier) : Elle a la valeur 1. Les erreurs sont affichées par défaut et l’exécution du script est interrompue. Elles indiquent des erreurs qui ne peuvent pas être ignorées, comme des problèmes d’allocation de mémoire, par exemple. vSST E_WARNING (entier) : Elle a la valeur 2. Les alertes sont affichées par défaut, mais n’interrompent pas l’exécution du script. Elles indiquent un problème qui doit être intercepté par le script durant son exécution. E_PARSE (entier) : Elle a la valeur 4. Les erreurs d’analyse ne doivent être générées que par l’analyseur. Elles ne sont citées ici que dans le but d’être exhaustif. E_NOTICE (entier) : Elle est égale à 8. Les remarques ne sont pas affichées par défaut, et indiquent que le script a rencontré quelque chose qui peut être une erreur, mais peut aussi être un événement normal dans la vie du script. Par exemple, essayer d’accéder à une valeur qui n’a pas été déclarée. ISET Kélibia: H.TOUKABRI
Développement côté serveur Annexe B : Les constantes prédéfinies E_CORE_ERROR (entier) : Elle est égale à 16. Elles sont similaires aux erreurs E_ERROR, mais elles sont générées par le code source de PHP. Les fonctions ne doivent pas générer ce genre d’erreur. E_CORE_WARNING (entier) : Elle est égale à 32. Elles sont similaires à E_WARNING, mais elles sont générées par le code source de PHP. Les fonctions ne doivent pas générer ce genre d’erreur. E_COMPILE_ERROR (entier) : Elle est égale à 64. Elles sont similaires à E_ERROR, mais elles sont générées par le moteur Zend. Les fonctions ne doivent pas générer ce genre d’erreur. E_COMPILE_WARNING (entier) : Sa valeur est 128. Elles sont similaires à E_WARNING, mais elles sont générées par le moteur Zend. Les fonctions ne doivent pas générer ce genre d’erreur. E_USER_ERROR (entier) : Sa valeur est 256. Il s’agit d’un message d’erreur généré par l’utilisateur. Comparable à E_ERROR. Elle est générée par le programmeur en PHP par l’utilisation de la fonction trigger_error(). Les fonctions de PHP ne doivent pas générer ce leur est 512. C’est un message d’erreur généré par ING. Elle est générée par le programmeur en PHP par r_error(). Les fonctions de PHP ne doivent pas générer ce genre d’erreur. E_USER_WARNING (entier) l’utilisateur. Comparable à E_ l’utilisation de la fonction trig genre d’erreur. E_USER_NOTICE (entier) : Sa valeur est C’est un message d’erreur généré par l’utilisateur. Comparable à E_NOTICE. Elle est générée par le programmeur en PHP par l’utilisation de la fonction trigger_error(). Les fonctions de PHP ne doivent pas générer ce :nre d genr erreur. E_DEPRECATED (entier) : Elle est égale à Il s’agit d’alertes d’exécution. Activer cette option permet de recevoir des alertes sur les portions de code qui pourraient ne pas fonctionner avec les futures versions. Disponible depuis PHP E_USER_DEPRECATED (entier) : Elle est égale à C’est un message d’alerte généré par l’utilisateur. Fonctionne de la même façon que E_DEPRECATED, mise à part ISET Kélibia: H.TOUKABRI vi
Développement côté serveur Annexe B : Les constantes prédéfinies que le message est généré par le code PHP en utilisant la fonction trigger_error(). Disponible depuis PHP E_ALL (entier) : De valeur 32767, elle représente toutes les erreurs et alertes supportées sauf le niveau E_STRICT avant la version de PHP. E_STRICT (entier) : Elle est égale à Elle permet d’obtenir des suggestions de PHP pour modifier le code, assurant ainsi une meilleure interopérabilité et compatibilité de celui- ci. ition du début des données qui n’est définie que s’il y a une fonction_halt_compiler() présente dans _COMPILER_HALT_OFFSET_ (entier) : Elle détermine l’octet de l :_co 1 le fichier. Disponible depuis PHP TRUE (booléen) : FALSE (booléen) NULL (null) (null) « & DEFAULT_INCLUDE_PATH (chaîne de caractères) : Chemin par défaut d’accès aux fichiers. PEAR_INSTALL_DIR (chaîne de caractères) : Dossier d’installation de la bibliothèque de scripts PEAR (PHP Extension and Application Repository) PEAR_EXTENSION_DIR (chaîne de caractères) : Dossier des extensions relatives à la ts PE bibliothèque de scripts PEAR. PHP_EXTENSION_DIR (chaîne de caractères) : Désigne le chemin du dossier contenant les PHP_P REFIX (chaîne de caractères) : La valeur du "--prefix" qui a été définie au moment de la configuration. PHP_BINDIR (chaîne de caractères) : Spécifie l’endroit où ont été installé les binaires. PHP_BINARY (chaîne de caractères) : Spécifie le chemin vers le binaire PHP lors de l’exécution du script. Disponible depuis PHP 5.4. ISET Kélibia: H.TOUKABRI vii
Développement côté serveur Annexe B : Les constantes prédéfinies PHP_MANDIR (chaîne de caractères) : Spécifie le chemin d’installation des pages man. Disponible depuis PHP PHP_LIBDIR (chaîne de caractères) : Spécifie le chemin du dossier contenant les bibliothèques de code PHP. PHP_DATADIR (chaîne de caractères) : Spécifie le chemin du répertoire contenant les bibliothèques partagées en lecture seule. Généralement cette constante est égale à « /usr/local/share ». PHP_SYSCONFDIR (chaîne de caractères) : Contient le chemin des fichiers de. configuration du serveur. PHP_LOCALSTATEDIR (chaîne de caractères) : Contient le chemin des fichiers de données que PHP pourrait modifier en exécution. Sa valeur est généralement égale à « /usr/local/var ». N. :\ PHP_CONFIG_FILE_PATH (chaîne de caractères) : Cette constante indique le chemin du fichier de configuration php.ini. PHP_CONFIG_FILE_SCAN_DIR (chaîne de caractères) : Contient le chemin vers les fichiers de maintenance et de mise à jour. PHP_SHLIB_SUFFIX (chaîne de caractères) : Le suffixe de la plate-forme de compilation pour les bibliothèques partagées, comme "so" (sous la plupart des Unix) ou "dll" (Windows). # ISET Kélibia: H.TOUKABRI viii
Développement côté serveur Annexe C : Les constantes magiques Annexe C. Les constantes magiques LINE_: La ligne courante dans le fichier. _FILE_ : Le chemin complet et le nom du fichier courant avec les liens symboliques résolus. Si utilisé pour une inclusion, le nom du fichier inclus est retourné. _DIR_: Le dossier du fichier. Si utilisé dans une inclusion, le dossier du fichier inclus sera retourné. C'est l’équivalent de dirname(_FILE_). Ce nom de dossier ne contiendra pas de slash final, sauf si c’est le dossier racine. FUNCTION : Le nom de la fonction. N & asse co _CLASS_: Le nom de la classe courante. Le nom de la classe contient l’espace de nom N % dans lequel cette classe a été déclarée (i.e. Foo\Bar). _TRAIT_: Le nom du trait. Le nom du trait inclut l’espace de nom dans lequel il a été O i t incl déclaré (e.g. Foo\Bar). METHOD : Le nom de la méthode courante. _NAMESPACE_: Le nom de l’espace de noms courant. ______de l’espace # ISET Kélibia: H.TOUKABRI ix
Développement côté serveur Annexe D : Les fonctions de manipulation de fichiers Annexe D. Les fonctions de manipulation de fichiers D.1. Ouverture de fichiers : fonction fopen() Syntaxe resource fopen (string $nomfichier, string $mode [, bool $use include path = false [, resource $contexte]]) Avec : Snomfichier : Il désigne le nom du fichier à ouvrir. Il peut être un fichier stocké en local ou distant. Si le fichier est distant, on utilise l’URL d’accès. $mode : il s’agit du mode d’ouverture du fichier. On distingue les modes suivants : £ r : lecture seule, en début de fichier r+: lecture/écriture, en début de fichier w : écriture seule. Le contenu du fichier est écrasé s’il existe. Le fichier sera crée s’il n’existe pas. iture. Si le fichiei contenu sera écrasé. w+ : lecture/écriture. Si le fichier n’existe par, il sera crée. Sinon, son - a : écriture seule, en fin de fichier, créé s’il n’existe pas. - a+ : lecture/écriture, en fin de fichier, créé s’il n’existe pas. $use_include_patC’est un paramètre optionnel. Il peut être défini à 1 ou à TRUE pour chercher le fichier dans l’include_path. $contexte : Le support de contexte a été ajouté en PHP La fonction retourne une ressource représentant le pointeur de fichier, ou FALSE si une erreur survient. Remarque Le nom du fichier peut être une URL. Pour ceci, il faut que la directive allow_urlfopen soit activée dans le php.ini. Pour les modes d’ouverture, on distingue le mode « b » permettant l’ouverture de fichier binaire sous Windows. ISET Kélibia: H.TOUKABRI x
Développement côté serveur Annexe D : Les fonctions de manipulation de fichiers Exemple $file=fopen('server.log','a+',1); D.2. Fermeture de fichiers : fonction fclose() Syntaxe bool fclose (resource $fichier) oX La fonction permet de fermer $fichier. Elle retourne TRUE en cas de réussite et FALSE sinon. D.3. Lecture de données à partir d’un fichier D.3.1. La fonction fgets() Syntaxe string fgets (resource $fichier [, int $taille]) Avec: chier doit $fichier : Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec succès par fopen(). $taille : Lit jusqu’à la taille $taille - 1 octet (ou la fin du fichier) depuis le pointeur de fichier $fichier. Si aucune taille n’est spécifiée, la fonction lit le flux jusqu’à la fin du fichier. du fichier. La fonction retourne une chaîne de caractères contenant les $taille - 1 premiers caractères v p depuis le pointeur de fichier $fichier. La fonction retourne FALSE s’il n’y a plus de données à lire ou s’il y a une erreur. D.3.2. La fonction fread() Syntaxe string fread (resource $fichier, int $taille) ISET Kélibia: H.TOUKABRI xi
Développement côté serveur Annexe D : Les fonctions de manipulation de fichiers Avec: $fichier : Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec succès par fopen(). $taille : nombre d’octets à lire. La fonction fread() permet de lire un fichier en mode binaire. Elle retourne la chaîne lue ou FALSE si une erreur survient. Remarque ShSh La fonction fread() est utilisé avec le mode d’ouverture binaire pour fopen() (noté par b). Exemple fopen() $fichier=fopen(, monimage.gif,,, rb'); A $img=fread($fichier, $filesize('nomimage.gif')); fclose($fichier); D.3.3. La fonction fscanf() Syntaxe x# mixed fscanf (resource $fichier, string $format [, mixed &$... ]) Avec: $fichier : Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec succès par fopen(). vo jès r p () $format : le format spécifié. es valeurs optionnelles à assigner. La fonction fscanf() lit des lignes d’un fichier en fonction d’un formatage particulier. Exemple $fichier=fopen(,exemple.txt,,,r,); while($ligne=fscanf($fichier,"%s\t%s\t%s\n")) { echo $ligne; ISET Kélibia: H.TOUKABRI xii
Développement côté serveur Annexe D : Les fonctions de manipulation de fichiers } D.3.4. La fonction fgetc() Syntaxe string fgetc (resource $fichier) Avec: Sfichier : Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec La fonction retourne une chaîne contenant un seul caractère, lu depuis le fichier pointé par Sfichier. Elle retourne FALSE à la fin du fichier. D.3.5. La fonction fgetss() Syntaxe string fgetss (resource $fichier [, int $taille [, string $balises perm ises]]) Avec : ST « Sfichier : Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec succès par fopen(). Staille : Taille des données à récupérer. Sbalises_permises : C’est un paramètre optionnel. Il désigne la liste des balises qui doivent être retenues. La fonction fgetss() est identique à fgets().Sauf que la fonction fgetss() supprime tous les octets nuls, toutes les balises HTML et PHP qu’il trouve dans le texte lu. ISET Kélibia: H.TOUKABRI xiii
Développement côté serveur Annexe D : Les fonctions de manipulation de fichiers D.3.6. La fonction fgetcsv() Syntaxe array fgetcsv (resource $fichier [, int $taille = 0 [, string $délimiteur = ',' [, string $caracEnc = [,string $caracEchap = '\\' ]]]]) Avec: & $fichier : Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec succès par fopen(). $taille : Elle doit être plus grande que la plus longue ligne. Ce paramètre est optionnel depuis PHP5. $délimiteur : C’est le caractère séparateur (un seul caractère). $caracEnc : C’est le caractère d’encadrement du texte (un seul caractère). $caracEchap : C’est le caractère d’échappement (un seul caractère). Par défaut, c’est l’antislash. v>-' La fonction fgetcsv() est similaire à fgets(). Cependant, la fonction fgetcsv() analyse la ligne ISET Kélibia: H.TOUKABRI xiv
Développement côté serveur Annexe D : Les fonctions de manipulation de fichiers } echo " \n"; D.4. Écriture de données dans un fichier Syntaxe int fwrite (resource $fichier, string $chaine [, int $taille]) Avec: # \ f Y^ ier ouvert avec Sfichier : Le pointeur de fichier doit être valide et pointer sur un fichl succès par fopen(). $chaine : La chaîne à écrire. $taille : Le nombre d’octets à écrire. L’écriture s’arrête si la totalité de la chaîne est écrite ou si $taille est épuisée. ;\y La fonction fwrite() retourne le nombre d’octets écrits, ou FALSE si une erreur survient. Remarque Si le paramètre $taille est fourni, l’option de configuration magic_quotes_runtime est ignoré et les slashs seront conservés. La fonction fputs() est un alias de la fonction fwrite(). Exemple ê $fichier=fopen('monfichier.txt','a'); rvs* $retour=fwrite($fichier, 'Une ligne dans mon fichier'); \#k.W fclose($fichier); D.5. Déplacement dans un fichier D.5.1. La fonction fseek() Syntaxe int fseek (resource $fichier, int $offset [, int $whence = SEEK SET ]) ISET Kélibia: H.TOUKABRI xv
Développement côté serveur Annexe D : Les fonctions de manipulation de fichiers Avec: $fichier : Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec succès par fopen(). $offset : Ce paramètre détermine la position de déplacement dans le fichier. $whence : Les valeurs possibles de ce paramètre sont : - SEEK_SET : Calcul à partir du début du fichier. Position finale : Début+offset » SEEK_CUR : Calcul à partir de l’emplacement actuel. Position finale Actuelle+offset Position : A ? irmlp FirH - SEEK_END : Calcul à partir de la fin du fichier. Position finale : Fin+Offset. La fonction fseekQ permet de modifier la position du pointeur de fichier. Elle retourne 0 en D.5.2. La fonction ftell() Synta La ionct e# int ftell (resource $fichier) Avec : $fichier : Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec succès par fopen(). La fonction ftell() renvoie la position courante du pointeur de fichier. ISET Kélibia: H.TOUKABRI xvi
Développement côté serveur Annexe D : Les fonctions de manipulation de fichiers Exemple //Ouvre un fichier et y lit quelques données $fp = fopen('fichier.txt', 'r'); $donnees = fgets($fp, 12); //Position actuelle du pointeur du fichier echo ftell($fp); // Affichage de la valeur 11 fclose($fp); D.5.3. La fonction rewind() Syntaxe bool rewind (resource $fichier) Avec : et poini $fichier : Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec succès par fopen(). La fonction rewind() replace le pointeur de fichier (ici $fichier) au début. Elle retourne TRUE en cas de succès ou FALSE si une erreur survient. Exemple £ //Ouvertue du fichier. \\ J $fp = fopen('output.txt', 'r+'); x % //Écriture de données dans le fichier > fwrite ($fp, 'Une très longue phrase'); //Replacer le pointeur du fichier au. x début rewind ($fp); Avvi //Écriture de données au début du \ ■ fichier fwrite ($fp, 'Ceci est'); //Replace le pointeur du fichier au début rewind ($fp); //Affichage du contenu du fichier echo fread($fp, filesize('output.txt')); //Fermeture du fichier fclose ($fp); ISET Kélibia: H.TOUKABRI xvii
Développement côté serveur Annexe D : Les fonctions de manipulation de fichiers Le code précédent permet de modifier la phrase « Une très longue phrase » en « Ceci est longue phrase ». Le résultat est sauvegardé dans le fichier et il est affiché à l’écran. D.6. Fin du fichier : fonction feof() Syntaxe bool feof (resource $fichier) Avec : lier ouvert Sfichier : Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec succès par fopen(). La fonction feof() teste si la fin du fichier est atteinte. Elle retourne TRUE si le pointeur Sfichier est en fin du fichier et FALSE sinon. 'V D.7. Suppression d’un fichier : fonction unlink() Syntaxe bool unlink (string $fichier) Avec : é> Sfichier : Le pointeur de fichier doit être valide et pointer sur un fichier ouvert avec succès par " La fonction unlink() supprime un fichier existant. Elle retourne true en cas de succès et false Il faut teste l’existence du fichier avant sa suppression sinon une erreur sera générée. Pour éviter la génération d’une erreur sur un fichier inexistant, on peut précéder l’appel de la fonction ISET Kélibia: H.TOUKABRI xviii
Développement côté serveur Annexe D : Les fonctions de manipulation de fichiers D.8. Copie déplacement et renommage de fichier D.8.1. La fonction copy() Syntaxe bool copy(string $fichier depart,string $fichier destination) Avec : $fichier_depart : chemin vers le fichier source. $fichier_destination : chemin vers le fichier destination La fonction copy() permet de copier un fichier. Elle retourne true en cas de copie réussie et false sinon. D.8.2. La fonction rename() Syntaxe V bool rename(string $ancien nom,string $nouv nom) "-£*= -— Avec : $ancien_nom : chemin vers l’ancien fichier. $nouv_nom : chemin vers le nouveau fichier. La fonction rename() tente de renommer le fichier de départ en le déplaçant si cela est nécessaire. La fonction retourne true en cas de succès et false sinon. ISET Kélibia: H.TOUKABRI xix