Documente Academic
Documente Profesional
Documente Cultură
Ct Serveurs
Principe
Construire une application rpartie :
Sexcutant entre autre sur le poste hbergeant le serveur HTTP. Utilisant le serveur HTTP pour accder aux postes clients. Utilisant HTML comme langage de base pour linteraction avec les utilisateurs. En particulier, recours des clients lgers de type navigateurs WEB.(utilise aussi l'appellation client lger pour les applications laissant 2 quasiment tout le traitement au serveur)
Scripts ct serveur : les quatre leaders du march Perl PHP (Php Hypertext Preprocessor) JSP (Java Server Pages)
APACHE PHP
POST/GET
Rpertoires web
Historique
PHP = Hypertext PreProcessor Site officiel : http://www.php.net Cr en 1994 par Rasmus Lerdorf (PHP : Personnal Home Page.) Premire version : ensemble de scripts perl PHP3 : interprt PHP4 : compil PHP5 : compil Objet
7
Premier programme
La conception du script PHP est ralis avec un diteur quelconque, Ct serveur :
<HTML> <HEAD><TITLE>Mon premier programme</TITLE></HEAD> <BODY> il est sur le serveur <?php print date ("H i s"); ?> </BODY> </HTML>
Premier programme
Ct navigateur
<HTML> <HEAD> <TITLE> Heure </TITLE> </HEAD> <BODY> <P> Sur le serveur, il est actuellement 16:39:27 </P> </BODY> </HTML>
10
Gnralit
Extension du fichier : .php pour du PHP 4 .php3 pour du PHP 3 Dlimiteur : <? ... ?> <?php ... ?> <SCRIPT language="php"> ... </SCRIPT>
11
Syntaxe du langage
12
Commentaires
Un script php se commente comme en C : Exemple :
<?php // commentaire de fin de ligne /* commentaire sur plusieurs lignes */ # commentaire de fin de ligne comme en Shell Unix ?>
Tout ce qui se trouve dans un commentaire est ignor. Il est conseill de commenter largement ses scripts.
13
Exemples de commentaires
<?php echo 'Ceci est un test'; // Ceci est un commentaire sur une seule ligne, style c++ /* Ceci est un commentaire sur plusieurs lignes */ echo 'Ceci est un autre test'; echo 'Et un test final'; # Ceci est un commentaire style shell sur une seule ligne ?>
14
Syntaxe du langage
Variables, types et oprateurs
15
Il nest donc pas ncessaire de dclarer leur type au pralable ni mme de les initialiser avant leur utilisation.
Les identificateurs de variable sont prcds du symbole "$" (dollars). Exemple : $variable. Les variables peuvent tre de type entier (integer), rel (double), chane de caractres (string), tableau (array), objet (object), boolen (boolean)... Il est possible de convertir une variable en un type primitif grce au cast (comme en C). Exemple :
$str = "12"; // $str vaut la chane "12" $nbr = (int)$str; // $nbr vaut le nombre 12
16
Boolen
C'est le type le plus simple. Un boolen reprsente une valeur de vrit. Il peut valoir TRUE ou FALSE.
Note: Le type boolen a t introduit en PHP 4.
Syntaxe
Pour spcifier un boolen littral, utilisez le mot cl TRUE ou FALSE. Les deux sont insensibles la casse.
17
Exemple
<?php $valeur = true; echo '<br/>affichage valeur TRUE: "'.$valeur.'"'; $valeur = false; echo '<br/>affichage valeur FALSE: "'.$valeur.'"'; exit; ?>
18
Les entiers
Un entier est un nombre appartenant la classe Z = {..., -2, -1, 0, 1, 2, ...}. Syntaxe
Les entiers peuvent tre spcifis en notation dcimale (base 10), hexadcimale (base 16), ou octale (base 8), optionnellement prcde d'un signe (- ou +). Pour utiliser la notation octale, prcdez le nombre d'un 0 (zro). Pour utiliser la notation hexadcimale, prcdez le nombre d'un 0x.
19
Exemples
<?php
$a = 1234; // un nombre dcimal $a = -123; // un nombre ngatif $a = 0123; // un nombre octal (quivalent 83 dcimales) $a = 0x1A; // un nombre hexadcimal (quivalent 26 dcimales)
?>
20
Nombres dcimaux
Les nombres dcimaux, (aussi connus comme nombres virgule flottante, "floats", "doubles", ou "real numbers") peuvent tre spcifis en utilisant les syntaxes suivantes :
21
Exemple
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?>
22
23
La faon la plus simple de spcifier une chane de caractres est de l'entourer de guillemet simple (le caractre '). Pour spcifier un guillemet simple littral, vous devrez l'chapper d'un antislash (\). Pour spcifier un antislash littral avant un guillemet simple, ou la fin d'une chane de caractres, chappez-le deux fois (\\).
24
Exemple
<?php echo 'ceci est une chane simple';
echo 'Vous pouvez galement ajouter des nouvelles lignes dans vos chanes de cette faon';
// Affiche : Ceci n'affichera pas \n de nouvelle ligne echo 'Ceci n\'affichera pas \n de nouvelle ligne';
25
26
27
$filiere = " 3me anne "; $filiere.= " SIR "; echo $filiere;
28
Quelques fonctions:
strlen($str) : retourne le nombre de caractres dune chane strtolower($str) : conversion en minuscules strtoupper($str) : conversion en majuscules trim($str) : suppression des espaces de dbut et de fin de chane substr($str,$i,$j) : retourne une sous chane (entre les positions i et j) strnatcmp($str1,$str2) : comparaison de 2 chanes addslashes($str) : dspcialise les caractres spciaux (, , \) ord($char) : retourne la valeur ASCII du caractre 29
La valeur de la variable $essai est dlimite par un identifiant que vous nommez librement. La premire apparition de cet identifiant doit tre prcde de 3 signes infrieurs <. Sa deuxime apparition doit se faire en premier sur une nouvelle ligne. 30
Exemple
<HTML> <HEAD> <TITLE>New Document</TITLE> </HEAD> <BODY> <?php $str = <<<EOD Exemple de chane sur plusieurs lignes en utilisant la syntaxe Heredoc. EOD; echo $str; ?> </BODY> </HTML>
31
33
34
Syntaxe du langage
Les Constantes
35
Constantes
Lutilisateur peut dfinir des constantes dont la valeur est fixe une fois pour toute. Les constantes ne portent pas le symbole $ (dollars) en dbut didentificateur et ne sont pas modifiables.
define(var,valeur) : dfinit la constante var (sans $) de valeur valeur
Exemple :
define("author","Irisi "); Print author; // affiche irisi define("MY_Year","2011"); print MY_Year; // affiche 2011
36
Syntaxe du langage
Mathmatiques
37
Mathmatiques
Il existe une myriade de fonctions mathmatiques.
abs($x) : valeur absolue ceil($x) : arrondi suprieur floor($x) : arrondi infrieur pow($x,$y) : x exposant y round($x,$i) : arrondi de x la ime dcimale max($a, $b, $c ) : retourne largument de valeur maximum pi() : retourne la valeur de Pi
38
Mathmatiques
Et aussi :
Nombres alatoires : rand($x,$y) : valeur alatoire entre x et y srand() : initialisation du gnrateur alatoire
39
Syntaxe du langage
Les Tableaux
40
Tableaux (I)
Un tableau peut tre initialis avec la syntaxe array. Exemple :
$name=3; $tab_colors = array('red', 'yellow', 'blue', 'white'); $tab = array(SIR', 2013, 20.5, $name);//on peut mettre nimporte quel type
$prenoms[] = "Ali"; $villes[0] = "Marrakech"; $prenoms[] = "Justin"; $villes[1] = "Londres"; $prenoms[] = "Moha"; $villes[2] = "Atlass"; echo $prenoms[1]; // pour accder au 2me lment
41
Tableaux (II)
Parcours dun tableau.
$tab = array(SIR, 3, FSTG); Exemple 1 :
$i=0; while($i < count($tab)) { // count() retourne le nombre dlments echo $tab[$i].\n; $i++; }
Exemple 2 :
foreach($tab as $elem) { echo $elem.\n; }
La variable $elem prend pour valeurs successives tous les lments du tableau $tab.
42
Tableaux (III)
Quelques fonctions:
count($tab), sizeof : retournent le nombre dlments du tableau in_array($var,$tab) : teste si la valeur de $var existe dans le tableau $tab
43
$personne[" Prnom "] = " 3me anne "; Ici la cl Nom est associe la valeur SIR.
44
Ici on accde directement aux lments du tableau sans passer par les cls.
Exemple 2 : foreach($personne as $key => $elem) { echo $key : $elem; } Ici on accde simultanment aux cls et aux lments.
45
Exemple
<?php // ceci $a = array( 'couleur' => 'rouge', 'gout' => 'sucre' , 'forme' => 'rond', 'nom' => 'pomme', 4 // cette cl sera 0 ); // est compltement quivalent $a['couleur'] = 'rouge'; $a['gout'] = 'sucre'; $a['forme'] = 'rond'; $a['nom'] = 'pomme'; $a[] = 4; // cette cl sera 0 $b[] = 'a'; $b[] = 'b'; $b[] = 'c'; // va crer le tableau array( 0 => 'a' , 1 => 'b' , 2 => 'c' ) // ou plus simplement array('a' , 'b' , 'c' ) ?>
46
Les tableaux
Quelques fonctions array_count_values($tab) : retourne un tableau associatif contenant les valeurs du tableau $tab comme cls et leurs frquence comme valeur array_keys($tab) : retourne un tableau contenant les cls du tableau associatif $tab array_values($tab) : retourne un tableau contenant les valeurs du tableau associatif $tab array_search($val,$tab) : retourne la cl associe la valeur $val Llment dun tableau peut tre un autre tableau.
Exemples
<?php $array = array(1, "hello", 1, "world", "hello"); print_r(array_count_values($array)); ?> rsultats: Array ( [1] => 2 [hello] => 2 [world] => 1 ) ------------------------------------------------------------<?php $array = array(0 => 100, "color" => "red"); print_r(array_keys($array)); $array = array("blue", "red", "green", "blue", "blue"); print_r(array_keys($array, "blue")); $array = array("color" => array("blue", "red", "green"), "size" => array("small", "medium", "large")); print_r(array_keys($array)); ?> rsultats: Array ( [0] => 0 [1] => color ) Array ( [0] => 0 [1] => 3 [2] => 4 ) Array ( [0] => color [1] => size ) --------------------------------------------------------------------------<?php $array = array("size" => "XL", "color" => "gold");
Les tableaux
Quelques fonctions reset($tab) : place le pointeur sur le premier lment current($tab) : retourne la valeur de llment courant next($tab) : place le pointeur sur llment suivant prev($tab) : place le pointeur sur llment prcdant each($tab) : retourne la paire cl/valeur courante et avance le pointeur
Exemple :
<?php $colors = array("red", "green", "blue"); $nbr = count($colors); reset($colors); for($i=1; $i<=$nbr; $i++) { echo current($colors)."<br>"; next($colors) } ?>
Les fonctions I
Une fonction est un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel dans le corps du programme principal. Comme tout langage de programmation. PHP permet lcriture des fonction. La syntaxe est la suivante: function ma_fonction($argument1, $argument2,) { Liste des instructions; Return ($valeur_de_retour); } Une fonction peut ne pas avoir de valeurs dentre (arguments) ou encore retourner de valeurs (le cas dune fonction daffichage de message derreur).
Les fonctions II
Variable locale et variable globale dune fonction Toute variable dclare au sein dune fonction est de porte locale de cette fonction. Elle nest pas reconnue dans le reste du programme. global permet de travailler sur une variable de porte globale au programme. Le tableau associatif $GLOBALS permet daccder aux variables globales du script ($GLOBALS[var] accde la variable $var).
Exemple :
<?php function test() { $foo = "variable locale"; echo "$foo dans le contexte global : " . $GLOBALS["foo"] . "<br>"; echo "$foo dans le contexte courant : " . $foo . "\n"; } $foo = "Exemple de contenu"; test(); ?>
Les fonctions IV
Mme sans paramtre, un entte de fonction doit porter des parenthses ( ). Les diffrents arguments sont spars par une virgule et le corps de la fonction est dlimit par des accolades { }. Quelques exemples : function afficher($str1, $str2) { // passage de deux paramtres echo $str1, $str2; } function bonjour() { echo Bonjour; } function GetColor() { return black; } // passage daucun paramtre
Les fonctions V
En version 3 du PHP (version interprte), une fonction ne peut tre appele quaprs sa dfinition. En version 4 et 5 (compiles) une fonction peut tre appele avant sa dfinition. Exemple : function f1() { // dfinition de la fonction f1 echo fonction f1; } f1(); // appel de la fonction f1 dfinie plus haut f2(); // appel de la fonction f2 pas encore dfinie function f2() { // dfinition de la fonction f2 echo fonction f2; } Cet exemple affichera : fonction f1fonction f2!.
Les fonctions VI
Il est possible de faire retourner plusieurs valeurs dune fonction en utilisant les tableaux ayant pour lments les variables retourner. Dans lappel de la fonction, il faudra alors utiliser la procdure list() qui prend en paramtre les variables qui ont doit affecter les valeurs retournes. On affecte list() le retour de la fonction. Exemple : function trigo($nbr) { return array(sin($nbr), cos($nbr), tan($nbr)); // retour dun // tableau } $r = M_PI; list($a, $b, $c) = trigo($r); /* affectation aux variables $a,$b et $c des lments du tableau retourn par la fonction trigo */
?>
Fonctions rcursives
<?php function recursion($a) { if ($a < 20) { echo "$a\n"; recursion($a + 1); } }
recursion(3); ?>
Les inclusions
On peut inclure dans un script PHP le contenu dun autre fichier. require insert dans le code le contenu du fichier spcifi mme si ce nest pas du code php. ( quivalent au prprocesseur #include du C) Syntaxe: require(fichier.php); include value et insert chaque appel (mme dans une boucle) le contenu du fichier pass en argument. Syntaxe: include(fichier.php); Les inclusions sont trs utiles lors de lappel dune base de donne. Les paramtres de connexions sont stocks sur un fichiers part.
test.php
<?php echo "Une $couleur $fruit"; // Une include 'vars.php'; echo "Une $couleur $fruit"; // Une verte pomme ?>
?>
La fonction require permet dinsrer le contenu dun fichier lintrieur dun autre fichier. Cette fonction a donc pour effet de raliser un copier coller lendroit o elle est crite. Vous comprendrez immdiatement lintrt de cette fonction ! En effet, vous avez dsormais la possibilit dconomiser lcriture de code ou de texte. La syntaxe : <?php require("NomDuFichier"); ?> La description : NomDuFichier est le nom du fichier depuis lequel vous souhaitez raliser linsertion.
Exemple
Voici le fichier entete.php : <html> <head> <title> Le site INFOS PLUS</title> </head> <body> <h1>Le site INFOS PLUS</h1> <h1> Le site d'astuces votre services...</h1> <p>Contactez-moi au numro de tlphone suivant :</p> <p>INFOS PLUS PARIS : <i>01.99.01.01.01</i></p> <p>Je vous attends ! Venez vite !</p> Voici le code du fichier index.php :
<? // insertion de l'entte require("entete.php"); ?> <h1>bonjour</h1> <h1>Prsentation</h1> <p>Ce site vous propose des centaines d'astuces concernant l'utilisation de l'outil informatique.</p> <p>C'est d'actualit, non ?</p> <p>Pour continuer la visite, cliquez sur le lien page suivante...</p> <p><a href="suite.php">Page suivante</a></p> </body> </html> Voici le code du fichier suite.php :
<? // insertion de l'entte require("entete.php"); ?> <h1>La suite</h1> <p>Salut !</p> <p>Maintenant, si vous voulez continuer de visiter ce site, il va falloir me dire d'o vous tes...</p> <p>En fait, il n'y a pas de suite !</p> <p><a href="index.php">Alors retourner la page d'accueil...</a></p> </body>
Arrt prmatur
Pour stopper prmaturment un script, il existe deux fonctions. die arrte un script et affiche un message derreur dans le navigateur. Exemple : if(mysql_query($requette) == false) die(Erreur de base de donnes la requte); exit larrte aussi mais sans afficher de message derreur. Exemple : function mafonc() { exit(); } Ces fonctions stoppent tout le script et pas seulement le bloc en cours.
Les sessions I
Les sessions permettent le passage des variables (variables de session) dune page une autre tout au cours de la visite du site web. Les variables de session ne sont pas visibles dans lURL et peuvent tre de types diffrents (tableau, float). Cette mthode permet de conserver les paramtres de connexions dun visiteur et conserver ses choix (sauvegarder son panier ecommerce par exemple) Les informations de sessions sont conserves en local sur le serveur tandis quun identifiant de session est post sous la forme dun cookie chez le client.
Les sessions II
Fonctions session_start() : dmarre une session session_destroy() : dtruit les donnes de session et ferme la session session_start() doit tre prsente sur toutes les pages qui utilisent les variables de sessions et doit tre dclare avant tout envoie au navigateur du client. Une variable de session est manipule de la faon suivante:
$_SESSION[nom_de_la_variable]
Exemple: $_SESSION[etablissement]=ENSA;
Les fichiers I
Les fichiers en PHP sont trs souvent utilises pour stocker les donnes. Les bases de donnes sont encore plus puissantes ce niveau, mais il est parfois ennuyeux de les utiliser pour accueillir certaines formes de donnes. Exemple : un compteur de visite Il existe une multitude de fonctions ddies l'utilisation des fichiers. La plus simple est la fonction file_get_contents(). Elle prend comme paramtre le nom du fichier et elle affecte son contenu une variable type chane de caractre. Exemple: Le fichier test.txt contient le texte suivant: Salut, cest un test Pour afficher le contenu de ce fichier sur une page web: $str=file_get_contents(test.txt); echo $str; // affiche: Salut, cest un test
Les fichiers II
La manipulation de fichier se fait grce un identifiant de fichier. Quelques fonctions: fopen($file ,$mode) : ouverture du fichier identifi par son nom $file et dans un mode $mode particulier, retourne un identificateur de fichier $fp ou FALSE si chec fclose($fp) : ferme le fichier identifi par le $fp fgets($fp, $length) : lit une ligne de $length caractres au maximum. Si la longueur de la ligne est infrieur $length, lit jusqu la fin de la ligne. fputs($fp, $str) : crit la chane $str dans le fichier identifi par $fp fgetc($fp) : lit un caractre feof($fp) : teste la fin du fichier retourne TRUE ou FALSE file_exists($file) : indique si le fichier $file existe dans le dossier courant. Retourne TRUE ou FALSE. Le nom du fichier peut tre une arborescence de rpertoire.
Les fichiers IV
Exemple typique daffichage du contenu dun fichier : <?php $file = fichier.txt ; if( $fd = fopen($file, r)) { // ouverture du fichier en lecture while ( ! feof($fd) ) { // teste la fin de fichier $str .= fgets($fd, 1024); /* lecture jusqu fin de ligne o des 1024 premiers caractres */ } fclose ($fd); // fermeture du fichier echo $str; // affichage } else { die(Ouverture du fichier <b>$file</b> impossible.); } ?>
Les fichiers V
La fonction fopen permet douvrir des fichiers dont le chemin est relatif ou absolu. Elle permet aussi douvrir des ressources avec les protocols HTTP ou FTP. Elle renvoie FALSE si louverture choue. Exemples : $fp = fopen(../docs/rapport.txt, r); $fp = fopen(http://www.php.net/,r); $fp = fopen(ftp://user:password@www.fstg-marrakech.ac.ma/, w);
Dates et heures I
Les fonctions de dates et heures sont trs utilises sur internent. En PHP il existe plusieurs fonctions qui permettent de manipuler les dates. Quelques fonctions : date($format) : retourne une chane de caractres contenant la date et/ou lheure locale au format spcifi getdate() : retourne un tableau associatif contenant la date et lheure checkdate($month, $day, $year) : vrifie la validit dune date mktime ($hour, $minute, $second, $month,$day, $year) : retourne le timestamp UNIX correspondant aux arguments fournis cest--dire le nombre de secondes entre le dbut de l'poque UNIX (1er Janvier 1970) et le temps spcifi time() : retourne le timestamp UNIX de lheure locale
Dates et heures II
Les formats pour date d j l D w z m n F M Y y h g Jour du mois sur deux chiffres [01..31] Jour du mois sans les zros initiaux Jour de la semaine textuel en version longue et en anglais Jour de la semaine textuel en trois lettres et en anglais Jour de la semaine numrique [0..6] (0: dimanche) Jour de l'anne [0..365] Mois de l'anne sur deux chiffres [01..12] Mois sans les zros initiaux Mois textuel en version longue et en anglais Mois textuel en trois lettres Anne sur 4 chiffres Anne sur 2 chiffres Heure au format 12h [01..12] Heure au format 12h sans les zros initiaux
Dates et heures IV
Les cls du tableau associatif retourn par getdate seconds : secondes minutes : minutes hours : heures mday : jour du mois wday : jour de la semaine, numrique mon : mois de l'anne, numrique year : anne numrique yday : jour de l'anne numrique weekday : jour de la semaine, textuel complet en anglais month : mois textuel complet en anglais
Les Instructions
81
83
Boucles
while ( condition ) { Action; }
do { Action; } while (condition); for (expr1; expr2; expr3) { Action; }
85
Boucles
$i=1; while ($i <= 10) { echo "- $i -"; $i++; } $i=1; do { echo "- $i -"; $i++; } while ($i <= 10) for ($i = 1; $i <= 10; $i++) { echo "- $i -"; }
86
Break;Continue
Break :Cette instruction permet de sortir de n'importe quelle boucle, n'importe quel moment. Continue : Cette instruction permet de ne pas excuter le code contenu dans la boucle et de passer l'itration suivante. for ($i=1; $i<=10; $i++) { if ($i<=5) { echo $i; } else { break; } echo "- "; } // cette boucle affichera : 1 - 2 - 3 - 4 - 5
87
88
Bonnes pratiques
Il faut absolument vrifier toute valeur reue de la part dun usager (par exemple dans $_GET).
La variable est-elle initialise ? La variable est-elle du bon type ? La variable contient-elle une valeur raisonnable ?
89
90
Formulaires HTML
Le langage HTML permet de dfinir des formulaires en se servant du conteneur <form>.
On peut ainsi crer des pages beaucoup plus interactives quavec seulement des liens
91
action: lURL du script ou du programme dclencher (en principe, sur le serveur) method: post ou get
get inclut les paramtres dans lURL, directement visibles pour lusager post inclut les paramtres dans le corps de la requte HTTP
92
<HTML> <FORM ACTION="test.php" METHOD=POST> <INPUT TYPE=hidden NAME= IGSI" VALUE="bonjour"> Nom : <INPUT TYPE=text NAME="nom"> <INPUT TYPE=submit VALUE="Envoyer"> </FORM> </HTML>
93
94
96
Transmission
Chaque champ a un nom GET : les donnes sont transmises dans lURL test.php POST : transmission dans le protocole HTTP (invisible sur lURL)
97
TEXT pour les chanes de caractres HIDDEN pour les champs cachs CHECKBOX pour un choix multiple RADIOBOX pour un choix exclusif SUBMIT pour dclencher l'action FILE pour transmettre un fichier
98
99
Champs <SELECT>
Permet de choisir une ou plusieurs valeurs dans une liste
<SELECT NAME='realisateur' SIZE=3> <OPTION VALUE=1>Alfred Hitchcock <OPTION VALUE=2 SELECTED>Maurice Pialat <OPTION VALUE=3>Quentin Tarantino </SELECT>
100
101
Champ <TEXTAREA>
Pour entrer du texte libre:
<TEXTAREA NAME= description COLS=30 ROWS=3> texte libre de description </TEXTAREA>
103
Et on peut maintenant utiliser ces donnes pour fabriquer une page HTML
<?php if ($_POST["annee"]<1920) echo Desole, on a pas.; ?>
104
105
106
<?php $titre = $_POST['titre']; $prenom=$_POST['prenom']; $nom=$_POST['nom']; echo "Pour le film $titre j'ai reu les acteurs suivants :<P>\n"; for ($i=0; $i <3; $i++) echo "<B> $prenom[$i] $nom[$i]<B><BR>\n";
?>
107
<?php $titre = $_POST['titre']; $prenom=$_POST['prenom']; $nom=$_POST['nom']; echo "Pour le film $titre j'ai reu les acteurs suivants :<P>\n"; $nbActeurs = count($prenom); for ($i=0; $i < $nbActeurs; $i++) echo "<B> $prenom[$i] $nom[$i]<B><BR>\n"; ?>
->
108
Les Fonctions
109
Les Fonctions
Comme dans tout langage structur, en PHP, les fonctions sont la base dune programmation claire et efficace. Une fonction est une sorte de sous-programme isol du reste du code,
Excutable tout moment, depuis nimporte quelle partie du code principal ou nimporte quelle autre fonction, par simple appel. De plus, les avantages des fonctions sont :
La non rptition de la mme squence de code De cet avantage dcoulent : Le gain de productivit. La meilleure lisibilit du code. La maintenance facilite.
110
Fonction : Dclaration
Dclaration :
La syntaxe de dclaration sappuie sur le mot cl function. Suivi du nom de la fonction, puis de parenthses (obligatoires) destines accueillir les ventuels paramtres passer la fonction.
exemple 1: function bonjour( ) { echo Bonjour ! ; } exemple 2: function bonjour2( ) { return Bonjour ! ; }
111
112
Global
Une variable prcde du mot cl global sera visible dans l'ensemble du code, c'est--dire que sa porte ne sera pas limite la fonction seulement. Ainsi, toutes les fonctions pourront utiliser et modifier cette mme variable
Le niveau static permet de dfinir une variable locale la fonction, qui persiste durant tout le temps d'excution du script. Par dfaut, la variable possde le niveau local, c'est--dire que la variable ne sera modifi qu' l'intrieur de la fonction et retrouvera la valeur qu'elle avait juste avant l'appel de fonction la sortie de celle-ci.
<?php $chaine = "Nombre de camions : "; function ajoute_camion($mode='') { global $chaine; static $nb=0; $nb++; // on incrmente le nombre de camions if($mode == "affiche"){ echo $chaine.$nb; // on affiche le nombre de camions } } ajoute_camion(); // nb == 1 ajoute_camion(); // nb == 2 ajoute_camion(); // nb == 3 ajoute_camion("affiche"); // affiche Nombre de camions : 4 ?>
function formation (&$phrase) { $phrase= "Formation Irisi" ; } $chaine = "Phrase qui va disparatre" ; formation ($chaine) ; echo $chaine
118
Les Fichiers
119
La rcursivit
Les fonctions rcursives sont des fonctions qui s'appellent elles-mmes. Ce type de fonction se rvle indispensable pour parcourir une arborescence par exemple. Voici un exemple. <?php function fonction_recursive($n=0) { $n++; echo "$n <br>"; if($n < 10){ // si n est infrieur 10 on continue fonction_recursive($n); }
Fichiers (I)
La manipulation de fichier se fait grce un identifiant de fichier. Quelques fonctions:
fopen($file [,$mode]) : ouverture du fichier identifi par son nom $file et dans un mode $mode particulier, retourne un identificateur $fp de fichier ou FALSE si chec fclose($fp) : ferme le fichier identifi par le $fp fgets($fp, $length) : lit une ligne de $length caractres au maximum fputs($fp, $str) : crit la chane $str dans le fichier identifi par $fp fgetc($fp) : lit un caractre
122
Fichiers (IV)
La fonction fopen permet douvrir des fichiers dont le chemin est relatif ou absolu. Elle permet aussi douvrir des ressources avec les protocoles HTTP ou FTP. Elle renvoie FALSE si louverture choue. Exemples : $fp = fopen(../docs/faq.txt, r); $fp = fopen(http://www.php.net/,r); $fp = fopen(ftp://user:password@fstg.ma/, w); Les modes douverture : 'r' (lecture seule), 'r+' (lecture et criture), 'w' (cration et criture seule), w+ (cration et lecture/criture), 'a(cration et criture seule ; place le pointeur de fichier la fin du fichier), 'a+' (cration et lecture/criture ; place le pointeur de fichier la fin du fichier)
123
Fichiers (II)
Quelques fonctions (Suite):
feof($fp) : teste la fin du fichier file_exists($file) : indique si le fichier $file existe filesize($file) : retourne la taille du fichier $file filetype($file) : retourne le type du fichier $file unlink($file) : dtruit le fichier $file copy($source, $dest) : copie le fichier $source vers $dest readfile($file) : affiche le fichier $file rename($old, $new) : renomme le fichier $old en $new
124
Le premier paramtre de la fonction est le nom du fichier et le second paramtre est le mode dans lequel vous pouvez ouvrir votre fichier.
<html> <body> <?php if (!($f=fopen("exemple.txt","r"))) exit("Unable to open file!"); ?> </body> </html>
// regarde si le fichier est accessible en criture if (is_writable($f)) { // Ecriture if (fwrite($handle, $text) == FALSE) { echo 'Impossible d\'crire dans le fichier '.$f.''; exit; }
echo 'Ecriture termin'; fclose($handle); } else { echo 'Impossible d\'crire dans le fichier '.$f.''; } ?>
?>
La Messagerie
134
Mail (I)
La fonction mail envoie un message lectronique.
Syntaxe : mail($recipient, $subject, $message[, $headers, $params]); Exemple : $message = "Comment Ecrire du code PhP" mail("vous@fstg.ma", Aide sur PHP, $message);
135
Mail (II)
136
137
chdir($str) : Change le dossier courant en $str. Retourne TRUE si succs, sinon FALSE. getcwd() : Retourne le nom du dossier courant (en format chane de caractres). opendir($str) : Ouvre le dossier $str, et rcupre un pointeur $d dessus si succs, FALSE sinon closedir($d) : Ferme le pointeur de dossier $d. readdir($d) : Lit une entre du dossier identifi par $d. Cest--dire retourne un nom de fichier de la liste des fichiers du dossier point. Les fichiers ne sont pas tris. Ou bien retourne FALSE sil ny a plus de fichier. rewinddir($d) : Retourne la premire entre du dossier identifi par $d.
138
$dir est un pointeur vers la ressource dossier $file est une chane de caractres qui prend pour valeur chacun des noms de fichiers retourns par readdir()
139
Cet exemple est quivalent au prcdent. Ils listent tous les deux les fichiers et sous rpertoires du dossier courant.
141
Dates et heures
142
Quelques fonctions :
date($format) : retourne une chane de caractres contenant la date et/ou lheure
locale au format spcifi getdate() : retourne un tableau associatif contenant la date et lheure
checkdate($month, $day, $year) : vrifie la validit dune date mktime ($hour, $minute, $second, $month,$day, $year) : retourne le timestamp UNIX correspondant aux arguments fournis cest--dire le nombre de secondes entre le dbut de l'poque UNIX (1er Janvier 1970) et le temps spcifi time() : retourne le timestamp UNIX de lheure locale
143
seconds : secondes minutes : minutes hours : heures mday : jour du mois wday : jour de la semaine, numrique mon : mois de l'anne, numrique year : anne, numrique yday : jour de l'anne, numrique weekday : jour de la semaine, textuel complet en anglais month : mois, textuel complet en anglais
145
Exemple 2 :
if(checkdate(15-04-2005)) echo cest le grand oral!!! ;
Exemple 3 :
$ aujourdhui = getdate(); $mois =$aujourdhui['mon']; $ jour =$aujourdhui['mday']; $annee =$aujourdhui['year']; echo ''$jour/$mois/$annee''; // affiche 29/4/2006
146
PHP et MySQL
147
Modle client/serveur
Une application SGBD tourne sur le serveur. Le serveur est accessible par un client qui peut tre sur la mme machine ou distant. Un pilote ODBC est disponible. Dans le cas du web, le client est le module PHP.
148
Architecture Apache-PHPMySQL
APACHE PHP
GET /PAGE.PHP
Rpertoires web
MySQL
SQL
149
PHP et MySQL
PHP offre un grand nombre de fonctions pour exploiter les BD dont MySQL.
Architecture rseau
Serveur HTTP
Serveur MySQL
HTTP TCP:80 MYSQL TCP:3306
152
int mysql_connect ([string hostname [:port] [:/path/to/socket] [, string username [, string password]]])
int mysql_connect () int mysql_connect (string hostname) int mysql_connect (string hostname:port) int mysql_connect (string username) int mysql_connect (string username, string password) int mysql_connect (string hostname, string username, string password)
Interprtation :
154
Exemple 1 de connexion
if( $id = mysql_connect("localhost", "dut", "passwd") ) { if( $id_db = mysql_select_db("Database") ) { echo "Succs de connexion. "; /* code du script */ } else { die("Echec de connexion la base. "); } mysql_close($id); } else { die("Echec de connexion au serveur de base de donnes. "); }
155
Exemple 2 de connexion
@ mysql_connect("localhost", "igsi", "passwd") or die("Echec de connexion au serveur."); @mysql_select_db("database") or die("Echec de slection de la base.");
Cet exemple est quivalent au prcdent mais plus court crire. Le symbole @ (arobase) permet dviter le renvoie de valeur par la fonction quil prcde. On pourra avantageusement intgrer ce code dans un fichier que lon pourra joindre par include(). Cest aussi un moyen de scuriser le mot de passe de connexion.
156
int mysql_select_db (string database_name [, int link_identifier]) int mysql_select_db (string database_name ) int mysql_select_db (string database_name , int link_identifier)
Interprtation
157
int mysql_query (string query [, int link_identifier]) int mysql_query (string query ) int mysql_query (string query , int link_identifier)
Interprtation
158
Interrogation (I)
Pour envoyer une requte une base de donne, il existe la fonction : mysql_query($str) qui prend pour paramtre une chane de caractres qui contient la requte crite en SQL et retourne un identificateur de rsultat ou FALSE si chec. Les requtes les plus couramment utilises sont : CREATE (cration dune table), SELECT (slection), INSERT (insertion), UPDATE (mise jour des donnes), DELETE (suppression), ALTER (modification dune table), etc.
159
Interrogation (II)
Exemple : $result = mysql_query("SELECT address FROM users WHERE name=\"$name\""); Cet exemple recherche ladresse de lutilisateur portant pour nom la valeur de la chane $name. Lidentificateur de rsultat $result permettra dautres fonctions dextraire ligne par ligne les donnes retournes par le serveur. Attention, contrairement Oracle SQL, les requtes MySQL ne se terminent pas par un point virgule ; et nautorisent pas les SELECT imbriqus.
160
array = mysql_fetch_row (int result) array mysql_fetch_array (int result) objet mysql_fetch_object (int result) int mysql_close ([int link_identifier])
Fin de la connexion
162
Ici, on accde aux valeurs de la ligne par lattribut dans le tableau associatif. 164
165
Fonctions additionnelles
Quelques fonctions supplmentaires trs utiles :
mysql_free_result($result) : efface de la mmoire du serveur les lignes de rsultat de la requte identifies par $requet. Trs utile pour amliorer les performances du serveur. mysql_insert_id([$id]) : retourne lidentifiant dun attribut cl primaire AUTO_INCREMENT de la dernire insertion. mysql_num_fields($result) : retourne le nombre dattributs du rsultats. mysql_num_rows($result) : retourne le nombre de lignes du rsultats. Et ainsi permet de remplacer le while par un for.
166