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) • é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 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
<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 ricardecho 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 d’appeler 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)