530 likes | 661 Views
ou le web dynamique. PHP. 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 )
E N D
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) • é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 http://php.net/manual/fr/index.php
php cli VS mod_php • 2 versions php • php cli en ligne de commandes • Chemin à mettre dans la variable d’environnement $PATH • mod_php • Permet d’embarquer 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 d’une 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) • proposé massivement par les hébergeurs
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 <html> <head> <title>My First PHP Script</title> </head> <body> <p> <?php echo "Hello World"; ?> </p> </body></html>
Version cgi (non embedded) <?phpecho "<html>";echo "<head>";echo "<title>My First PHP Script</title>";echo "</head>";echo "<body>";echo "<p>Hello World</p>";echo "</body>";echo "</html>";?>
Côté client <html> <head> <title>My First PHP Script</title> </head> <body> <p> Hello World </p> </body></html>
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 d’une variable • gettype($var); • Typer explicitement • settype($var, "type");
Opérations sur les variables • Tester le type d’une 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éen • (double) , (float) , (real) - type double • (string) - type chaîne de caractère • (array) - type tableau • (object) - type objet
Les stringsles 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 stringsles 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 stringscaractè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 d’affichage • é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érateursarithmétiques • + pour l'addition • - pour la soustraction • * pour la multiplication • / pour la division • % pour la division entière
Opérateursd’affectation • $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érateursde 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 l’intervalle ]0;4[“; • } • elseif( $cpt >= 4 && $cpt < 10) • {echo $cpt. “est dans l’intervalle [4;10[“; • } • else • { echo $cpt. “est dans l’intervalle ]10;+∞)“; • }
structure de choix • swicth($animal) • { case 'chien' : echo " ouaf ouaf "; break; case 'chat' : echo " miaou miaou "; break; default : echo $Animal." n’est pas un animal domestique "; • } • instruction break est nécessaire si les actions qui le suivent n'ont pas être exécutées
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 "<li>".$libelle."</li>"; • } • affichera • français • english • deutsch foreach ( $langages as $key => $libelle){ echo "<li>".$key." : ".$libelle."</li>"; } 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 à l’itération suivante d’une 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 "<li>".$libelle."</li>"; • } • 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 s’il n’a 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 d’erreur) • require(file.php); • inclure et exécuter le code de file.php (ce fichier doit exister sinon require renverra un message d’erreur) si le fichier n’a 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 d’un 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 n’est 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 d’une déclaration de fonction • le mot clé return : spécifie le résultat à renvoyer
Fonction typique • <? function somme ($a,$b) { return $a + $b; } • ?>
Appel d’une fonction • <? $Total=234; $SousTotal=123; $Total=somme ($Total,$SousTotal); echo $Total;// affiche 357 • ?>
Paramètres par défaut • Il est possible d’attribuer des valeurs par défaut aux arguments d’une fonction • Une valeur par défaut ne peut être qu’une constante • Les arguments ayant une valeur par défaut doivent être placés après les arguments qui n’en ont pas
Exemple d’utilisation 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.