PHP ou le web dynamique
généralités écrit par Ramsus Lerdorf en 1994 pour gérer sa page perso actuellement stable en version 5 (5.3) et la version 6 est imminente le P de LAMP (Linux Apache MySQL PHP) Damien Seguy pionnier français dans la promotion du langage PHP (nexen.net)nexen.net écrit en de C et historiquement basé sur des bibliothèques Perl Le langage proprement dit est Zend Engine, PHP (Hypertext Preprocessor) est la version embedded de Zend Engine par convention l'extension est.php (éventuellement.php4,.php5 si plusieurs version cohabitent) PHP 4 n'est plus maintenu depuis fin 2007 la doc officielle en français
php cli VS mod_php 2 versions php – php cli en ligne de commandes Chemin à mettre dans la variable denvironnement $PATH – mod_php Permet dembarquer un interpréteur php dans les process fils du démon httpd 2 fichiers de configuration de php.ini N.B certains projets utilisent maintenant le même interpréteur (UwAmp)
php.ini Quelques directives – register_globals: rend les variables GET, POST, de COOKIE et de SESSION directement accessibles (déconseillé!) – post_max_size: taille maximale dune requête en méthode post – upload_max_fliesize: taille maximale des fichiers ulpoadés – memory limit: taille de mémoire maximale allouée à PHP – extension_dir: spécifie le répertoire dans lequel PHP doit chercher des extensions externes à charger – extension: quelles extensions doivent être chargées
Les extensions php Quelques extensions simpleXML (inclus en PHP5): fournit des outils très simples et faciles à utiliser pour convertir du XML en un objet qui peut être manipulé avec ses propriétés et les itérateurs de tableaux. SQLite (inclus en PHP5): fait l'interface avec le moteur de base SQLite Embeddable SQL Database Engine (ne nécessite pas l'installation d'un serveur de BDD) MySQL: permet d'accéder aux bases de données MySQL Pcre: permet la compatibilité avec les expressions régulières Perl
Un standard supporté par de nombreux serveurs http IIS, Netscape, Roxen, IPlanet multiplateforme : *nix et windows (wamp, EasyPHP, xampp)wampEasyPHPxampp proposé massivement par les hébergeurs
Le web statique
Le web dynamique typique
Le langage Dit de type embedded : le code PHP s'insère au milieu du code HTML <?php = début de portion de code PHP ?> = fin de portion de code PHP Chaque instructions se termine par le caractère ; commentaire –// commente une ligne entière –/* … */ commente une portion de code PHP PHP est sensible à la casse (il y a un distinction entre les minuscules et les majuscules) TRUE (1) et FALSE(0) sont deux contantes prédéfinies
Hello world!! Côté serveur My First PHP Script
Version cgi (non embedded) "; echo " "; echo " My First PHP Script "; echo " "; echo " "; echo " Hello World "; echo " "; echo " "; ?>
Côté client My First PHP Script Hello World
Les constantes créer une constante –define("MaConstante", 5); Tester si une constante existe –defined("MaConstante"); Appeler une constante – echo MaConstante; //affiche 5
Les variables Toutes les variables commence par le caractère $ suivi d'une lettre ou d'un _ Le typage est implicite, il dépend de la valeur affectée <? $MonEntier=3;//est un entier $MonReel=1.23e-12;//est un float $MaChaine="Hello world!";// est un string $MonEntier="3"; // est un string ?>
Les types Boolean : Booléen Integer : Entier Réel : Double String : Chaîne de caractères Array : Tableau Object : Objet Tester le type dune variable –gettype($var); Typer explicitement –settype($var, "type");
Opérations sur les variables Tester le type dune variable –gettype($var); Typer explicitement – settype($var, "type"); Tester si une variable existe – isset($var); Détruire une variable et libérer la mémoire qui lui était allouée – unset($var); Tester si une variable est non affectée (i.e. =0 ou ="") – empty($var);
transtypage <?php $foo = 10; // $foo est un entier $bar = (double) $foo; // $bar est un double ?> (int), (integer) - type entier (bool), (boolean) - booléenbooléen (double), (float), (real) - type double (string) - type chaîne de caractère (array) - type tableau (object) - type objet
Les strings les délimiteurs "..." toutes les variables contenues entre ces délimiteurs seront évaluées –$MyColor="rouges"; echo "Mes souliers sont $MyColor"; –affiche Mes souliers sont rouges caractères échappés –\\ pour afficher le caractère \ –\$ pour afficher le caractère $ –\" pour afficher le caractère "
Les strings les délimiteurs... aucune des variables contenues entre ces délimiteurs ne sera évaluée –$MyColor="rouges"; echo 'Mes souliers sont $MyColor'; –affiche Mes souliers sont $MyColor caractères échappés –\\ pour afficher le caractère \ –\' pour afficher le caractère '
Les strings caractères non imprimables \n nouvelle ligne \r retour à la ligne \t tabulation spécificité –"\r\n" sous windows –"\n" sous *nix –"\r " sous mac
Fonctions daffichage écrit sur la sortie standard print('hello '.$nom); –echo("hello $nom"); –print('hello '.$nom); écrit de manière formatée comme en C sur la sortie standard –printf("hello %s", $nom); écrit de manière lisible les variables complexes, notamment les tableaux et les objets –print_r($tableau);
Opérateurs arithmétiques + pour l'addition - pour la soustraction * pour la multiplication / pour la division % pour la division entière
Opérateurs daffectation $y est affecté à $x –$x = $y $y est additionné à $x –$x += $y $x = $x + $y $y est soustrait de $x –$x -= $y $x = $x - $y $x est multiplié par $y –$x *= $y $x = $x * $y $x est divisé par $y –$x /= $y $x = $x / $y $y le reste de $x/$y est affecté à $x –$x %= $y $x = $x % $y
Opérateurs de comparaisons égalité de $x et $y –$x == $y égalités des valeurs et des types de $x et $y –$x === $y $x est strictement inférieur à $y –$x < $y $x est strictement supérieur à $y –$x > $y $x est inférieur ou égal à $y –$x =< $y $x est supérieur ou égal à $y –$x => $y
Opérateurs logique & concaténation logique –&& et logique –|| ou logique –! négation concaténation : –. concatène deux chaines de caractères
Les tableaux le constructeur permettant de créer un tableau est array() par défaut l'indexation d'un tableau commence à 0 –$langages = array('français','english','deutsch'); il est possible de créer un tableau en lui affectant des valeurs –$langages[] = 'français'; –$langages[] = 'english'; –$langages[] = 'deutsch';
Les tableaux spécifier explicitement les indices –$langages[0] = 'français'; –$langages[1] = 'english'; –$langages[2] = 'deutsch'; indexer des tableaux avec des chaînes de caractères (tableaux associatifs) $langages = array( 'fr' => 'français', 'en' => 'english', 'de' => 'deutsch ); sans le constructeur –$langages['fr'] = 'français'; –$langages['en'] = 'english'; –$langages['de'] = 'deutsch';
Fonctions sur les tableaux compte les éléments du tableau $langages –count($langages); renvoit TRUE si la chaîne caractère 'deutsch' est un élément du tableau –in_array('deutsch', $langages); ajoute l'élémént 'chinese' à la fin du tableau (empile) –array_push($langages, 'chinese'); renvoit le dernier élément du tableau (dépile) –array_pop($langages); il existe de nombreuses fonctions sur les tableaux
Structure conditionnelle if( $cpt > 0 && $cpt < 4 ) { echo $cpt. est dans lintervalle ]0;4[; } elseif( $cpt >= 4 && $cpt < 10) { echo $cpt. est dans lintervalle [4;10[; } else { echo $cpt. est dans lintervalle ]10;+); }
structure de choix swicth($animal) { case 'chien' : echo " ouaf ouaf "; break; case 'chat' : echo " miaou miaou "; break; default : echo $Animal." nest pas un animal domestique "; } instruction break est nécessaire si les actions qui le suivent n'ont pas être exécutéesbreak
structure de boucle $NbDeCoup=6; $i=0; While($i != $NbDeCoup) { $CoupAJouer = $NbDeCoup - $i; echo "il vous reste ". $CoupAJouer. " à jouer"; $i++; }
structure de boucle inversée $NbDeCoup=6; $i=0; do { $CoupAJouer = $NbDeCoup - $i; echo "il vous reste ". $CoupAJouer. " à jouer"; $i++; } While($i != $NbDeCoup); echo la partie est finie;
structure de boucle itérative $tab=Array(2,4,8,9,0); for ( $i = 1 ; $i <= 4 ; $i++ ) { echo " élément numéro ".$i; echo contient la valeur".$tab[i]; }
structure de parcours de tableau $langages = array('fr' => ' français', 'en' => 'english', 'de' => 'deutsch'); foreach ( $langages as $libelle) { echo " ".$libelle." "; } affichera français english deutsch foreach ( $langages as $key => $libelle){ echo " ".$key." : ".$libelle." "; } affichera fr : français en : english de : deutsch
sortie forcée de boucle l'instruction break pemet de quitter prématurément une boucle foreach($langages as $libelle) { if($libelle == "english") { break; } stoppera le parcours du tableau dés que la valeur "english" est rencontrée
passage forcé à l'itération suivante Continue permet de passer à litération suivante dune boucle sans exécuter le code qui suit cette instruction dans le bloc de la boucle foreach($langages as $libelle) { if($libelle == "english") { continue; } echo " ".$libelle." "; } affichera tous les éléments du tableau langages sauf la valeur english
Inclusion / factorisation inclure et exécuter le code de file.php si le fichier existe – include(file.php); inclure et exécuter le code de file.php si le fichier existe et sil na pas déjà été inclus par le script courant – include_once(file.php); inclure et exécuter le code de file.php (ce fichier doit exister sinon require renverra un message derreur) – require(file.php); inclure et exécuter le code de file.php (ce fichier doit exister sinon require renverra un message derreur) si le fichier na pas déjà été inclus par le script courant – require_once(file.php);
Ouvrir / écrire un fichier Ouvrir un fichier fopen ( string $filename, string $mode) – Renvoie un identifiant de ressource. $mode peut être r, w, r+ … Écrire dans un fichier fwrite ( resource $handle, string $string) Lire length octe dun fichier fread ( resource $handle, int $length ) Lire un fichier en entier fread ($handle, filesize ($filename)) Fermer un fichier fclose ($handle)
fonctions Les fonctions sont des portions de code (entre { … })associés à un nom Les fonctions peuvent prendre des arguments dont il nest pas nécessaire de spécifier le type La liste des arguments est entre (…), séparés par des virgules le mot clé function : indique le début dune déclaration de fonction le mot clé return : spécifie le résultat à renvoyer
Fonction typique <? function somme ($a,$b) { return $a + $b; } ?>
Appel dune fonction <? $Total=234; $SousTotal=123; $Total=somme ($Total,$SousTotal); echo $Total;// affiche 357 ?>
Paramètres par défaut Il est possible dattribuer des valeurs par défaut aux arguments dune fonction Une valeur par défaut ne peut être quune constante Les arguments ayant une valeur par défaut doivent être placés après les arguments qui nen ont pas
Exemple dutilisation de paramètres par défaut <? function ServirApero($Contenant, $Boisson = "ricard") { return " Servir un ".$Contenant. " de ".$Boisson; } echo ServirApero("verre"); //Affiche Servir un verre de ricard echo ServirApero("chaudron", "bourbon"); //Affiche Servir un chaudron de bourbon ?>
Portée des variables Une variable définie dans une fonction a une portée locale à la fonction <? function somme ($a,$b) { return $b = $a + $b; } ?>
Variables locales à la fonction <? $a=2; $b=4; echo somme ($a,$b);//Affiche 6 echo $a; //Affiche 2 echo $b; //Affiche 4 ?>
le mot clé global <? function somme () { global $a, $b; return $b = $a + $b; } ?>
Variables globales au script Toutes les variables globales du script <? $a=2; $b=4; echo somme ();//Affiche 6 echo $a; //Affiche 2 echo $b; //Affiche 6 ?>
Variables prédéfinies: $GLOBALS $GLOBALS est un tableau associatif contenant les références sur toutes les variables globales du script. Les noms des variables sont les index du tableau. Cette fonction est strictement équivalente à la précédente function somme () { $GLOBALS["b"]=$GLOBALS[a"]+$GLOBALS["b"]; }
Variables prédéfinies: $_SERVER $_SERVER est un tableau contenant des informations comme les en- têtes, dossiers et chemins du script. $_SERVER ['REQUEST_METHOD'] – get, post, head, put $_SERVER ['QUERY_STRING'] – La chaîne de requête, si elle existe, qui est utilisée pour accéder à la page. $_SERVER ['HTTP_REFERER'] – L'adresse de la page (si elle existe) qui a conduit le client à la page courante. $_SERVER ['HTTP_USER_AGENT'] – une chaîne qui décrit le client HTML utilisé pour voir la page courante $_SERVER [REMOTE_ADDR'] – L'adresse IP du client qui demande la page courante. $_SERVER [REMOTE_HOST'] – Le nom de l'hôte qui lit le script courant (résolution DNS inversée).
Variables prédéfinies: $_COOKIE Un tableau associatif des valeurs passées au script courant via les cookies HTTP Si la directive register_globals (c'est mal) est active, alors ces variables seront aussi rendues directement accessible dans le contexte d'exécution global.
Variables prédéfinies: $_SESSION Un tableau associatif des valeurs stockées dans les sessions, et accessible au script courant. Si la directive register_globals (c'est mal) est active, alors ces variables seront aussi rendues directement accessible dans le contexte d'exécution global.
Variables prédéfinies: $_POST, $_GET, $_REQUEST $_GET : Un tableau associatif des valeurs passées au script courant via le protocole HTTP et la méthode GET $_POST : Un tableau associatif des valeurs passées au script courant via le protocole HTTP et la méthode POST $_REQUEST : Un tableau associatif des valeurs passées au script courant via le protocole HTTP et les méthodes GET et POST Si la directive register_globals est active (c'est mal), alors ces variables seront aussi rendues directement accessible dans le contexte d'exécution global. Toutes les super globales et leur valeurs sont affichées par la commande phpinfo()
Appel dynamique de fonctions call_user_func ($func, $arg) Permet dappeler dynamiquement la fonction $func avec $arg en paramètre $arg peut être un tableau PHP, une chaîne de caractères (séparée par des virgules)