Академический Документы
Профессиональный Документы
Культура Документы
Introduction(1)
HTML : conception de pages destines tre publies sur Internet Page html : contient le texte afficher et des instructions de mise en page HTML est un langage de description de page et non pas un langage de programmation
pas dinstructions de calcul ou pour faire des traitements suivant des conditions
Ncessit croissante damliorer le contenu de sites Mises jour manuelles trop complexes Pourquoi ne pas automatiser les mises jour ?
Introduction(2)
Leurs contenus ne changent ni en fonction du demandeur ni en fonction dautres paramtres ventuellement inclus dans la requte adresse au serveur. Toujours le mme rsultat.
Rle du serveur : localiser le fichier correspondant au document demand et rpond au navigateur en lui envoyant le contenu de ce fichier
Introduction(3)
Serveur
Introduction(3)
Langages squentiels : excuter une srie dinstructions, les unes la suite des autres, jusqu ce que le programme rencontre une instruction finale
Langages vnementielle : ragir des vnements. Apparus avec les interfaces graphiques
Les langages de scripts sont des interfaces utilises pour appeler dautres programmes et capables de traduire les requtes en un contenu excutables.
Introduction(4)
un programme stock sur un serveur et excut par celui-ci, qui passe en revue les lignes dun fichier source pour en modifier une partie du contenu, avant de renvoyer lappelant ( un navigateur par exemple) le rsultat du traitement.
La tche dinterprtation des ordres excuter est dlgue un composant, souvent appel moteur,
install sur le serveur, qui est dot dune API et dun fonctionnement identique quel que soit la plate-forme utilise pour grer le serveur
Introduction(5)
Le programme utilise linformation brute dune base de donnes
Introduction(6)
Ses rsultats peuvent varier en fonction de plate-forme utilise. Un programme en JavaScript pourra fonctionner sous Netscape et poser problme sous Internet explorer.
Introduction(7)
Sont indpendants de la machine et du logiciel de navigation utiliss pour la consultation. Sont compatibles avec tous les navigateurs et Toutes leurs versions. Permettent de masquer les sources de ses programmes Ncessitent de recharger la page chaque fois que celle-ci est modifie.
10
Introduction(8)
Les CGI
Sont des composants excutables (fichiers .exe ou .dll) qui produisent sur le serveur des contenus html envoyer aux clients.
Les CGI sont compils. Ils sont rapides mais fortement lis la plate-forme sur laquelle ils tournent.
PERL
Surcharge rapide du serveur par la cration de plusieurs processus Employ sur de nombreux serveurs. Il tourne sur de nombreuses plateformes : Unix, Linux, Windows, Mac Prvu l'origine pour la manipulation de chanes de caractres, il est rapidement devenu un vritable langage orient objet. Abord difficile et faible lisibilit.
11
Introduction(9)
ASP
Bas sur des scripts crits en VBscript, Jscript ou Javascript. Largement rpandu, Facilit de mise en uvre volutif et performant Plusieurs outils de dveloppement intgrs (Macromdia Ultradev, Microsoft Visual Interdev). Intimement lie l'environnement Windows NT/2000 et au serveur IIS (Internet Information Server) de Microsoft. Lenvironnement Microsoft est ncessaire
12
Introduction(10)
JSP
13
Introduction(11)
PHP
Connat un succs toujours croissant sur le Web et se positionne comme un rival important pour ASP L'environnement Linux est sa plateforme de prdilection Combin avec le serveur Web Apache et la base de donnes MySQL, PHP offre une solution particulirement robuste, stable et efficace Gratuit : Tous les logiciels sont issus du monde des logiciels libres (Open Source).
14
Un peu dhistoire
Histoire et Origine
Premire version de PHP a t mis au point au dbut d'automne par Rasmus Lerdorf en 1994
Version appele l'poque Personal Home Pages Pour conserver la trace des utilisateurs venant consulter son CV sur son site, grce l'accs une base de donnes par l'intermdiaire de requtes SQL
La version 3.0 de PHP fut disponible le 6 juin 1998 A la fin de l'anne 1999, une version bta de PHP, baptise PHP4 est apparue En 2001 cinq millions de domaines utilisent PHP trois fois plus que lanne 2000
15
Dfinition
La gratuit et la disponibilit du code source (PHP4 est distribu sous licence GNU GPL) La simplicit d'criture de scripts La possibilit d'inclure le script PHP au sein d'une page HTML La simplicit d'interfaage avec des bases de donnes L'intgration au sein de nombreux serveurs web (Apache, Microsoft IIS, ...)
16
Principe
Les scripts PHP sont gnralement intgrs dans le code dun document HTML Lintgration ncessite lutilisation de balises
?> ?>
Avec le style php: <?php ligne de code PHP avec le style JavaScript : <script language=php>
</script>
17
//ligne de code PHP ?> <html> <head> <title> Mon script PHP </title> </head> <body> //ligne de code HTML < ?php //ligne de code PHP ?> //ligne de code HTML . </body> </html>
18
19
La fonction print : print(expression); print("Chaine de caracteres"); print ((1+2)*87); La fonction printf : printf (chane formate); printf ("Le primtre du cercle est %d",$Perimetre);
20
Typologie
Toute instruction se termine par un point-virgule Sensible la casse Sauf par rapport aux fonctions
Les commentaires
21
Les constantes
Define("nom_constante", valeur_constante )
22
Principe
Doubleval(), empty(), gettype(), intval(), is_array(), is_bool(), is_double(), is_float(), is_int(), is_integer, is_long(), is_object(), is_real(), is_numeric(), is_string() Isset(), settype(), strval(), unset() Affectation par valeur : $b=$a Affectation par (rfrence) variable : $c = &$a
23
Variable locale
Visible uniquement lintrieur dun contexte dutilisation
Variable globale
Visible dans tout le script Utilisation de linstruction global() dans des contextes locales
<? $var = 100; function test(){ global $var; return $var;} $resultat = test(); if ($resultat) echo $resultat; else echo " erreur "; ?>
24
Les variables tableaux sont galement capables de supporter les noms dynamiques
$nom_variable = array("val0", "val1", ...,"valN"); ${$nom_variable[0]} = valeur; $val0 = valeur; $nom_variable = "nom_var"; ${$nom_variable}[0] = valeur; $nom_var[0] = valeur;
Les accolades servent aussi viter toute confusion lors du rendu d'une variable dynamique
echo "Nom : $nom_variable - Valeur : ${$nom_variable}"; // quivaut echo "Nom : $nom_variable - Valeur : $nom_var";
25
Variables prdfinies
Description Nom d'hte de la machine du client (associe l'adresse IP) URL de la page qui a appel le script PHP Langue utilise par le serveur (par dfaut enus) Types MIME reconnus par le serveur (spars par des virgules) Type de donnes contenu prsent dans le corps de la requte. Il s'agit du type MIME des donnes L'adresse IP du client appelant le script CGI Nom du script PHP
$REMOTE_ADDR $PHP_SELF
26
$HTTP_HOST
$SERVER_ADDR $SERVER_PROTOCOL
27
Variables prdfinies
28
Principe
La mme variable peut changer de type en cours de script Les variables issues de lenvoi des donnes dun formulaire sont du type string
Les entiers : le type Integer Les flottants : le type Double Les tableaux : le type array Les chanes de caractres : le type string Les objets
29
Le transtypage
Transtypage explicite : le cast (int), (integer) ; (real), (double), (float); (string); (array); (object)
<? $var=" 100 FRF "; Echo " pour commencer, le type de la variable est $var, gettype($var); $var =(double) $var; Echo <br> Aprs le cast, le type de la variable est $var ", gettype($var); Echo "<br> et a la valeur $var "; ?>
30
Principe
Les lments dun tableau peuvent appartenir des types distincts Lindex dun tableau en PHP commence de 0 Pas de limites suprieures pour les tableaux La fonction count() pour avoir le nombre dlments dun tableau
31
32
Les tableaux indics et les tableaux associatifs Tableau associatif (ou table de hachage)
Les lments sont rfrencs par des chanes de caractres associatives en guise de nom: la cl dindex
$tableau["indice"] = valeur; $jour["Dimanche"] = 7 $jour["Mercredi"] = "Le jour des enfants" $tableau = array(ind0 => val0, ind1 => val1,..., indN => valN); $jour = array("Dimanche" => 1, "Lundi" => 2, "Mardi" => 3, "Mercredi" => 4, "Jeudi" => 5, "Vendredi" => 6, "Samedi" => 7); $variable = $tableau["indice"]; $JJ = $jour["Vendredi"]; //affecte 6 $JJ echo $jour["Lundi"]; //retourne la valeur 2
33
Tableaux multidimensionnels
Pas d'outils pour crer directement des tableaux multidimensionnels L'imbrication des tableaux est possible
tab1 = array(Val0, Val1,..., ValN); $tab2 = array(Val0, Val1,..., ValN); // Cration d'un tableau deux dimensions $tableau = array($tab1, $tab2); &mois = array("Janvier", "Fvrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aot", "Septembre", "Octobre", "Novembre", "Dcembre"); $jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"); &element_date = array(&mois, &jour); $variable = $tableau[indice][indice]; $MM = $element_date[0][0]; //affecte "Janvier" $MM echo $element_date[1][5] . " 7 " . $element_date[0][2] . "2002"; // retourne "Jeudi 7 Mars 2002"
34
$jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"); $i = 0; foreach($jour as $JJ) { echo "La cellule n ". $i . " : " . $JJ . "<br>"; $i++; }
35
$tableau = array(cl1 => val1, cl2 => val2, ..., clN => valN); foreach($tableau as $cl => $valeur) { echo "Valeur ($cl): $valeur"; } $jour = array("Dimanche" => 7, "Lundi" => 1, "Mardi" => 2, "Mercredi" => 3, "Jeudi" => 4, "Vendredi" => 5, "Samedi" => 6); foreach($jour as $sJJ => $nJJ) { echo "Le jour de la semaine n ". $nJJ . " : " . $sJJ . "<br>"; }
36
Fonctions de tri
La fonction sort() effectue un tri sur les valeurs des lments dun tableau selon un critre alphanumrique :selon les codes ASCII :
a est aprs Z et 10 est avant 9 ) Le tableau initial est modifi et non rcuprables dans son ordre original Pour les tableaux associatifs les cls seront perdues et remplaces par un indice cr aprs le tri et commencant 0
La fonction rsort() effectue la mme action mais en ordre inverse des codes ASCII. La fonction asort() trie galement les valeurs selon le critre des codes ASCII, mais en prservant les cls pour les tableaux associatifs La fonction arsort() la mme action mais en ordre inverse des codes ASCII la fonction natcasesort() effectue un tri dans lordre alphabtique non ASCII ( a est avant z et 10 est aprs 9 )
37
Fonctions de tri
La fonction ksort() trie les cls du tableau selon le critre des codes ASCII, et prserve les associations cl /valeur
La fonction krsort() effectue la mme action mais en ordre inverse des codes ASCII
<?php $tab2 = array ("1622"=>"Molire","1802"=>"Hugo","1920"=>"Vian") ; ksort ($tab2); echo "<h3 > Tri sur les cls de \$tab2 </h3>" ; foreach ($tab2 as $cle=>$valeur) { echo "<b> llment a pour cl : $cl; et pour valeur : $ cvaleur </b> <br />"; } ?>
38
$tableau = array_count_values($variable); retourne un tableau comptant le nombre d'occurrences des valeurs d'un tableau. $tableau = array_diff($var_1, $var_2, ..., $var_N); retourne dans un tableau contenant les valeurs diffrentes entre deux ou plusieurs tableaux.
$tableau = array_filter($variable, "fonction") retourne un tableau contenant les enregistrements filtrs d'un tableau partir d'une fonction.
$tableau = array_flip($variable); intervertit les paires cl/valeur dans un tableau. $tableau = array_intersect($var_1, $var_2, ..., $var_N); retourne un tableau contenant les enregistrements communs aux tableaux entrs en argument.
39
tableau = array_keys($variable [, valeur]); retourne toutes les cls d'un tableau ou les emplacements d'une valeur dans un tableau. $tableau = array_map($var_1 [, $var_2, ..., $var_N], 'fonction'); applique une fonction un ou plusieurs tableaux. $tableau = array_merge($var_1, $var_2, ..., $var_N); enchane des tableaux entrs en argument afin d'en retourner un unique. $tableau = array_merge_recursive($var_1, $var_2, ..., $var_N); enchane des tableaux en conservant l'ordre des lments dans le tableau rsultant. Dans le cas de cls communes, les valeurs sont places dans un tableau. true | false = array_multisort($var, critre1, critre2 [, ..., $var_N, critre1, critre2]) trie un ou plusieurs tableaux selon un ordre croissant ou dcroissant (SORT_ASC ou SORT_DESC) et selon une comparaison alphabtique, numrique ou de chane de caractres (SORT_REGULAR, SORT_NUMERIC ou SORT_STRING). $tableau = array_pad($variable, taille, valeur); recopie tout un tableau en ajustant sa taille l'argument correspondant et en bourrant d'une valeur spcifie les lments vides.
40
Principe
Peuvent tre constitues de n'importe quel caractre alphanumrique et de ponctuation, y compris les caractres spciaux
\tLa nouvelle monnaie unique, l' uro, est enfin l...\n\r
Une chane de caractres doit tre toujours entoure par des guillemets simples (')ou doubles (")
" Ceci est une chane de caractres valide." 'Ceci est une chane de caractres valide.' "Ceci est une chane de caractres invalide.'
Des caractres spciaux insrer directement dans le texte, permettent de crer directement certains effets comme des csures de lignes
Car
\car "" \t \n \r \0 \v
Code ASCII
32 9 13 10 0 11
Code hex
0x20 0x09 0x0D 0x0A 0x00 0x0B
Description
chappe un caractre spcifique. un espace simple. tabulation horizontale nouvelle ligne retour chariot caractre NUL tabulation verticale
41
chane_result = addCSlashes(chane, liste_caractres); ajoute des slashs dans une chane chane_result = addSlashes(chane); ajoute un slash devant tous les caractres spciaux. chane_result = chop(chane); supprime les espaces blancs en fin de chane. caractre = chr(nombre); retourne un caractre en mode ASCII chane_result = crypt(chane [, chane_code]) code une chane avec une base de codage. echo expression_chane; affiche l'cran une ou plusieurs chanes de caractres. $tableau = explode(dlimiteur, chane); scinde une chane en fragments l'aide d'un dlimiteur et retourne un tableau.
42
Les oprateurs les oprateurs de calcul les oprateurs d'assignation les oprateurs d'incrmentation les oprateurs de comparaison les oprateurs logiques les oprateurs bit--dit les oprateurs de rotation de bit
43
Oprateur Dnomination
+ * / =
Rsultat
oprateur d'addition Ajoute deux valeurs $x+3 oprateur de soustraction Soustrait deux valeurs $x-3 oprateur de Multiplie deux valeurs $x*3 multiplication plus: oprateur de Divise deux valeurs $x/3 division Affecte une valeur une oprateur d'affectation $x=3 variable
44
Oprateur
+= -= *= /= %= |= ^= &= .=
45
Oprateur Dnomination
++ --
Oprateur Dnomination
46
Effet
Retourne 1 si les deux bits de mme poids sont 1
Syntaxe
Rsultat
9 & 12 (1001 & 8 (1000) 1100) Retourne 1 si l'un ou l'autre des deux bits de mme 9 | 12 (1001 | 13 (1101) poids est 1 (ou les deux) 1100) Retourne 1 si l'un des deux bits de mme poids est 1 9 ^ 12 (1001 ^ 5 (0101) (mais pas les deux) 1100) Retourne 1 si le bit est 0 (et inversement) ~9 (~1001) 6 (0110)
47
Oprateur
<<
>>
Autres oprateurs
Effet
Joint deux chanes bout bout de Permet de dfinir une variable
Oprateur Dnomination
. $ -> Concatnation Rfrencement variable Proprit d'un objet
Syntaxe
"Bonjour"."Au revoir" $MaVariable = 2;
Rsultat
"BonjourAu revoir"
48
Les priorits
Priorit des oprateurs () [] -++ ! ~ * / % + < <= >= > == != & ^ | && || ? : = += -= *= /= %= <<= >>= >>>= &= ^= |= AND XOR
49
L'instruction if
if (condition ralise) { liste d'instructions } if (condition ralise) else { autre srie d'instructions } {liste d'instructions}
if (condition ralise) {liste d'instructions} elseif (autre condition ) {autre srie d'instructions } else (dernire condition ralise) { srie d'instructions }
Oprateur ternaire
50
L'instruction switch
switch (Variable) { case Valeur1: Liste d'instructions break; case Valeur1: Liste d'instructions break; case Valeurs...: Liste d'instructions break; default: Liste d'instructions break; }
51
La boucle for
La boucle while
La boucle dowhile
52
Saut inconditionnel
$x=1 while ($x<=10) { if ($x == 7) { echo "division par 0"; $x++; continue; } $a = 1/($x-7); echo "$a<br>"; $x++ }
Arrt inconditionnel
for ($x=1; $x<=10; $x++) { $a = $x-7; if ($a == 0) { echo "division par 0"; break; } echo "1/$a<br>"; }
53
func_num_args() : fournit le nombre darguments qui ont t passs lors de lappel de la fonction func_get_arg($i) : retourne la valeur de la variable situe la position $i dans la liste des arguments passs en paramtres. Ces arguments sont numrots partir de 0
54
55
Pour passer une variable par rfrence, il faut que son nom soit prcd du symbole & (exemple &$a)
<? function dire_texte($qui, &$texte){ $texte = "Bienvenue $qui";} $chaine = "Bonjour "; dire_texte("cher phpeur",$chaine); echo $chaine; // affiche "Bienvenue cher phpeur" ?>
La liaison tardive
Sous PHP3, les fonctions sont dfinies avant un premier appel Sous PHP4, les fonctions peuvent tre dfinies aprs leur premier appel
Lappel rcursif
56
Excuter une fonction dont le nom nest pas forcment connu lavance par le programmeur du script Lappel dynamique dune fonction seffectue en suivant le nom dune variable contenant le nom de la fonction par des parenthses
<?php $datejour = getdate() ; // date actuelle //rcupration des heures et minutes actuelles $heure = $datejour[hours] ; $minute=$datejour[minutes] ; function bonjour(){ global $heure; global $minute; echo "<b> BONJOUR A VOUS IL EST : ", $heure, " H ", $minute, "</b> <br />" ;} function bonsoir (){ global $heure ; global $minute ; echo "<b> BONSOIR A VOUS IL EST : ", $heure, " H ", $minute , "</ b> <br />" ;} if ($heure <= 17) {$salut = "bonjour" ; } else $salut="bonsoir" ; //appel dynamique de la fonction $salut() ; ?>
57
variables en PHP : global, static, local toute variable dclare en dehors dune fonction est globale utiliser une variable globale dans une fonction, linstruction global suivie du nom de la variable Pour conserver la valeur acquise par une variable entre deux appels de la mme fonction : linstruction static.
Les variables statiques restent locales la fonction et ne sont pas rutilisables lextrieur.
<?php function cumul ($prix) { static $cumul = 0 ; static $i = 1 ; echo "Total des achats $i = "; $cumul += $prix; $i++ ; return $cumul ; } echo cumul (175), "<br />" ;echo cumul (65), "<br />" ;echo cumul (69), "<br />" ; ?>
58
valeur = call_user_func_array(nom_fontion [, $tableau_paramtres]); appelle une fonction utilisateur avec des paramtres rassembls en tableau valeur = call_user_func(nom_fonction [, $param_1, ..., $param_N]); appelle une fonction utilisateur avec zro ou plusieurs paramtres $nom_fonction = create_function('$param_1 [, ..., $param_N]', 'return instruction...'); cre une fonction avec un ou plusieurs paramtres et un code simple valeur = func_get_arg(numro_argument); retourne un lment de la liste des arguments
59
true | false = function_exists(nom_fonction); vrifie si la fonction existe $tableau = get_defined_functions(); retourne un tableau multidimensionnel contenant la liste de toutes les fonctions dfinies dans le programme
entier = register_shutdown_function(nom_fonction); enregistre une fonction pour une excution l'extinction du script
register_tick_function(nom_fonction [, argument]); enregistre une fonction chaque vnement intervenant chaque commande de bas niveau excutes par l'analyseur dans le bloc de directive declare unregister_tick_function(); annule la fonction chaque vnement intervenant chaque commande de bas niveau excutes par l'analyseur dans le bloc de directive declare
60
<?php class client { var $nom; var $ville; var $naiss ; function age() { $jour = getdate(); $an=$jour["year"]; $age = $an - $this->naiss; echo "Il a $age ans cette anne <br />" ;}} //cration dun objet $client1 = new client() ; //affectation des proprits de lobjet $client1 -> nom = "Dupont" ; $client1-> naiss = "1961" ; $client1->ville = "Angers" ; //utilisation des proprits echo "le nom du client1 est ", $client1->nom, "<br />" ; echo "la ville du client1 est ", $client1-> ville, "<br />" ; echo "le client1 est n en ", $client1->naiss, "<br />" ; //appel de la mthode age() $client1->age() ; ?>
61
Php n'inclue pas dans sa version 4 de niveaux de visibilit des lments de la classe, il n'y a donc pas de concept d'encapsulation Instanciation de la classe
$Nom_de_l_objet->Nom_de_la_donnee_membre = Valeur;
$Nom_de_l_objet>Nom_de_la_fonction_membre(parametre1,parametre2,...); $this->age = $Age;
La variable $this
62
Lhritage
Instruction extends : class nouvelle_classe extends super_classe La nouvelle classe hrite des attributs et des mthodes appartenant la super-classe tout en dfinissant ses propres fonctions et variables.
Le langage PHP ne supporte pas l'hritage multiple
Le constructeur
Une fonction qui est appele automatiquement par la classe lors de son instanciation avec l'oprateur new Doit possder un nom identique celle de la classe Avec PHP 3, une fonction dfinie dans une classe hrite devient un constructeur si son nom est similaire celle de la nouvelle classe Avec PHP 4, une fonction constructeur ne peut tre dfinie que dans sa propre classe Avec PHP 4, lorsqu'une classe hritant d'une autre est instancie et si aucun constructeur n'est dfini dans cette classe, alors la fonction constructeur sollicite sera celle de la super-classe
63
L'oprateur ::
faire rfrence une fonction dfinie dans une super-classe partir d'une classe hritant de cette dernire appeler une fonction dfinie dans une classe avant l'instanciation de cette dernire dans le corps du programme.
class nouvelle_classe extends super_classe {function fonction() {echo "Blocs d'instructions de la fonction fonction() . " dans la nouvelle-classe."; super_classe::fonction(); } }
64
L'oprateur parent
faire rfrence des variables ou des fonctions prsentes dans la superclasse partir d'une autre classe hritant de cette dernire
class nouvelle_classe extends super_classe { function fonction() { echo "Blocs d'instructions de la fonction fonction()" . " dans la nouvelle-classe."; // se rfre la fonction fonction() de la super_classe parent::fonction(); } }
65
La sauvegarde et la relecture des objets s'effectuent respectivement par serialize et unserialize serialize permet de transformer un objet en une chane de caractres pouvant tre facilement transmise une autre page lors d'une session unserialize permet de reconstituer l'objet partir de la chane de caractres prcite
66
67
68
69
70
class nom_classe{ function __sleep() {Instructions accomplir avant serialize()...} function __wakeup() { Instructions accomplir avant unserialize()...} }
71
La fonction serialize recherche la mthode __sleep dans une classe afin de la lancer avant le processus de linarisation.
Effectuer un traitement prliminaire de l'objet dans le but de terminer proprement toutes les oprations relatives cet objet, la fermeture des connexions sur des bases de donnes, suppression des informations superflues ne ncessitant pas de sauvegarde, etc..
La fonction unserialize recherche la mthode __wakeup dans une classe afin de la lancer avant le processus de dlinarisation
Accomplir des oprations de reconstruction de l'objet en ajoutant des informations, en rouvrant des connexions vers des bases de donnes, en initialisant des actions, etc..
72
dtermination de la classe dun objet dtermination des super-classes dun objet dtermination de la prsence dune mthode dans un objet Dtermination de la prsence dune dfinition de classe Vrifie si une classe est une sous classe dune autre Retourne les mthodes dune classe dans un tableau Retourne les classes dclares dans un tableau Retourne les variables de classe dans un tableau Retourne les variables dun objet dans un tableau
73
Les noms des variables sont conus comme des mots-cls Les valeurs des variables comme les lments dun tableau associatif
<? Class ClasseTest { var $col = "#0000E0" ; var $txt= "Salut PHP" ; var $ft = "Arial" ; function ClasseTest() { echo "<FONT FACE=\ " COLOR=\"$this->col\" >$this>txt</FONT><br>;}}; $obj = new ClasseTest; Reset($obj); Foreach ($obj as $key=>$elem){ Echo "$key=>$elem<br>" ; } ?>
74
Principe
PHP prend en charge laccs au systme de fichiers du systme dexploitation du serveur Les oprations sur les fichiers concernent la cration, louverture, la suppression, la copie, la lecture et lcriture de fichiers
Les possibilits daccs au systme de fichiers du serveur sont rglementes par les diffrents droits daccs accords au propritaire, son groupe et aux autres utilisateurs
La communication entre le script PHP et le fichier est repre par une variable, indiquant l'tat du fichier et qui est passe en paramtre aux fonctions spcialises pour le manipuler
75
Ouverture de fichiers La fonction fopen() permet d'ouvrir un fichier, que ce soit pour le lire, le
crer ou y crire : entier fopen(chaine nom du fichier, chaine mode);
mode : indique le type d'opration qu'il sera possible d'effectuer sur le fichier aprs ouverture. Il s'agit d'une lettre (en ralit une chane de caractres) indiquant l'opration possible:
r (comme read) indique une ouverture en lecture seulement w (comme write) indique une ouverture en criture seulement (la fonction cre le fichier s'il n'existe pas) a (comme append) indique une ouverture en criture seulement avec ajout du contenu la fin du fichier (la fonction cre le fichier s'il n'existe pas)
lorsque le mode est suivie du caractre + celui-ci peut tre lu et crit le fait de faire suivre le mode par la lettre b entre crochets indique que le fichier est trait de faon binaire.
76
Ouverture de fichiers
Mode r w a r+ w+ a+ ouverture en lecture seulement ouverture en criture seulement (la fonction cre le fichier s'il n'existe pas) ouverture en criture seulement avec ajout du contenu la fin du fichier (la fonction cre le fichier s'il n'existe pas) ouverture en lecture et criture ouverture en lecture et criture (la fonction cre le fichier s'il n'existe pas) ouverture en lecture et criture avec ajout du contenu la fin du fichier (la fonction cre le fichier s'il n'existe pas) Description
77
Ouverture de fichiers
Exemple
$fp = fopen("fichier.txt","r"); //lecture $fp = fopen("fichier.txt","w"); fichier //criture depuis dbut du
De plus, la fonction fopen permet d'ouvrir des fichiers prsents sur le web grce leur URL.
Exemple : un script permettant de rcuprer le contenu d'une page d'un site web:
<? $fp = fopen("http://www.mondomaine.fr","r"); //lecture du fichier while (!feof($fp)) { //on parcoure toutes les lignes $page .= fgets($fp, 4096); // lecture du contenu de la ligne} ?>
78
Ouverture de fichiers
Il est gnralement utile de tester si l'ouverture de fichier s'est bien droule ainsi que d'ventuellement stopper le script PHP si cela n'est pas le cas
<? if (!$fp = fopen(fichier.txt","r")) { echo "Echec de l'ouverture du fichier"; exit;} else {// votre code;} ?>
Un fichier ouvert avec la fonction fopen() doit tre ferm, la fin de son utilisation, par la fonction fclose() en lui passant en paramtre l'entier retourn par la fonction fopen()
79
Il est possible de lire le contenu dun fichier et d'y crire des informations grce aux fonctions:
fputs() (ou lalias fwrite() ) permet d'crire une chane de caractres dans le fichier. Elle renvoie 0 en cas d'chec, 1 dans le cas contraire boolen fputs(entier Etat_du_fichier, chaine Sortie);
fgets() permet de rcuprer une ligne du fichier. Elle renvoie 0 en cas d'chec, 1 dans le cas contraire
fgets(entier Etat_du_fichier, entier Longueur); Le paramtre Longueur dsigne le nombre de caractres maximum que la fonction est sense rcuprer sur la ligne Pour rcuprer l'intgralit du contenu d'un fichier, il faut insrer la fonction fgets() dans une boucle while. On utilise la fonction feof(), fonction testant la fin du fichier.
80
<? if (!$fp = fopen("fichier.txt","r")) {echo "Echec de l'ouverture du fichier";} else { while(!feof($fp)) { // On rcupre une ligne $Ligne = fgets($fp,255); // On affiche la ligne echo $Ligne; // On stocke l'ensemble des lignes dans une variable $Fichier .= $Ligne; } fclose($fp); // On ferme le fichier} ?>
81
Pour stocker des informations dans le fichier, il faut dans un premier temps ouvrir le fichier en criture en le crant sil n'existe pas Deux choix : le mode 'w' et le mode 'a'.
<? $fp = fopen("fichier.txt","a"); // ouverture du fichier en criture fputs($fp, "\n"); // on va a la ligne fputs($fp, "$nom|$email"); // on crit le nom et email dans le fichier fclose($fp); ?>
82
is_dir() permet de savoir si le fichier dont le nom est pass en paramtre correspond un rpertoire. La fonction is_dir() renvoie 1 sil s'agit d'un rpertoire, 0 dans le cas contraire
is_executable() permet de savoir si le fichier dont le nom est pass en paramtre est excutable. La fonction is_executable() renvoie 1 si le fichier est excutable, 0 dans le cas contraire boolen is_executable(chaine Nom_du_fichier);
83
is_link() permet de savoir si le fichier dont le nom est pass en paramtre correspond un lien symbolique. La fonction is_link() renvoie 1 sil s'agit d'un lien symbolique, 0 dans le cas contraire
boolen is_link(chaine Nom_du_fichier);
is_file() permet de savoir si le fichier dont le nom est pass en paramtre ne correspond ni un rpertoire, ni un lien symbolique.
La fonction is_file() renvoie 1 sil s'agit d'un fichier, 0 dans le cas contraire boolen is_file(chaine Nom_du_fichier);
84
La fonction file() permet de retourner dans un tableau l'intgralit d'un fichier en mettant chacune de ces lignes dans un lment du tableau
Exemple : parcourir l'ensemble du tableau afin d'afficher le fichier <? $Fichier = "fichier.txt"; if (is_file($Fichier)) { if ($TabFich = file($Fichier)) { for($i = 0; $i < count($TabFich); $i++) echo $TabFich[$i];} else {echo "Le fichier ne peut tre lu...<br>";}} else {echo "Dsol le fichier n'est pas valide<br> " ?>
;}
85
La fonction fpassthru() permet d'envoyer le contenu dun fichier dans la fentre du navigateur. boolen fpassthru(entier etat);
Elle permet d'envoyer le contenu du fichier partir de la position courante dans le fichier.
Elle n'ouvre pas automatiquement un fichier. Il faut donc l'utiliser avec fopen(). Il est possible par exemple de lire quelques lignes avec fgets(), puis d'envoyer le reste au navigateur.
86
87
Le tlchargement de fichier
Le langage PHP4 dispose de plusieurs outils facilitant le tlchargement vers le serveur et la gestion des fichiers provenant d'un client Un simple formulaire comportant un champ de type file suffit au tlchargement d'un fichier qui subsquemment, devra tre trait par un script PHP adapt
<form method="POST" action="traitement.php" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="Taille_Octets"> <input type="file" name="fichier" size="30"><br> <input type="submit" name="telechargement" value="telecharger"> </form>
88
Un champ cach doit tre prsent dans le formulaire afin de spcifier une taille maximum (MAX_FILE_SIZE) pour le fichier tlcharger. Cette taille est par dfaut gale deux mgaoctets. En PHP 4, le tableau associatif global $HTTP_POST_FILES contient plusieurs informations sur le fichier tlcharg.
$HTTP_POST_FILES['fichier']['name'] : fournit le nom d'origine du fichier. $HTTP_POST_FILES['fichier']['type'] : fournit le type MIME du fichier. $HTTP_POST_FILES['fichier']['size'] : fournit la taille en octets du fichier. $HTTP_POST_FILES['fichier']['tmp_name'] : fournit le nom temporaire
du fichier.
89
PHP 3 fait appel au variable globale ou/et au tableau associatif globale $HTTP_POST_VARS condition que respectivement les options de configuration register_globals et track_vars soient actives dans le fichier php.ini.
$fichier : renvoie le nom temporaire du fichier. $fichier_name : renvoie le nom d'origine du fichier. $fichier_size : renvoie la taille en octets du fichier. $fichier_type : renvoie le type MIME du fichier. $HTTP_POST_VARS['fichier'] : fournit le nom temporaire du fichier. $HTTP_POST_VARS['fichier_name'] : fournit le nom d'origine du fichier. $HTTP_POST_VARS['fichier_type'] : fournit le type MIME du fichier. $HTTP_POST_VARS['fichier_size'] : fournit la taille en octets du fichier.
90
Le tlchargement de fichier
Par dfaut, le fichier envoy par le client est stock directement dans le rpertoire indiqu par l'option de configuration upload_tmp_dir dans le fichier php.ini.
upload_tmp_dir = c:\PHP\uploadtemp
Plusieurs fonctions spcialises permettent la validation d'un fichier tlcharg pour son utilisation ultrieure.
La fonction is_uploaded_file indique si le fichier a bien t tlcharg par la mthode HTTP POST.
$booleen=is_uploaded_file($HTTP_POST_FILES['fichier']['tmp_name']);
La fonction move_uploaded_file vrifie si le fichier a t tlcharg par la mthode HTTP POST, puis si c'est le cas le dplace vers l'emplacement spcifi.
$booleen = move_uploaded_file($HTTP_POST_FILES['fichier']['tmp_name'], "c:\\temporaire\\fichier_telecharge\\");
91
Le tlchargement de fichier
Il est possible de tlcharger plusieurs fichiers en mme temps, en utilisant des crochets la suite du nom du champ afin d'indiquer que les informations relatives aux fichiers seront stockes dans un tableau.
<form action="traitement.php" method="POST enctype="multipart/form-data"> <input type="file" name= "fichier[] ><br> ... <input type="file" name= "fichierN[] > <br> <input type="submit" value="Envoyer" name="soumission"> </form>
Les fichiers tlchargs sont automatiquement effacs du rpertoire temporaire au terme du script. il est ncessaire de dplacer les fichiers vers un autre endroit ou de les renommer si ceux-ci doivent tre conservs.
92
<?php /* Fichier : traitement.php*/ $repertoire = "f:\\PHP\\uploadtemp"; if (is_uploaded_file($HTTP_POST_FILES['fichier']['tmp_name'])) { $fichier_temp = $HTTP_POST_FILES['fichier']['tmp_name']; echo "<h3>Le fichier a t tlcharg avec succs " . " l'emplacement suivant : <br>'" . $fichier_temp . "'</h3>"; $nom_fichier = $HTTP_POST_FILES['fichier']['name']; echo "<h3>Le nom d'origine du fichier est '" . $nom_fichier . "'.</h3>"; echo "<h3>Le type du fichier est '" . $HTTP_POST_FILES['fichier']['type'] . "'.</h3>"; echo "<h3>La taille du fichier est de '" . $HTTP_POST_FILES['fichier']['size'] . " octets'.</h3>"; copy($HTTP_POST_FILES['fichier']['tmp_name'], $repertoire . $nom_fichier);} else { echo '<h3 style="color:#FF0000">ATTENTION, ce fichier peut tre l\'origine' . ' d\'une attaque : ' . $HTTP_POST_FILES['fichier']['name'] . "!</h3>";} ?>
93
Il peut tre utile de manipuler des fichiers distance, c'est--dire par le biais des protocoles de transferts HTTP ou FTP. PHP autorise l'ouverture d'un fichier par l'intermdiaire d'une adresse URL dans la fonction fopen
$id_fichier = fopen("http://www.site.com/index.html", "r");
A partir de ce moment, toutes les informations contenues dans le fichier sont accessibles en lecture seule dans une application PHP
$taille = filesize("fichier.html"); echo str_replace("<", "<", fread($id_fichier, $taille));
94
L'criture sur un fichier distant est possible, condition de passer en argument une adresse FTP la fonction fopen() et que ce fichier soit nouveau.
$id_fichier = fopen("ftp://ftp.site.com/new_page.html", "w");
L'accs en criture directement sur un site, ncessite souvent, la saisie d'un nom d'utilisateur et d'un mot de passe dans l'adresse afin d'viter toutes intrusions inopportunes
ftp://nom_utilisateur:mot_passe@ftp.site.com/nouvelle_page.html
95
96
$chaine = basename(chemin_fichier); retourne le nom du fichier partir de l'adresse du fichier spcifie. true | false = chgrp(nom_fichier, groupe_propritaire); modifie le groupe propritaire du fichier. true | false = chmod(nom_fichier, $mode); modifie le mode exprim en nombre octal, du fichier. true | false = chown(nom_fichier, propritaire); modifie le groupe propritaire du fichier.
clearstatcache(); efface la mmoire cache remplie par les fonctions lsat et stat.
true | false = copy(fichier, nouveau_fichier); copie un fichier vers une nouvelle destination.
97
delete(fichier); efface le fichier. $chaine = dirname(chemin); retourne le nom du dossier parent. $nombre = disk_free_space(dossier); retourne l'espace disponible sur le disque sur lequel est le dossier. $nombre = diskfreespace(dossier); identique disk_free_space. $nombre = disk_total_space(dossier); retourne la taille totale d'un dossier. true | false = fclose(ID_fichier); ferme un fichier indiqu par un identificateur retourn par fopen ou fsockopen. true | false = feof(ID_fichier); teste la fin du fichier.
98
nombre = chroot($chaine); dfinit la chane de caractres comme la nouvelle racine nombre = chdir($chaine); dfinit le dossier en cours comme celui prcis par la chane de caractres. $objet = dir($chaine); cre un objet partir du dossier spcifi.
99
true | false = checkdate(mois, jour, anne); vrifie la validit d'une date. $chaine = date(format [, nombre]); retourne une chane de caractres date/heure selon le format spcifi et reprsentant la date courante par dfaut. $tableau = getdate([nombre]); retourne les lments de date et d'heure dans un tableau associatif. $tableau = gettimeofday(); retourne l'heure courante dans un tableau associatif. $chaine = gmdate(format [, nombre]); retourne une chane de caractres date/heure GMT/CUT selon le format spcifi et reprsentant la date courante par dfaut. $nombre = gmmktime(heure, minute, seconde, mois, jour, anne [, 1/0]); retourne l'instant UNIX d'une date GMT spcifie et avec ventuellement une heure d'hiver
100
$chaine = gmstrftime(format [, nombre]); formate une date/heure GMT/CUT en fonction des paramtrages locaux dfinis par setlocale. $tableau = localtime([nombre][, tab_associatif]); retourne l'heure locale dans un tableau indic par dfaut ou associatif (1) $chaine = microtime(); retourne l'instant UNIX courant en secondes et microsecondes (1 janvier 1970 0H00) $nombre = mktime(heure, minute, seconde, mois, jour, anne [, 1/0]); retourne l'instant UNIX d'une date spcifie et avec ventuellement une heure d'hiver (1) $chaine = strftime(format [, instant]); formate une date/heure locale avec les options locales $nombre = time(); retourne l'instant UNIX courant
101
102
+0100).
103
104
Formulaire HTML
Retourne des informations saisies par un utilisateur vers une application serveur La cration dun formulaire ncessite la connaissance de quelques balises HTML indispensables :
Structure : un formulaire commence toujours par la balise <form> et se termine par la balise </form>
105
106
La mthode POST regroupe les informations dans l'entte d'une requte HTTP Assure une confidentialit efficace des donnes
107
Lors de la soumission, chaque lment de saisie est assimil une variable PHP dont le nom est constitu par la valeur de l'attribut name et son contenu par la valeur de l'attribut value Les tableaux associatifs $HTTP_GET_VARS et $HTTP_POST_VARS contiennent toutes les variables envoyes par un formulaire Utiliser pour rsoudre des problmes de conflit de nom de variables
108
109
110
La plupart des lments d'un formulaire n'acceptent qu'une seule et unique valeur, laquelle est affecte la variable correspondante dans le script de traitement.
$Champ_Saisie "Ceci est une chane de caractres.";
Pour des cases cocher et les listes choix multiples, plusieurs valeurs peuvent tre slectionnes entranant l'affectation d'un tableau de valeurs aux variables correspondantes.
$Case_Cocher[0] "Case radio 1"; $Case_Cocher[1] "Case radio 3";
111
Principe
Les cookies permettent de conserver des renseignements utiles sur chaque utilisateur, et de les rutiliser lors de sa prochaine visite Exemple : personnaliser la page daccueil ou les autres pages du site
un message personnel comportant par exemple son nom, la date de sa dernire visite, ou tout autre particularit.
Les cookies tant stocks sur le poste client, lidentification est immdiate et ne concernent que les renseignements qui le concernent Pour des raisons de scurit, les cookies ne peuvent tre lus que par des pages issues du serveur qui les a crs
112
Les cookies(2)
Principe
Le nombre de cookies qui peuvent tre dfinis sur le mme poste client est limit 20 et la taille de chacun est limite 4ko. Un navigateur peut stocker un maximum de 300 cookies La date dexpiration des cookies est dfinie de manire explicite par le serveur web charg de les mettre en place. Les cookies disponibles sont imports par PHP sous forme de variables identifies sous les noms utiliss par ces cookies La variable globale du serveur $HTTP_COOKIES_VARS enregistre tous les cookies qui ont t dfinis
113
Les cookies(3)
Mmorisation des paniers dans les applications de-commerce Identification des utilisateurs Des pages web individualises
Afficher des menus personnaliss Afficher des pages adaptes aux utilisateurs en fonction de leurs prcdents visites
114
Les cookies(4)
Lcriture de cookies est possible grce la fonction setcookie() il faut cette fonction ds le dbut du script avant lenvoi daucune autre information de la part du serveur vers le poste client.
Setcookie("nom_var", "valeur_var", date_expiration, "chemin", "domain", " secure") <?php setcookie (PremierCookie", Salut", time() +3600*24*7) ; if (!$PremierCookie) { echo le cookie na pas t dfini;} else { echo $premierCookie, <br>; } ?>
115
Les cookies(5)
criture de cookies
Nom_var : nom de la variable qui va stocker linformation sur le poste client et qui sera utilise pour rcuprer cette information dans la page qui lira le cookie. Cest la seule indication obligatoire pour un cookie Valeur_var : valeur stocke dans la variable. Par exemple une chane de caractres ou une variable chane, en provenance dun formulaire Date_expiration : la date laquelle le cookie ne sera plus lisible et sera effac du poste client
on utilise en gnral la date du jour, dfinie avec la fonction time() laquelle on ajoute la dure de validit dsire
Si lattribut nest pas spcifi, le cookie expire lissue de la session
116
Les cookies(6)
criture de cookies
Chemin : dfinit la destination (incluant les sous-rpertoire) laquelle le navigateur doit envoyer le cookie. Domain set : le nom du domaine partir duquel peuvent tre lus les cookies.
Secure : un nombre qui vaut 0 si la connexion nest pas scurise, sinon, il vaut 1 pour une connexion scurise
117
Les cookies(7)
Lecture de cookies
Un cookie sera automatiquement pass en paramtre au script et sa valeur sera directement accessible dans la variable $NomDuCookie.
Si celui-ci visite une des pages PHP de ce mme domaine dont le chemin est inclut dans le paramtre chemin (si le chemin est / le cookie est valide pour toutes les pages de ce site). Il faut dabord vrifier lexistence des variables dont les noms et les valeurs ont t dfinis lors de la cration du cookie.
Cette vrification seffectue grce la fonction isset($nom_var) qui renvoie true si la variable $nom_var existe et false sinon.
<?php if (isset ($nom)) { echo "<h2> Bonjour $nom </h2>" ;} else echo "pas de cookie" ; ?>
118
Les cookies(8)
Utilisation de la fonction compact() pour transformer les variables en un tableau Convertir le tableau en une chane de caractre laide de la fonction implode() Affecter la chane cre lattribut nom_cookie
<? $col="#FF0000" ; $size=24; $font="Arial" ; $text="Je suis le ookie ; $arr=compact("col" , " size" , " font" , "text" ); $val=implode(" &" , $arr); Setcookie("la_cookie" , $val, time()+600);
119
Les cookies(9)
120
Les cookies(10)
Supprimer un cookie
Il suffit de renvoyer le cookie grce la fonction setcookie() en spcifiant simplement l'argument NomDuCookie
<?php setcookie("Visites"); ?>
Une autre mthode consiste envoyer un cookie dont la date d'expiration est passe:
<?php setcookie("Visites","",time()-1 ) ?>
121
Les cookies(11)
Setcookie() doit tre utilise avant lenvoi de donnes HTML vers le navigateur Le cookie n'est pas visible avant le prochain chargement de page Avec PHP3, si plusieurs cookies sont envoyes de suite, les appels seront traits en ordre inverse, alors qu'avec PHP4 il seront traits dans l'ordre Certains navigateurs ne traitent pas bien certains cas lis aux cookies
Microsoft Internet Explorer 4 avec le Service Pack 1 ne traite pas correctement les cookies qui ont le paramtre chemin dfini Netscape Communicator 4.05 et Microsoft Internet Explorer 3.x ne traitent pas correctement les cookies qui n'ont pas les paramtres chemin et expiration dfinis.
122
Les cookies(12)
//Un script permettant de savoir si un visiteur est dj venu sur le site pendant le mois setcookie("Visites","Oui",time()+2592000,"/", " .mondomaine.fr",0); // Envoi d'un cookie qui disparaitra aprs la fermeture du navigateur SetCookie("UserSessionCookie",$login.:.$pass);
// Envoi d'un cookie qui restera prsent 24 heures SetCookie("DejaVisite","1",time()+3600*24,"/",". mondomaine.fr ",0);
// Envoi d'un cookie qui s'effacera le 1er janvier 2003 SetCookie("An2002","1",mktime(0,0,0,1,1,2003),"/",". mondomaine.fr ",0);
//script permettant de compter le nombre de visite de la page par le visiteur <?php $Visites++; setcookie("Visites",$Visites,time()+2592000,"/",". mondomaine.fr ",0);?>
123
Principe
PHP propose de nombreux outils permettant de travailler avec la plupart des SGBDR
Lorsqu'une base de donnes n'est pas directement supporte par Php, il est possible d'utiliser un driver ODBC (pilote standard) pour communiquer avec les bases de donnes Php fournit un grand choix de fonctions permettant de manipuler les bases de donnes. Quatre fonctions sont essentielles:
La fonction de connexion au serveur La fonction de choix de la base de donnes La fonction de requte La fonction de dconnexion
124
125
La connexion un SGBDR
Ce sont les paramtres (optionnels gnralement) des fonctions de connexion la base. Ces variables sont: $user : Le nom d'utilisateur $passwd : Le mot de passe $host : L'hte (ordinateur sur lequel le SGBD est install) dfaut le nom dhte est localhost $bdd : Le nom de la base de donnes
126
La connexion un SGBDR
Dclarer les variables qui vont permettre la connexion la base de donnes Il est. utile de crer un script PHP contenant les variables de connexion sous forme de variables et lier ce script aux autres scripts en utilisant linstruction include().
<? // connexion_data.php4 /* Accs au serveur de bases de donnes MySQL */ $MySql_Hot=localhost; $MySql_User=admin; $MySql_Passw=admin; ?>
127
La connexion un SGBDR
La connexion (un serveur) un systme de gestion de base de donnes s'effectue par l'entremise des fonctions spcialises
mysql_connect("nom_serveur","nom_utilisateur","mot_passe");
retourne une valeur de type Integer servant didentificateur de connexion lorsque la connexion a t tablie retourne False si une erreur se produit lors de l tablissement de la connexion
port=num_port"
sybase_connect("nom_serveur","nom_utilisateur","mot_passe");
128
La connexion un SGBDR
Les deux types de connexions sont parfaitement identiques au niveau des fonctionnalits qu'elles apportent Nanmoins, les connexions persistantes ne se referment pas automatiquement la fin du script
PHP s'assure qu'il n'existe pas un processus semblable, dj ouvert avec les noms de serveur et d'utilisateur ainsi que le mot de passe. Si tel est le cas, ce processus est rutilis sinon un nouveau est ouvert le principal avantage des connexions persistantes est leur rutilisabilit
129
La connexion un SGBDR
La dconnexion des bases de donnes s'effectue par l'intermdiaire des fonctions de fermeture
mysql_connect($id_connexion); mssql_close($id_connexion);
Plusieurs fonctions PHP permettent de retourner des informations propos de la connexion en cours
$chaine_numero_version = mysql_get_client_info(); $type_connexion = mysql_get_host_info($id_connexion); $protocole_connexion = mysql_get_proto_info($id_connexion); $chaine_version_serveur = mysql_get_server_info($id_connexion); $nom_hote = pg_host($id_connexion); $option_connexion = pg_options($id_connexion); $num_port = pg_port($id_connexion); $encodage = pg_client_encoding($id_connexion);
<html> body> <!-- Fichier : formulaire.php --> <form action="traitement.php" method="POST"> <table> <tr> <td>Nom </td> <td> <input type="text" size="20" name="nom_utilisateur"></td> </tr> <tr> <td>Mot de passe</td> <td>: <input type="password size="20" name="mot_de_passe"></td> </tr> <tr> <td>Serveur hte</td> <td> <input type="text" size="20" name="nom_serveur" value="<?php echo $SERVER_NAME ?> ></td> </tr> <tr> <td>Numro de port</td> <td> <input type="text" size="20" name="num_port" value="<?php echo $SERVER_PORT ?> ></td> </tr> <tr> <td>Nom SGBDR</td> <td> <input type="text" size="20" name="nom_sgbdr ></td> </tr> <tr> <td>Autre paramtre </td> <td> <input type="text" size="20" name="autre_param ></td> </tr> <tr> <td> </td> <td><input type="submit" name="Soumission value="Soumettre"> </td></tr> </table> </form> </body></html>
130
131
132
if ($param_sup == "")
$id_connexion = odbc_connect($hote, $utilisateur, $mot_passe); else $id_connexion = odbc_connect($hote, $utilisateur, $mot_passe, $param_sup); } case "Oracle" : { $id_connexion = ocilogon($utilisateur, $mot_passe); } case "PostgreSQL" : { $chaine_connexion = "host=" . $hote . " "; if ($port != "") $chaine_connexion .= "port=" . $port . " "; $chaine_connexion .= "user=" . $utilisateur ." password=" . $mot_passe"; if ($param_sup != "") $chaine_connexion .= " ".$param_sup; $id_connexion = pg_connect($chaine_connexion); } case "Sybase" : { if ($param_sup == "") $id_connexion = sybase_connect($hote, $utilisateur, $mot_passe); else $id_connexion = sybase_connect($hote, $utilisateur, $mot_passe, $param_sup); } default : { echo ("Le SGBDR " . $sgbdr . " n'est pas gr."); return false; } } return true; } } connexion($nom_sgbdr, $nom_serveur, $num_port, $nom_utilisateur, $mot_de_passe, $autre_param); ?>
133
Suite la connexion un SGBDR, il faut soit slectionner la base de donnes si elle existe dj, soit la crer. La slection de bases de donnes s'effectue par des fonctions adaptes :
msql_select_db($nom_base_donnee,$id_connexion); mysql_select_db($nom_base_donnee,$id_connexion); sybase_select_db($nom_base_donnee,$id_connexion); pg_connect( "dbname=nom_base " . "host=nom_serveur ". "port=num_port " . "user=nom_utilisateur " ."password=mot_passe");
La cration des bases de donnes peut tre ralise par des fonctions PHP dvolues cette tche
134
135
Si la cration d'une base de donnes n'est pas possible l'aide de fonctions, il est possible de crer une base l'aide d'une requte SQL.
$requete = "CREATE DATABASE nom_base_donnee"; $id_requete = ociparse($requete, $id_connexion); ociexecute($id_requete);
La suppression des bases de donnes est permise, de la mme faon qu'il est possible de les crer.
136
Certaines fonctions permettent de retourner la liste des bases de donnes et de leurs tables.
$id_connexion = mysql_connect('localhost', 'administrateur', 'md2N50Oml'); $liste_bases = mysql_list_dbs($id_connexion ); $nb_bases = mysql_num_rows($liste_bases); echo "<h3>Liste des bases de donnes</h3>"; for($i = 0; $i < $nb_bases; $i++){ $nom_base_donnee = mysql_db_name($liste_bases, $i) . "<br>"; $liste_tables = mysql_list_tables($nom_base_donnee, $id_connexion); $nb_tables = mysql_num_rows($liste_tables); echo "<h3>" . $nom_base_donnee . "</h3>"; echo "<h4>Liste des tables :</h4>"; for($j = 0; $j < $nb_tables; $j++) { echo mysql_tablename($liste_tables, $j) . "<br>"; } }
137
Les requtes doivent rpondre la syntaxe SQL en gnral et ventuellement aux singularits des diffrents diteurs de SGBDR. Les requtes SQL permettent d'accomplir une action sur une base de donnes comme la slection d'informations, la cration de tables, l'ajout, la suppression ou la modification des enregistrements. Les requtes SQL sont envoyes la base de donnes dfinie par un identificateur de connexion
$requete = "SELECT * FROM table WHERE champ = \"valeur\""; $id_resultat = mssql_query($requete, $id_connexion); $id_resultat1 = mysql_query($requete, $id_connexion);
138
$requete =
"CREATE TABLE tbl_nom (" ."nom_champ1 INTEGER PRIMARY KEY," . "nom_champ2 CHAR(50) UNIQUE," . "nom_champ3 DATETIME)"; "INSERT INTO tbl_nom " . "(nom_champ1, nom_champ2,.nom_champ3) " . "VALUES('valeur','valeur2','valeur3')"; "SELECT * FROM tbl_nom " . "WHERE nom_champ2 = 'valeur'"; "DELETE FROM tbl_nom " . "WHERE nom_champ3 < SYSDATE - 7";
$requete =
$requete =
$requete =
139
La variable contenant l'ensemble des enregistrements retourns par une requte n'est pas exploitable telle quelle.
On utilise la fonction mysql_fetch_row(), qui dcoupe les lignes
de rsultat en colonnes (par exemple Nom,adresse,...) et les affecte une variable tableau dans l'ordre o elles arrivent.
Exemple: une table appele liens contenant le nom et l'URL de sites internet. rcuprer l'ensemble des enregistrements et de les afficher dans un tableau
140
141
142
Certaines instructions permettent de rcuprer diverses informations propos des champs d'une table rsultant d'une requte SQL.
Le nom d'un champ peut tre retourn par l'intermdiaire de certaines fonctions.
$nom = msql_fieldname($id_resultat, $num_champ); $nom = mysql_field_name($id_resultat, $num_champ); $nom = ociColumnName($id_resultat, $num_champ); $nom = pg_FieldName($id_resultat, $num_champ);
143
D'autres proprits peuvent tre recueillies par des instructions relatives certains gestionnaires de bases de donnes
// nom de la table parente de la colonne $nom_table = mssql_fieldtable($id_resultat, $num_champ); $nom_table = msql_tablename($id_resultat, $num_champ); $nom_table = mysql_field_table($id_resultat, $num_champ); $nom_table = mysql_tablename($id_resultat, $num_champ); // smaphore du champ comme NOT NULL, PRIMARY KEY $semaphore = msql_fieldflags($id_resultat, $num_champ); $semaphore = mysql_field_flags($id_resultat, $num_champ);
144
145
Le dcompte total des enregistrements ou des champs d'une table, peut tre obtenu par l'intermdiaire de certaines fonctions
$nb_champs = msql_num_fields($id_resultat); $nb_lignes = msql_num_rows($id_resultat); $nb_champs = mysql_num_fields($id_resultat); $nb_lignes = mysql_num_rows($id_resultat); $nb_champs = ociNumCols($id_resultat); $nb_lignes = ociRowCount($id_resultat);
146
A partir des enregistrements, chacun des champs devient accessible aisment par des fonctions appropries. Certaines fonctions sont capables d'extraire directement un champ dtermin
$valeur = mssql_result($id_resultat, $num_ligne, $num_col) $valeur = msql_result($id_resultat, $num_ligne, $num_col); $valeur = mysql_result($id_resultat, $num_ligne, $num_col); $valeur = pg_result($id_resultat, $num_ligne, $num_col); $valeur = sybase_result($id_resultat, $num_ligne, $num_col);
Afin d'viter une surcharge de la suite au terme de leur utilisation. mmoire, des instructions PHP permettent de librer les ressources
mssql_free_result($id_resultat); msql_free_result($id_resultat); mysql_free_result($id_resultat); sybase_free_result($id_resultat);
147
Les erreurs gnres par la plupart des SGBDR ne sont plus traites comme des alertes. Elles sont stockes et disponibles partir d'une fonction spcifique Il est possible d'interrompre le script afin d'viter les erreurs en cascade. Deux mthodes permettent d'effectuer cette opration
$connect = mysql_connect($host,$user,$password);
L'utilisation de la fonction die() en cas d'erreur d'excution. Si la fonction retourne la valeur 0 (c'est--dire s'il y a une erreur) la fonction die() renvoie un message d'erreur.
mysql_connect($host,$user,$password) or die("erreur de connexion au serveur $host"); En gnral, deux fonctions PHP retournent respectivement le numro et le message de l'erreur en cours. Certains SGBDR ne grent que le message d'erreur tels que PostgreSQL et Sybase.
148
149
150
151
152
MySql sappuie sur le standard ANSI SQL92 Par rapport au standard ANSI SQL92, il manque les instructions SELECT imbriques Par rapport au standard ANSI SQL92, il dispose dun certain nombre de fonctions additionnelles (comparaison de chanes, expressions rgulires, arithmtique sur les dates) Le cur du systme MySql affiche une performance remarquable, tout particulirement dans les accs indexs
MySql utilise une architecture multiutilisateur, multitraitement Permet dtablir des connexions rapides et dutiliser la mme mmoire cache pour plusieurs requtes
153
Notes entre des guillemets simples Notes entre des guillemets doubles dans le cas o la base utilise le mode ANSI Les squences dchappement
\0 \n \t \r \b \ \" \\ % \_ ASCII 0 (NUL) Saut de ligne. Correspond au caractre ASCII CHR(13) Tabulation. Correspond au caractre ASCII CHR(9) Retour chariot. Correspond au caractre ASCII CHR(10) Retour caractre Guillemet simple Guillemet double Barre oblique inverse Pourcentage caractre soulign
154
Syntaxe et conventions
Les nombres
155
Syntaxe et conventions
Les variables
Les variables peuvent contenir des nombres entiers, des nombres rels ou des chanes de caractres
Les noms des variables peuvent comporter des caractres alphanumriques ainsi que les caractres spciaux . et _.
Il nest pas ncessaire dinitialiser les variables, qui possde par dfaut la valeur NULL
Syntaxe de Dfinition de variables
SET @variable={integer | real |string} [,@variable=] ou @variable:=expression
MySql connat les types de donnes numriques, de date et dheure ainsi que chanes
156
Les types de donnes numriques M : nombre maximal de chiffres affichs U (Unsigned) :le caractre de signe est omis Z(Zerofill) : les valeurs manquantes sont sont remplies par NULL D : le nombre de dcimales affiches pour les virgule flottante
: : : : : : : : : trs petit nombre entier petit nombre entier nombre entier myen nombre entier normal synonyme de INT grand nombre entier nombre virgule flottante sign petit nombre virgule flottante sign petit nombre virgule flottante normal, double prcision, sign : synonyme de double : synonyme de double : nombre virgule flottante sign : synonyme de DECIMAL
TINYINT[(M)] [UNSIGNED] [ZEROFILL] SMALLINT[(M)] [UNSIGNED] [ZEROFILL] MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] INT[(M)] [UNSIGNED] [ZEROFILL] INTEGER[(M)] [UNSIGNED] [ZEROFILL] BIGINT[(M)] [UNSIGNED] [ZEROFILL] FLOAT(prcision) [ZEROFILL] FLOAT[(M,D)] [ZEROFILL] DOUBLE[(M,D)] [ZEROFILL] DOUBLE prcision[(M,D)] [ZEROFILL] REAL[(M,D)] [ZEROFILL] DECIMAL[(M[,D])] [ZEROFILL] NUMERIC(M,D) [ZEROFILL]
157
DATE : Date DATETIME : Date et heure TIMESTAMP[(M)] : Tampon horaire UNIX TIME : Heure YEAR[(2|4)] : Anne
158
SET('value1','value2',...)
159
Les oprateurs arithmtiques +, -, *, / Les oprateurs logiques NOT (!), OR(||), AND(&&) Les oprateurs de comparaison =, <> (!=), <=, <, >=, > Select NomArt, PrixArt AS Prix, PrixArt * 0.196 AS TVA PrixArt / 10 as Marge From article as A, groupeArticle as G Where A.NumGrArt=G.NumGrArt And ( G.NumGrArt<>1 OR Not (A.type = 2))
160
DDL : langage de dfinition de donnes Dfinition de tables et de domaine de valeurs DML : langage de manipulation de donnes Modification et slection denregistrement dans les tables DCL : langage de contrle de donnes
Contrle des accs aux objets et aux oprations, contrle des transactions
161
Cration, suppression et utilisation dune base de donnes Cration de bases de donnes CREATE DATABASE nom_bd
162
CREATE TABLE : permet de crer une nouvelle table dans la base de donnes courante
Sybtaxe :
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition, )) [table_options] [select_statement] Create_definition : Col_name type [NOT NULL|NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition] OU PRMARY KEY (index_col_name, ) OU KEY [index_name](index_col_name, ) OU INDEX [index_name](index_col_name, ) OU UNIQUE [INDEX] [index_name] (index_col_name, ) OU [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name) OU [reference_definition] OU CHECK (expr)
163
CREATE TABLE : permet de crer une nouvelle table dans la base de donnes courante Syntaxe : Lattribut AUTO_INCREMENT : signifie que le contenu dun champ de type INTEGER est incrment automatiquement dune unit aprs linsertion dun nouvel enregistrement. Ne peut tre affect quune seule fois une table donne Lattribut PRIMARY_KEY : dfinit une cl dindex primaire unique Chaque table peut comporter au maximum une cl dindex primaire. Une cl dindex primaire peut tre forme partir dune combinaison dun maximum de 32 colonnes Les colonnes dune cl dindex primaire doivent tre dfinies avec le paramtre NOT NULL
164
Syntaxe : Lattribut UNIQUE_KEY : dfinit une cl dindex. Elle ne peut comporter que des valeurs uniques. Lattribut INDEX : dfinit un index. Les champs TEXT et BLOB ne peuvent pas tre indexs Les cls trangres : ne sont pas encore prises en charge par MySQL
165
Cration dune Table Exemple: CREATE TABLE article ( NumArt BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, numCde VARCHAR(25) NOT NULL, NomART VARCHAR(100) NOT NULL, TexteArt MEDIUMTEXT NOT NULL, PrixArt DECIMAL(8,2) NOT NULL NumGrArt BIGINT NOT NULL, NumSGrArt BIGINT NOT NULL, );
166
Modifier la structure dune table existante ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec] Alter_specification
ADD [COLUMN] create_definition [FIRST | AFTER column_name] ADD PRIMARY KEY (index_col_name, ) ADD UNIQUE [index_name] (index_col_name, ) CHANGE [COLUMN] old_col_name create_definition MODIFY [COLUMN] create_definition DROP [COLUMN] col_name DROP PRIMARY KEY DROP INDEX index_name RENAME [AS] new_tbl_name Table_options OU OU OU OU OU OU OU OU OU
167
INSERT INTO article (NumCde, NomArt, TexteArt, PrixArt, NumGrArt, NumSGrart) VALUES (1-001-001-001, articl1, cest un article, 7.95, 1, 1);
Remplacer un enregistrement
Un ancien enregistrement dans la table, qui a la mme valeur quun nouvel enregistrement pour une cl, est supprim de la table avant dinsrer un nouvel enregistrement
REPLACE INTO article (NumCde, NomArt, TexteArt, PrixArt, NumGrArt, NumSGrart) VALUES (1-999-999-999, articl1, cest un autre artcile, 12, 1, 1)
168
LOAD DATA LOCAL INFILE c:/apache/www3_docs/donnees.txt INTO TABLE article FIELDS TERMINATED BY , (NUMcde, NomArt, TexteArt, PrixArt, NumGrArt, NumSGrArt);
Les donnes figurent dans le fichier donnees.txt Les donnes sont spares par des virgules Les donnes ont \n comme caractre de fin de ligne Le mot cl LOCAL indique que le fichier de donnes se trouve sur lhte client dans le rpertoire spcifi.
169
Slection denregistrement
Syntaxe
SELECT [DISTINCT|ALL] expression_de_selection
FROM tebles WHERE expression_where GROUP BY col_name, ] HAVING where_definition] [ORDER BY [ASC|DESC]]
Exemples SELECT * FROM article WHERE PrixArt > 50 SELECT NumGrArt, AVG(PrixArt) FROM article GROUP BY NumArt
170
171
172
173
174
Les sessions(1)
Principe
Est un mcanisme permettant de mettre en relation les diffrentes requtes du mme client sur une priode de temps donne. Les sessions permettent de conserver des informations relatives un utilisateur lors de son parcours sur un site web Des donnes spcifiques un visiteur pourront tre transmises de page en page afin d'adapter personnellement les rponses d'une application PHP Chaque visiteur en se connectant un site reoit un numro d'identification dnomm identifiant de session (SID) La fonction session_start() se charge de gnrer automatiquement cet identifiant unique de session et de crer un rpertoire. Elle doit tre place au dbut de chaque page afin de dmarrer ou de continuer une session.
<?php session_start(); $Session_ID = session_id(); // $Session_ID = 7edf48ca359ee24dbc5b3f6ed2557e90
?>
175
Les sessions(2)
Principe
Un rpertoire est cr sur le serveur l'emplacement dsign par le fichier de configuration php.ini, afin de recueillir les donnes de la nouvelle session.
[Session] session.save_path= C:\PHP\sessiondata ; Rp session = \sess_7edf48ca359ee24dbc5b3f6ed2557e90
Le fichier php.ini peut galement prciser un nom de session par l'option session.name ou sa dure de vie par session.gc_maxlifetime La session en cours peut tre dtruite par session_destroy(). Cette commande supprime informations relatives l'utilisateur.
session_destroy();
176
Les sessions(3)
Les variables de session sont charges dans une session par l'intermdiaire de la fonction session_register() <?php session_start(); session_register("nom_variable"); ... session_register("nom_variableN"); ?>
177
Les sessions(4)
Deux options de configuration dterminent le traitement des variables d'une session dans une application PHP
Si l'option de configuration track_vars est active et register_globals dsactive, les variables de la session seront disponibles seulement partir du tableau associatif global $HTTP_STATE_VARS
session_register("nom_variable");
...
echo $HTTP_SESSION_VARS["nom_variable"];
Si l'option de configuration register_globals est active, les variables de la session seront disponibles partir des variables globales correspondantes.
session_register("nom_variable");
...
echo $nom_variable;
Si les options track_vars et register_globals sont actives, les variables globales et $HTTP_STATE_VARS contiendront les valeurs des variables de la session en cours.
178
Les sessions(5)
Le transport des informations entre les documents est ralis par l'entremise soit d'un cookie, soit d'une requte HTTP
La dernire solution est la plus fiable puisque les cookies peuvent ne pas tre accepts par le client ou celui-ci pourrait les dtruire en cours de session.
Il suffit de concatner l'identifiant de session l'adresse URL de la page cible pour que cette dernire puisse accder aux informations conserves par la session. echo '<a href= http://www.site.com/doc.php? . session_name(). = . session_id().> lien</a>
Si la directive de compilation enable-trans-sid est active, il sera possible de ne pas ajouter l'identifiant de session l'adresse URL pointe. Pour savoir si cela est le cas, il suffit de rechercher la directive dans la page rsultant de la fonction phpinfo.
179
Les sessions(6)
Par dfaut, PHP tente de passer par les cookies pour sauvegarder l'identifiant de session dans le cas o le client les accepterait. Pour viter cela, il suffit de dsactiver l'option de configuration session.use_cookies dans le fichier php.ini.
[Session] session.use_cookies 0; //dsactive la gestion des sessions par cookie
180
Les sessions(7)
Exemple
<!-- Fichier : formulaire.html --> <html><body> <form method="post" action="traitement.php"> <table border="0"> <tr> <td><u>Nom :</u></td> <td><input type="text" name="Nom" size="20" value="RIVES"></td></tr> <tr> <td><u>Prnom :</u></td> <td><input type="text" name="Prenom" size="20" value="Jean-Pierre"></td></tr> <tr> <td><u>eMail :</u></td> <td><input type="text" name="cEmail" size="20" value=du@du.com"></td></tr> <tr><td> </td> <td><input type="submit" name="soumettre" value="Envoyer"></td></tr></table> </form> </body </html>
Les sessions(8)
181
<!-- Fichier : traitement.php --> <? session_start(); $nom = $cNom; $prenom = $cPrenom; $email = $cEmail; session_register("nom"); session_register("prenom"); session_register("email"); header("Location: session.php?" . session_name() . "=" . session_id()); ?>
182
Les sessions(9)
<!-- Fichier : session.php --> <html> <body> <? session_start(); echo("<u>Identifiant de session :</u> <b>" . session_id() . "</b><br>"); echo("<u>Nom de la session :</u> <b>" . session_name() . "</b><br><br>"); echo("<u>Nom :</u> <b>". $nom . "</b><br>"); echo("<u>Prnom :</u> <b>" . $prenom . "</b><br>"); echo("<u>eMail :</u> <b>" . $email . "</b><br>"); session_destroy(); ?> </body> </html>
183
session_start() -- Initialise les donnes de session session_id() -- Affecte et/ou retourne l'identifiant de session courante session_name() -- Affecte et/ou retourne le nom de la session courante session_register() -- Enregistre une variable dans la session courante session_destroy() -- Dtruit toutes les donnes enregistres d'une session session_is_registered() -- Indique si une variable a t enregistre dans la session ou pas session_unregister() -- Supprime une variable dans la session courante session_unset() -- Dtruit toutes les variables de session
184
Crer un rpertoire
Lui donner les droits d'criture pour tous En spcifier le chemin dans le php.ini
Il faut s'assurer que le PHP est bien autoris a crer des sessions. C'est juste un paramtre activer. Faire un phpinfo() pour voir ces paramtres. La commande phpinfo() se contente d'afficher dans le navigateur le contenu du fichier de configuration php.ini.
185
Ce qu'il ne faut pas faire : <html> <body> <?php session_start(); ... ceci non plus : <?php echo "<html>"; ... session_start();
186
Principe
Le langage PHP dispose de plusieurs outils permettant de grer les connexions des utilisateurs sur un site web
Il existe trois tats possibles en ce qui concerne le statut des connexions. 1. NORMAL : signifie que la connexion est ouverte et le script est en cours d'excution. 2. ABORTED : signifie que le client a annul la connexion et le script est arrt par dfaut. 3. TIMEOUT : signifie que le script a provoqu une dconnexion due la fin de la dure d'excution convenue.
Les deux tats ABORTED et TIMEOUT peuvent survenir en mme temps dans le cas ou d'une part si PHP est configur de telle sorte ignorer les dconnexions et d'autre part lorsque le script arrive expiration
187
Principe
Le langage PHP dispose de plusieurs outils permettant de grer les connexions des utilisateurs sur un site web
L'tat ABORTED en principe interrompt logiquement le script ds que l'utilisateur se dconnecte du site. Toutefois, il est possible de modifier ce comportement en activant l'option de configuration ignore_user_abort dans le fichier php.ini. Si une fonction de fermeture a t enregistre avec l'instruction register_shutdown_function, le moteur de script se rendra compte aprs que le client se soit dconnect puis lors de la prochaine excution du script que celui ci n'est pas termin, ce qui provoquera l'appel de la fonction de fermeture mettant fin au script. Lorsque le script se termine normalement, cette fonction sera galement appele.
188
Principe
L'instruction connection_aborted permet d'excuter une fonction spcifique la dconnexion d'un client. Si la dconnexion est effective, la fonction connection_aborted retourne true. Un script expire par dfaut aprs une dure de 30 secondes. Nanmoins, ce temps peut tre modifi par l'intermdiaire de l'option de configuration max_execution_time dans le fichier php.ini. Une fonction se chargeant de terminer le script sera appele si le dlai arrive expiration ou si le client se dconnecte. Les fonctions connection_timeout, connection_aborted et connection_status permettent respectivement de vrifier si l'tat de la connexion est ABORTED, TIMEOUT et les trois tats possibles.
189
190
Principe
Les enttes sont des informations envoyes lors de chaque change par le protocole HTTP entre un navigateur et un serveur Informations sur les donnes envoyer dans le cas d'une requte Permettent aussi d'effectuer des actions sur le navigateur comme le transfert de cookies ou bien une redirection vers une autre page Ce sont les premires informations envoyes au navigateur (pour une rponse) ou au serveur (dans le cas d'une requte),
elles se prsentent sous la forme: en-tte: valeur
la syntaxe doit tre rigoureusement respecte aucun espace ne doit figurer entre le nom de l'en-tte et les deux points (:). Un espace doit par contre figurer aprs celui-ci
191
Principe
PHP fournit une fonction permettant d'envoyer des en-tte HTTP manuellement du serveur au navigateur
La fonction header() doit tre utilise avant tout envoi de donnes HTML au navigateur
Exemples
<? header("Content-Type: image/gif"); imagegif($image); // envoi de l'image au navigateur // code gnrant l'image ?>
192
Alors que la fonction header() permet d'envoyer des en-ttes HTTP au navigateur, PHP fournit une seconde fonction permettant de rcuprer dans un tableau l'ensemble des en-ttes HTTP envoyes par le navigateur Tableau getallheaders();
Le tableau retourn par la fonction contient les en-ttes indexs par leur nom Exemple : un script permettant par exemple de rcuprer des en-ttes particuliers.
<? $entetes = getallheaders; echo $entetes["location"]; ?>
193
header(chane); envoie une entte HTTP avant toute commande PHP. true | false = headers_sent(); vrifie si les enttes HTTP ont bien t envoys setcookie(nom, valeur [, date_expiration [, chemin [, domaine [, scurisation]]]]); envoie un cookie.
194
Mail (1)
La fonction mail envoie un message lectronique. Syntaxe : mail($recipient, $subject, $message[, $headers, $params]);
Exemple : $message = "Bonjour, ceci est mon message.; $objet ="Bonjour" mail(info@aricia.fr, $objet, $message);
Cette fonction ne marche que si un programme de messagerie lectronique (appel mailer ) est pralablement install sur le serveur.
195
Mail (2)
<?php $recipient = Tony <tony@tony.com>, ; $recipient .= Peter <peter@peter.net>; $subject = Notre rendez-vous; $message = Je vous propose le samedi 15 juin \n; $message .= --\r\n; // Dlimiteur de signature $message .= Hugo; $headers = From: Hugo <hugo@hugo.com>\n; $headers .= Content-Type: text/html; charset=iso-8859-1\n ; $headers .= Cc: bruno@aricia.fr\n; mail($recipient, $subject, $message, $headers); ?>
196
veiller limiter au strict ncessaire les droits et permissions de l'utilisateur : il vaut mieux l'entendre se plaindre de son manque de libert plutt
que de constater les dgts causs par une trop grande libralit (principe universel)
ne jamais faire confiance aux donnes transmises par l'utilisateur (encore moins l'internaute !)
SQL Injection
Javascript injection
toujours tester l'existence / la validit d'un fichier / code inclure : et s'il n'tait pas celui que vous croyiez ? Regarder rgulirement les fichiers journaux (logs) Mettre des alarmes dans votre code, aux endroits stratgiques (authentification), envoyes par mail ou stockes dans une base de donnes
197
un contrle des donnes ct client est bien pratique, mais illusoire : quoi de plus simple que de dsactiver Javascript ? Seul un contrle ct serveur peut prtendre tre efficace. prfrer, quand cela est possible, la mthode POST la mthode GET : les variables dans l'url, a fait mauvais genre ne pas confondre complexit et scurit : si votre systme de scurit vous chappe, considrez que vous n'tes pas en scurit. De toute faon, vous n'tes jamais en scurit. s'efforcer de tenir jour systme serveur et interprteur PHP avec les dernires versions stables : quand la catastrophe aura eu lieu, ce sera a de moins vous reprocher...
198
Masquer PHP
Configurer le serveur webpour qu'il utilise plusieurs extensions de fichiers avec PHP Vous pouvez utiliser des informations droutantes comme ceci :
# Faire que le code PHP ressemble un autre langage AddType application/x-httpd-php .asp .py .pl
# Faire que le code PHP ressemble un autre langage qui n'existe pas AddType application/x-httpd-php .bop .foo .133t
Cela a un lger impact ngatif sur les performances gnrales, car tous les fichiers HTML seront aussi analyss et traits par le moteur PHP : Utiliser le type html pour les extensions PHP # Faire que le code PHP ressemble du html AddType application/x-httpd-php .htm .html
199
PHP ne se limite pas la gnration de pages HTML Il peut aussi servir crer et manipuler dautres types de documents Notamment des images, au travers dans un grand choix de formats, comme GIF , PNG , JPEG , WBMP PHP peut mme gnrer directement des images pour le navigateur, avec la bibliothque GD . GD et PHP auront aussi besoin d'autres bibliothques, en fonction des formats que vous souhaitez utiliser. Vous pouvez utiliser les fonctions PHP pour obtenir les tailles des images aux formats JPEG , GIF , PNG , SWF, TIFF et JPEG2000 .
200
201
Chargement dimages depuis des fichiers existants imagecreatefromgif ( string filename ) imagecreatefromjpeg ( string filename ) imagecreatefrompng ( string filename ) imagecreatefromwbmp ( string filename ) imagecreatefromstring ( string filename ) le type est automatiquement dtect Cration dune image vierge imagecreate ( int x_size , int y_size ) imagecreatetruecolor ( int x_size , int y_size )
202
Redimensionnement
int imagecopyresized ( resource dst_image , resource src_image , int dst_x , int dst_y , int src_x , int src_y , int dst_w , int dst_h , int src_w , int src_h ) imagecopyresized copie une partie rectangulaire d'une image dans une autre image. Si les dimensions de la source et de la destination ne sont pas gales, un tirement adquat est effectu pour faire correspondre bool imagecopyresampled ( resource dst_image , resource src_image , int dst_x , int dst_y , int src_x , int src_y , int dst_w , int dst_h , int src_w , int src_h ) copie une zone rectangulaire de l'image src_im vers l'image dst_im . Durant la copie, la zone est rchantillonne de manire conserver la clart de l'image . Cette fonction retourne TRUE en cas de succs, FALSE en cas d'chec.
203
Dessiner sur une image imagechar ( resource image , int font , int x , int y , string c , int color ) imagecharup ( resource image , int font , int x , int y , string c , int color ) imagearc ( resource image , int cx , int cy , int w , int h , int s , int e , int color )