Download - Cours Web php
1
SOMMAIRE
• Vue d’ensemble de PHP
• Structure de base
• Prog. Orientée Objet
• Formulaires et Superglobales
• Ressources et Supports de données
• Cockies et Sessions
• Modélisation UML pour PHP
• XML et PHP
• Sécurité
• Frameworks
Ressources d’aide francophones
• L’Afup (Association française des utilisateurs de PHP) est une association dont le
principal objectif est de promouvoir le langage PHP auprès des professionnels. (site
Internet : http://www.afup.org).
2
Références
PHPFrance.com
• PHPFrance est l’espace avec lequel de nombreux développeurs PHP d’aujourd’hui
se sont formés il y a quelques années. (site Internet : http://www.phpfrance.com).
3
Références
PHPIndex.com
• PHPIndex est l’un des sites pionniers français sur le PHP. Ce portail propose de
nombreuses ressources et informations sur des sujets pointus (site Internet :
http://www.phpindex.com).
4
Références
PHPScripts-fr.net
• PHPScripts offre de nombreuses ressources sur le PHP. Son principal atout est son
annuaire de scripts. Il contient des ressources dans tous les domaines :
administration de base de données, agenda, annuaire, authentification, etc.
• site Internet : http://www.phpscripts-fr.net).
5
Références
PHP Solutions
• PHP Solutions est un magazine papier dédié à PHP et MySQL. Il rassemble de
nombreux articles intéressants en français. D’origine polonaise, le magazine est
traduit dans de nombreuses langues (site Internet : http://www.phpsolmag.org).
6
Références
7
Références
8
Références
9
Références
10
Références
Eclipse
• L’éditeur Eclipse accompagné du plug-in PHP Eclipse constitue une des solutions les
plus complètes à disposition des développeurs de projets de grande taille.
• http://www.phpeclipse.de
Zend Studio
• Un éditeur similaire à Eclipse, également écrit en Java par la société Zend
Technologies.
• http://www.zend.com/store/products/zend-studio/
Maguma Open Studio/Maguma Studio
• Un bon éditeur, qui existe maintenant en deux versions, une open-source et une
commerciale.
• http://www.maguma.com
Komodo Professional
• Komodo est un éditeur stable, qui possède une interface agréable et intuitive
• http://www.activestate.com/Products/Komodo/
PHPEdit
• PHPEdit est un bon éditeur commercial spécialisé pour PHP.
• http://www.waterproof.fr11
Editeurs
12
Documentation en ligne
• Pour obtenir en ligne toute la documentation officielle
(en français) sur une commande, tapez l’URL suivante
dans la barre d’adresse de votre navigateur Internet :
• http://fr.php.net/
• Et rajouter en fin d’URL le nom de la commande.
• Exemple :
• http://fr.php.net/echo
13
support
public/www
index.html
Le répertoire
3
2
Serveur http
1
4
client
Comment ça fonctionne sans PHP
14
public/www
Module PHP3
2
1
4
fichier.php
Fichier_bis.php
Serveur http
client
SGBD
MySQL
Génération
du code html
Comment ça fonctionne avec PHP/MySQL
15
• Il existe différents serveurs http
– Apache
• http://httpd.apache.org
– IIS
• www.microsoft.com
– Information sur le protocole http
• www.w3.org/Protocols/
• Echange d’information entre serveur et clients
– Pour echanger des informations entre le serveur et, les clients on
utilise le protocole HTTP (ensemble de règles de codes).
– Nestcape Navigator, Microsoft Internet Explorer, lynx, iCab, …
Serveur http
16
PHP est un langage interprété (un langage de script) exécuté du côté serveur (comme les scripts CGI, ASP, ...) et non du côté client (un script écrit en Javascript ou une applet Java s'exécute sur votre ordinateur...). La syntaxe du langage provient de celles du langage C, du Perl et de Java. Ses principaux atouts sont:
Une grande communauté de développeurs partageant des centaines de milliers d'exemples de script PHP
La gratuité et la disponibilité du code source (PHP 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 (contrairement aux scripts CGi, pour lesquels il faut écrire des lignes de code pour afficher chaque ligne en langage HTML)
La simplicité d'interfaçage avec des bases de données (de nombreux SGBD sont supportés, mais le plus utilisé avec ce langage est MySQL, un SGBD gratuit disponible sur de nombreuses plateformes : Unix, Linux, Windows, MacOs X, Solaris, etc...)
L'intégration au sein de nombreux serveurs web (Apache, Microsoft IIS, etc.).
Introduction
H. Mouncif, Dep. Info.FSAC 2005 Notes de cours : Technologies du web
17
Pourquoi EasyPHP?
Seul un serveur web peut générer le PHP. Le client ne
peut pas interpréter les scripts PHP.
Il va donc falloir trouver un moyen pour compiler les
scripts PHP localement. Vous pourrez alors travailler
dessus pour réaliser votre site en PHP.
EasyPHP est en fait un "package" qui contient tous les
programmes nécessaires pour pouvoir traiter du PHP !
Le site web de EasyPHP est : www.easyphp.org
Serveur Web locale: EasyPHP
18
voici les programmes qu'installe EasyPHP :
• Apache : c'est le programme qu'utilisent les serveurs. Il permet au serveur de distribuer des pages web... mais il ne connaît que le HTML !
• PHP : PHP est comme un "plugin" de Apache. Il a besoin d'Apache pour fonctionner, et grâce à lui Apache saura travailler sur des pages PHP. En clair, Apache + PHP = un serveur PHP
• MySQL : c'est un SGBD(OPEN) pour la gestions des bases de données.
• PHPmyAdmin : Interface utilisateur qui permette de faciliter la gestion des bases de données.
Serveur Web locale: EasyPHP
19
Installez le programme qui se trouve dans le ZIP, comme vous le feriez pour n'importe quel autre programme. A la fin, on vous proposera deux options. Moi tout ce que je vous demande c'est de lancer EasyPHP, alors vous pouvez cocher la case "Lancer EasyPHP".
Configurer EasyPHP
Dernière étape : il faut configurer EasyPHP. Je vous rassure de suite c'est très rapide et très simple.
Faites un clic droit sur l'icône EasyPHP dans la barre des tâches. Un petit menu s'ouvre :
C'est "Administration" qui va nous servir. Cela permet de configurer EasyPHP.
Serveur Web locale: EasyPHP
20
1. Apache > Alias : c'est là qu'on va se rendre pour configurer EasyPHP. Cela permet d'indiquer les sites web que vous avez sur votre disque dur, pour que EasyPHP les reconnaisse.
2. PhpMyAdmin > Gestion BDD : c'est par ici que vous pourrez gérer votre base de données. On verra ce que c'est dans la partie II de ce cours.
Serveur Web locale: EasyPHP
21
1. Nom de l'alias : c'est le nom de votre site. Il faut bien lui donner un nom quoi :p. Dans notre exemple, on mettra "TestsPHP".
2. Le chemin du répertoire : il faut indiquer dans quel dossier se trouve votre site. Si vous avez fait comme je vous l'ai dit, vous devriez avoir créé un dossier "Tests PHP" dans "Mes documents".
3. Paramètres par défaut du répertoire : dès que vous voyez des mots bizarres en anglais, vous faites comme moi : vous n'y touchez pas
4. OK : une fois que tout est rempli, cliquez sur ce petit bouton et c'est bon
Serveur Web locale: EasyPHP
22
Les instructions PHP peuvent être insérées dans les commandes HTML, ce qui facilite le développement des sites web dynamiques. Lorsque PHP commence à traiter un fichier, il ne fait qu'afficher le texte HTML qu'il rencontre. Un fichier, qu’il soit « .html » ou « .php », fonctionnera exactement de la même façon. Si on veut insérer des commandes PHP dans un fichier, il faut indiquer à PHP le début d'une telle séquence, en passant en mode PHP comme tel :
<?php /* Instructions PHP */ ?>
Ou
<? /* Instructions PHP */ ?> (short_open_tag = on)
Autres syntaxes d’intégration :
<script language= "php" >……< /script>
Ou
<%..... %> (asp_tags = on)
Tout ce qui se trouve entre ces balaises sera considéré par le serveur Web comme étant des commandes PHP.
Syntaxe de base
23
Code Source 1: Affichage du texte
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Notre première instruction : echo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-
8859-1" />
</head>
<body>
<h2>Affichage de texte avec PHP</h2>
<p>
Cette ligne a été écrite entièrement en (x)HTML.<br />
<?php
echo ‘Hello world';
print"Hello world";
echo("Hello PHP");
print("Bienvenue sur ma page PHP");
?>
</p>
</body>
</html>
Affichage du texte
Syntaxe de base
Le code de base
PHP
24
La fonction echo
La fonction echo est la fonction de base de toute page PHP. Elle permet
d’afficher une ou plusieurs chaînes et donc d’inclure du texte dans la page
HTML envoyée au navigateur.
Syntaxe :
echo (texte)
echo texte1, texte2
Le séparateur d’instruction
En PHP, toutes les instructions doivent se terminer par un point-virgule.
Exemple :
<?php
echo ("Bonjour");
echo("Olivier");
?>
Syntaxe de base
25
Plusieurs manières de définir des zones de commentaires :
/*forme de commentaires 1 */
Attention pas d’imbrication
Comme en langage C
# formme de commentaires 2
Ce type de commentaire à la Unix est très peux utilisé
// forme de commentaires 3
Comme en langage C++
Les commentaires
26
Définition
• La fonction define permet de définir une constante. Une constante
est une zone mémoire identifié par un nom qui contient une valeur
lisible mais non modifiable.
Syntaxe
Booléen define(Identificateur, valeur, booleén)
– Identificateur : Nom de la constante
– Valeur : valeur de la constante
– booleén : indique si le nom de la constante est sensible à la casse
(TRUE – Valeur par défaut), ou non (FALSE).
La fonction define retourne true en cas de succés et false en cas
d’erreur.c
Constantes
27
Constantes
•L’utilisateur peut définir des constantes dont la valeur est fixée une fois
pour toute. Les constantes ne portent pas le symbole $ (dollars) en début
d’identificateur et ne sont pas modifiables.
•define(‘’var’’,valeur) : définit la constante var (sans $) de valeur valeur
•Exemple 1 :
•define(‘’author’’,’’Foobar’’);
•echo author; // affiche ‘Foobar’
•Exemple 2 :
•define(MY_YEAR,1980);
•echo MY_YEAR; // affiche 1980
28
La fonction defined
• La fonction defined permet de savoir si une constante est définie ou non.
Syntaxe
– Booléen defined(texte)
– Defined retourne TRUE si la constante est définie et FALSE dans le cas contraire.
La fonction constant
• La fonction constant permet de retourner la valeur d’une constante dont le nom est passé en paramètre.
Syntaxe
– Constant(Identificateur)
Identificateur : Nom de la constante
Fonctions utiles
29
Les variables
Une variable est un objet repéré par son nom, qui peut être nombre,
texte ou autre. Les variables conservent temporairement des valeurs,
qui pourront être modifiées lors de l'exécution du programme.
PHP supporte quatre types scalaires :
Booléen, entier, nombre à virgule flottante, chaîne de
caractères.
PHP supporte deux types composés :
Tableau, objet.
PHP supporte deux types spéciaux :
Ressource, null.
Variables
30
Le typage des variables est implicite en PHP. Il n’y a donc pas besoin de
les déclarer ni même de les initialiser avant leur utilisation, toutefois, les
noms de variables doivent répondre à certaines règles syntaxiques:
Tout nom de variable doit obligatoirement être précédé du caractère
dollar ($).
Tout nom de variable doit commencer par une lettre (majuscule ou
minuscule) ou un "_", mais jamais un chiffre.
Un nom de variable peut comporter des lettres, des chiffres et le
caractère _ (les espaces ne sont pas autorisés).
Les noms de variables sont sensibles à la casse.
On affecte des valeurs aux variables à l’aide du signe égale (=)
En PHP3 les variables sont assignées uniquement par valeurs
En PHP4 les variables peuvent être assignées par références
Elles deviennent un alias
Variables
31
•empty($var) : renvoie vrai si la variable est vide
•isset($var) : renvoie vrai si la variable existe
•unset($var) : supprime une variable
•var_dump($var):affiche des informations sur une variable
•gettype($var) : retourne le type de la variable
•settype($var, ’’type’’) : convertit la variable en type type (cast)
•is_long(), is_double(), is_string(), is_array(), is_object(), is_bool(),
is_float(), is_numeric(), is_integer(), is_int()…
Fonctions utiles
32
• Il existe quelques fonctions ayant attrait au type des variables :
– string gettype(var) : renvoie le type de la variable sous forme de chaîne
<?php
$var1 = "hello";
$var2 = 12;
$var3 = TRUE;
echo gettype($var1);
echo gettype($var2);
echo gettype($var3);
?>
Le code ci-dessus affichera string integer boolean.
Fonctions utiles
33
bool is_type(var) : renvoie True si la variable testée est du type
<?php
$var = 12;
is_int($var); //true
Is_string($var); //false
?>
var_dump(var) : retourne les informations structurées d’une variable, y
compris sont type et sa valeur.
<?php
$var = 12;
var_dump($var);
?>
Le code ci-dessus affichera int(15)
Fonctions utiles
34
• Il existe une miriade de fonctions mathématiques.
• abs($x) : valeur absolue
• ceil($x) : arrondi supérieur
• floor($x) : arrondi inférieur
• pow($x,$y) : x exposant y
• round($x,$i) : arrondi de x à la ième décimale
• max($a, $b, $c …) : retourne l’argument de valeur maximum
• pi() : retourne la valeur de Pi
• Et aussi : cos, sin, tan, exp, log, min, pi, sqrt…
• Quelques constantes :
• M_PI : valeur de pi (3.14159265358979323846)
• M_E : valeur de e (2.7182818284590452354)
Fonctions utiles
35
Les variables sont précédées du signe $
$bonjour = "Hello";
$nom = "Hello";
$nomcomplet = "Paul &nom";
$email = "kilain". "."."kilain";
Les variables référencées (&)
$nomcomplet = "Paul".&$nom; en PHP4
Exemple :
<?php
$foo = 'Pierre'; // Assigne la valeur 'Pierre' à $foo
$bar = &$foo; // Référence $foo avec $bar.
$bar = "Mon nom est Pierre"; // Modifie $bar...
echo $foo; // $foo est aussi modifiée
echo $bar;
?>
Variables
36
• Le type d’une variable est à liaison superficielle
<?php
$a = 100;
echo $a;
$a = "une chaine de caracteres";
echo $a;
?>
Variables
37
• Une variable chaîne de caractères n’est pas limitée en nombre de
caractères. Elle est toujours délimitée par des simples quotes ou des doubles
quotes.
• Exemples :
• $nom = ‘’Etiévant’’;
• $prenom = ‘Hugo’;
• Les doubles quotes permettent l’évaluation des variables et caractères
spéciaux contenus dans la chaîne (comme en C ou en Shell) alors que les
simples ne le permettent pas.
• Exemples :
• echo ‘’Nom: $nom‘’; // affiche Nom: Etiévant
• echo ’Nom: $nom‘; // affiche Nom: $nom
• Quelques caractères spéciaux : \n (nouvelle ligne), \r (retour à la ligne), \t
(tabulation horizontale), \\ (antislash), \$ (caractère dollars), \’’ (double
quote).
• Exemple : echo ‘’Hello Word !\n’’;
Les chaînes de caractères
38
• Opérateur de concaténation de chaînes : . (point)
• Exemple 1 :
• $foo = ‘’Hello’’;
• $bar = ‘’Word’’;
• echo $foo.$bar;
• Exemple 2 :
• $name = ‘’Henry’’;
• $whoiam = $name.‘’IV’’;
• Exemple 3 :
• $out = ‘Patati’;
• $out .= ‘’ et patata…’’;
Les chaînes de caractères
39
Les chaînes de caractères
• Affichage d’une chaîne avec echo:
• Exemples:
• echo ‘Hello Word.’;
• echo ‘’Hello ${name}\n’’;
• echo ’’Nom : ’’, $name;
• echo(‘’Bonjour’’);
• Quelques fonctions:
• strlen($str) : retourne le nombre de caractères d’une chaîne
• strtolower($str) : conversion en minuscules
• strtoupper($str) : conversion en majuscules
• trim($str) : suppression des espaces de début et de fin de chaîne
• substr($str,$i,$j) : retourne une sous chaîne de $str de taille $j et
débutant à la position $i
• strnatcmp($str1,$str2) : comparaison de 2 chaînes
• addslashes($str) : déspécialise les caractères spéciaux (‘, ‘’, \)
• ord($char) : retourne la valeur ASCII du caractère $char
40
La portée d'une variable dépend du contexte dans lequel la variable est définie.
Les constantes, les fonctions et classes sont partout visible donc accessible.
Variable globales
Les variables globales ne peuvent être utilisées telles quelles au niveau du corps des fonctions.
Une variable globale ne peut être au sein d’une fonction que si elle est précédée du mot réservé global.
Variable locales
Elles sont définies au niveau du corps des fonctions
Portée des variables
41
Toute variable utilisée dans une fonction est par définition, locale. Par exemple :
<?php
$a = 1;
function test() {
echo $a; /* portée locale */
}
test();
?>
Le script n'affichera rien à l'écran car la fonction echo utilise la variable
locale $a, et celle−ci n'a pas été assignée préalablement dans la
fonction.
Portée des variables
42
En PHP, une variable globale doit être déclarée à l'intérieur de chaque fonction afin de pouvoir être utilisée dans cette fonction. Par exemple:
<?php
$a = 1;
$b = 2;
function somme() {
global $a, $b;
$b = $a + $b;
}
somme();
echo $b;
?>
Le script ci−dessus va afficher la valeur "3". En déclarant
globales les variables $a et $b locales de la fonction
somme(), toutes les références à ces variables concerneront
les variables globales. Il n'y a aucune limite au nombre de
variables globales qui peuvent être manipulées par une
fonction.
Portée des variables
43
Une autre caractéristique importante de la portée des variables est la notion de variable static . Une variable statique a une portée locale uniquement, mais elle ne perd pas sa valeur lorsque le script appelle la fonction. Prenons l'exemple suivant:
<?php
function test() {
$a = 0;
echo $a;
$a++;
}
?>
Cette fonction est un peu
inutile car à chaque fois
qu'elle est appelée, elle
initialise $a à 0 et affiche "0".
L'incrémentation de la
variable ($a++) ne sert pas à
grand chose, car dès que la
fonction est terminée la
variable disparaît.
<?php
function test() {
static $a = 0;
echo $a;
$a++;
}
?>
Pour faire une fonction de
comptage utile, c'est−à−dire
qui ne perdra pas la trace du
compteur, la variable $a est
déclarée comme une variable
statique (voir script au-
dessus). L’appel de la fonction
Test() affichera une valeur de
$a incrémentée de 1.
Portée des variables
44
Référence sur une variable
•On peut à la manière des pointeurs en C faire référence à une variable
grâce à l’opérateur & (ET commercial).
•Exemple 1 :
•$toto = 100; // la variable $toto est initialisée à la valeur 100
•$foobar = &$toto; // la variable $foobar fait référence à $toto
•$toto++; // on change la valeur de $toto
•echo $foobar; // qui est répercutée sur $foobar qui vaut alors 101
•Exemple 2 :
•function change($var) {
• $var++; // la fonction incrémente en local l’argument
•}
•$nbr = 1; // la variable $nbr est initialisée à 1
•change(&$nbr); // passage de la variable par référence
•echo $nbr; // sa valeur a donc été modifiée
45
La fonction gettype() permet de lire le type d’une variable.
On peut assigner les types suivants Array
Class
Double
Integer
String
La fonction settype() permet de changer le type d’une variable
<?php
$a = 3.14;
If(gettype($a)=="double")
settype($a, "integer" );
?>
Conversion de type
46
Avec PHP on peut utiliser les différents opérateurs arithmétiques comme dans
les exemples suivants :
Exemple Nom Résultat
$a + $b Addition Somme de $a et $b.
$a − $b Soustraction Différence de $a et $b.
$a * $b Multiplication Produit de $a et $b.
$a / $b Division Quotient de $a et $b.
$a % $b Modulo Reste de $a divisé par $b.
L'opérateur de division ("/") retourne une valeur entière (le résultat d'une
division entière) si les deux opérandes sont entiers (ou bien des chaînes
converties en entier. Si l'un des opérandes est un nombre à virgule flottante, ou
bien le résultat d'une opération qui retourne une valeur non entière, un nombre
à virgule flottante sera retourné.
Les opérateurs arithmétiques
47
L'opérateur d'assignation est le signe "=". Il signifie que l'opérande de gauche se voit
affecter la valeur de l'expression qui est à droite du signe égal. En plus, il existe des
"opérateurs combinés" pour tous les opérateurs arithmétiques et pour les opérateurs
sur les chaînes de caractères. Cela permet d'utiliser la valeur d'une variable dans
une expression et d'affecter le résultat de cette expression à cette variable. Par
exemple:
<?php
$a = 3;
$a += 5; // affecte la valeur 8 à la variable $a.
// correspond à l'instruction '$a = $a + 5');
$b = "Bonjour";
$b .= "tout le monde!"; // affecte la valeur "Bonjour tout le
//monde!" à la variable $b
// identique à $b = $b." tout le monde!";
?>
Les opérateurs d’assignation
48
Les opérateurs de comparaison, comme leur nom l'indique, vous permettent de
comparer deux valeurs.
Exemple Nom Résultat
$a == $b Égal Vrai si $a est égal à $b.
$a != $b Différent Vrai si $a est différent de $b.
$a < $b inférieur Vrai si $a est inférieur strict à $b.
$a > $b grand Vrai si $a grand strict à $b.
$a <= $b Inf ou égal Vrai si $a est inf ou égal à $b.
$a >= $b Sup ou égal Vrai si $a est sup ou égal à $b.
Un autre opérateur conditionnel est l'opérateur ternaire (":?"), qui fonctionne
comme en langage C<?php
(expr1) ? (expr2) : (expr3);
?>
Cette expression renvoie la valeur de l'expression expr2 si l'expression expr1
est vraie, et l'expression expr3 si l'expression expr1 est fausse.
Les opérateurs de comparaison
49
if, else, elseif
switch, case, default
For
While
do…while
foreach(PHP4)
break, continue
Les structures de contrôles
50
If else elseif
Syntaxe:
If(expression)
{
bloc;
}
Elseif(expression 2)
{
bloc2;
}
………..
else
{
dernier block
}
Les structures de contrôles
51
Les tableaux
Les tableau (array) représentent la structure de données la plus importante du
langage PHP
Les tableaux sont en PHP d’une seule dimension
La seule manière de construire des tableaux multidimensionnel est d’utiliser
des tableaux de pointeurs.
L’indexation d’un tableau commence toujours à l’indice 0 (zéro)
Deux types d’indexation:
indexage numérique
indexage associatif
Les tableaux
52
Indexation numérique
Indexation explicite
• $couleur[0] = "blanc", $couleur[1] = "bleu", $couleur[2] = "rouge";
Indexation automatique
• $couleur[] = "blanc", $couleur[] = "bleu", $couleur[] = "rouge";
Avec array sans indice
• $couleur = array("blanc", "bleu", "rouge");
Avec array + indice
• $couleur = array(5=>"blanc", "bleu", "rouge");
Indexation associative
$personne = array("nom" =>"LeMouel", "prenom"=>"Yann",
"age"=>30);
$couleur = array(1=>"blanc", 3=>"bleu", 5=>"rouge");
Les tableaux
53
<?php
$couleur[] = "blanc"; $couleur[] = "bleu"; $couleur[] = "rouge";
echo "$couleur[2]";
$couleur2 = array("blanc", "bleu", "rouge");
echo "<br /> $couleur2[2]";
$couleur3 = array(5=> "blanc", "bleu", "rouge");
echo "<br /> $couleur3[6]";
$personne = array("nom"=> "LeMouel", "prenom"=> "Yann", "age"=> 30);
echo "<br />$personne[prenom]";
$couleur4 = array(1=> "blanc", 3=> "bleu", 5=> "rouge");
echo "<br />$couleur4[5]";
?>
Les tableaux
54
<?php
$couleur[] = "blanc"; $couleur[] = "bleu"; $couleur[] = "rouge";
for($index=0; $index < count($couleur); $index++)
{
echo "<br />indic $index=> $couleur[$index]";
}
?>
Parcours d’un tableau : for
Les tableaux
55
Tableaux multidimensionnels
Deux notations peuvent être utilisées pour construire un tableau multidimensionnel, sous forme
$tableau[…]=$tableau_intérieur ou,
$tableau[…][…]=valeur.
Méthode 1 :
<?php//création d’un tableau contenant les villes du Maroc
$villes_maroc[]= "Rabat";
$villes_maroc[]= "Temara";
$villes_maroc[]= "Casablanca";// stockage du tableau des villes de Maroc dans le tableau des villes
$villes["Maroc"]=$villes_maroc; //tableau de tableau
//viles de France
$villes_france[]= "Paris";
$villes_france[]= "Brest";
$villes_france[]= "Quimper";// stockage du ville de France
$villes["France"]=$villes_france;
?>
Les tableaux
56
Tableaux multidimensionnels
Méthode 2 :<?php
//villes du maroc
$villes["Maroc"][]= "Rabat";
$villes["Maroc"][]= "Temara";
$villes["Maroc"][]= "Casablanca";
//villes de france
$villes["France"][]= "Paris";
$villes["France"][]= "Brest";
$villes["France"][]= "Quimper";
?>
Les tableaux
57
Tableau multidimensionnels
En utilisant la fonction array:
Méthode 1 :
<?php
$villes_maroc[]= array("Rabat", "Temara", "Casablanca");
$villes_france[]= array("Paris", "Brest", "Quimper");
$villes=array("Maroc"=>$villes_maroc,"France"=>$villes_france);
?>
Méthode 2 :
<?php
$villes=array("Maroc"=>array("Rabat", "Temara", "Casablanca"),
"France"=>array("Paris", "Brest", "Quimper"));
?>
Les tableaux
58
La structure de parcours de tableau foreach
La forme foreach reste la plus adaptée pour passer en revue les éléments d’un
tableau. Il y a deux syntaxes possibles :
Première syntaxe :
<?php
foreach($tableau as $value)
instructions;
?>
A chaque itération de la boucle, $valeur contient la valeur de l’élément du
tableau $tableau. Cette syntaxe permet de parcourir le tableau de début à la fin.
Deuxième syntaxe :
<?php
foreach($tableau as $clé=>$value)
instructions;
?>
la clé courante est stockée dans la variable $clé et la valeur dans la variable dans
$valeur.
Les tableaux
59
Les tableaux
<?php
$tab=array("zéro", "un", "deux", "zéro"=>0, "un"=>1, "deux"=>2);
echo "Première syntaxe :<br />";
foreach($tab as $nombre)
{
echo " $nombre <br /> ";
}
echo "deuxième syntaxe :<br />";
foreach($tab as $cle=>$nombre)
{
echo " $clé=>$nombre <br /> ";
}
?>
Exemple d’utilisation de la structure foreach
60
La structure de parcours de tableau while
Syntaxe :
While(list(variable_clé, variable_valeur)=each(tableau))
{
instructions ;
}
Pour passer en revue les éléments d’un tableau, nous devrons le
faire à l’aide de trois fonctions complémentaires :
– reset permet de pointer sur le premier élément du tableau
– list permet d’affecter une série de variables à un tableau ou l’inverse (affecter un tableau
à une série de variables).
– each retourne le couple clé/valeur en cours, et pointe sur l’élément suivant du tableau.
Les tableaux
61
<?php
$tab=array("zéro", "un", "deux", "zéro"=>0, "un"=>1, "deux"=>2);
reset($tab);
While (list($clé, $valeur) = each ($tab))
echo "$clé=>$valeur<br />";
?>
Les tableaux
La fonction each permet de passer d’un élément à l’autre en pointant
sur un élément différent à chaque itération. La fonction list permet de
récupérer la valeur et la clé de l’élément courant.
Exemple d’utilisation de la structure whileLes tableaux
62
La structure de parcours do ..while
synatxe:
do
{
instructions…
} while(next(tableau))
Pour parcourir le tableau, nous avons besoin des fonctions suivantes:
La fonction key (nom du tableau) renvoie le nom de la clé de la paire clé/valeur
courante,
La fonction current (nom du tableau) renvoie la valeur de l’élément courant. Le
pointeur est initialement sur l’indice de la première paire clé/valeur,
La fonction next(nom du tableau) déplace le pointeur interne vers l’élément
suivant et renvoie la valeur de cet élément. A la fin du tableau false est
renvoyée,
Les tableaux
63
Exemple d’utilisation de la structure do …while
<?php
$personne = array("nom"=>"Mouel", "prenom"=>"Yann", "age"=>30);
do
{
echo "<br />indice" , key($personne), "==>", current($personne);
} while(next($personne))
?>
Les tableaux
64
1 Introduction
PHP offre la possibilité de définir des fonctions avec tous les avantages associés.
Les fonctions en PHP peuvent prendre des arguments sans spécifier leurs types.
Elles peuvent de façon optionnelle retourner une valeur.
2 Déclaration et appel
Le mot clé function permet d’introduire la définition d’une fonction
qui peut être définie selon la syntaxe suivante :
<?php
function nom_function($paramètre0, $paramètre1, $paramètre2, …)
{
instructions ;
}
?>
nom_function doit respecter les règles des noms de variable
Fonctions
65
1 Introduction
PHP offre la possibilité de définir des fonctions avec tous les avantages
associés.
Les fonctions en PHP peuvent prendre des arguments sans spécifier leurs
types.
Elles peuvent de façon optionnelle retourner une valeur.
2 Déclaration et appel
Le mot clé function permet d’introduire la définition d’une fonction
qui peut être définie selon la syntaxe suivante :
<?php
function nom_function($paramètre0, $paramètre1, $paramètre2, …)
{
instructions ;
}
?>
nom_function doit respecter les règles des noms de variable
Fonctions
66
Exemple:
<?php
// fonction avec 2 paramètres retourne la somme des deux paramètres
function Somme($a, $b) {
return $a+$b;
}
$res = Somme(10, 11); echo "$res= " , $res;
// fonction avec un tableau comme paramètre
function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
//fonction sans paramètre qui affiche “Ceci est un exemple“
function Afficher_message(){
echo "ceci est un message <br />";
}
Afficher_message();
?>
Fonctions
67
Valeurs de retour
Il est possible de retourner plusieurs valeurs d’une fonction sous forme d’un
tableau. Dans l’appel de cette fonction, il faudra affecter le tableau retourner à la
procédure list() qui prend en paramètre la taille de ce tableau. On affecte à list() le
retour de la fonction.
<?php
function opération($arg1,$arg2){
return array ($arg1+$arg2, $arg1-$arg2, $arg1*$arg2 ) ;
}
$a=5 ; $b=3 ;
list($a1,$a2,$a3)= opération($a,$b) ;
echo " somme : $a1 <br />" ;
echo " soustraction : $a2 <br />" ;
echo " produit : $a3 <br />" ;
?>
Fonctions
68
Visibilité de la fonction
Une fonction est utilisable uniquement dans le script où elle est définie. Pour l’employer dans
plusieurs scripts, il faut, soit recopier sa définition dans les différents scripts, soit la définir dans
un fichier inclus partout où la fonction est nécessaire.
Exemple :
Fichier fonctions.inc contenant des définitions de fonctions :
<?php
function somme($arg1,$arg2){
return $arg1+$arg2;
}
?>
Script utilisant les fonctions définies dans fonctions.inc :
<?php
include("fonctions.inc") ; //inclusion du fichier fonctions.inc
echo somme(3,3) ; //utilisations de la fonction somme
?>
Fonctions
69
Fonction variable
PHP propose une fonction variable qui permet de stocker un nom de fonction
dans une variable, et d’appeler la variable dans une instruction. Dans ce cas,
PHP remplace la variable par sa valeur et cherche à exécuter la fonction
correspondante.
Exemple :
Fonctions
<?php
function somme($arg1,$arg2){
return $arg1+$arg2;
}
function division($arg1,$arg2){
if($arg2==0)
echo "division par zero !!! <br />";
else
return $arg1/$arg2;
}
function calculer($opération, $arg1,$arg2)
{
return $opération($arg1,$arg2) ;
}
// utilisation de la fonction calculer
echo calculer("somme",1,2)
echo "<br />";
echo calculer("division",1,2);
?>
70
Paramètres avec valeur par défaut
Les paramètres sont passés par copie et les résultas sont retournés par copie.
Même sans paramètre, un entête de fonction doit en porter. Comme en C++, il
est possible d’indiquer qu’un paramètre possède une valeur par défaut grâce à
la syntaxe suivante :
<?php
function nom_function($arg1 = valdeft1, $arg2= valdef2,..., $argn=valdeft){
instructions ; }
?>
La valeur par défaut d’un paramètre doit être une expression littérale et ne
peut être, ni une variable, ni une fonction, ni une expression composée.
<?php
function affiche($titre, $couleur="black"){
echo("<h1 style=\"color:$couleur\">$titre</h1>"); }
affiche("couleur noire"); affiche("couleur bleu", "red"); affiche("couleur!",
"#aaff55");
?>
Fonctions
71
Passage d’arguments par valeur, par référence
Le passage d’arguments par référence permet à une fonction de modifier les
variables passées en paramètres. Pour passer un argument par référence, il
suffit d’utiliser l’opérateur de référence & devant le nom du paramètre dans
la déclaration de la fonction.
Fonctions
<?php
function incr_valeur($cmp){
$cmp++; //incrémentation
echo "\$cmp =$cmp <br />";
}
$i=1 ;
echo "\$i avant appel = $i <br />";
incr_valeur($i) ;
echo "\$i après appel =$i <br >";
?>
<?php
function incr_valeur(&$cmp){
$cmp++ ; // incrémentation
echo "\$cmp = $cmp <br />";
}
$i=1 ; // initialisation
echo "\$i avant appel = $i <br />";
incr_valeur($i) ;
echo "\$i après appel =$i <br />";
?>
72
Fonctions
Récursivité
PHP permet d’utiliser la récursivité, c-à-d, la possibilité d’une fonction de
s’appeler par elle-même.
Exemple :
<?php
function factoriel($n){
if($n==0) return 1 ;
else return $n*(factoriel($n-1));
}
$nombre=3 ;
echo "factoriel($nombre)=", factoriel($nombre);
?>
73
Formulaires
1 Introduction
Les formulaires servent essentiellement pour la gestion interactive d’un
site.
Les formulaires sont à la base des pages web dynamiques.
2 Mise en œuvre d’un formulaire
Un formulaire XHTML est défini entre les balises <form> et </from>
Exemple:
<form method="post" action="traitement.php">
<p>Texte à l'intérieur du formulaire</p>
</form>
action : le script qui va traiter le formulaire.
method : Mode de transmission vers le serveur des informations
saisies dans le formulaire.
Get : les données du formulaire sont transmises dans l’URL.
Post : les données du formulaire sont transmises dans le corps de la
requête.
74
Formulaires
3 Les méthodes Get et Post
La transmission d’un formulaire s’effectue selon l’une des deux méthodes d’envoi :
GET ou POST.
Si l’option register_globals est activée, lors de la soumission du formulaire à une
page de traitement, chaque élément 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.
Si, au contraire, l’option register_globals est invalidée, chaque élément de
saisie est assimilé à une variable PHP au sein du tableau associatif dépendant de
la méthode d’envoi employée.
- Si la méthode GET a été choisie, on retrouve les variables au
sein de la superglobale $_GET.
- Si la méthode POST a été choisie, les variables sont contenues
au sein de la superglobale $_POST.
Pour obtenir les valeurs des variables en utilisant les superglobale, procédez comme
suit :
Syntaxe
$valarg =$_GET[‘nomarg’]; //GET
$valarg =$_POST[‘nomarg’]; //POST
75
Formulaires
La méthode Get
La méthode GET envoie les données sous forme d’une suite de couples
nom/valeur ajoutés à l’URL de la page appelée.
La partie d’une URL précédée par le caractère point d’interrogation (?) est
appelée chaîne de requête. Si la chaîne de requête contient plusieurs
éléments, alors chaque élément/valeur doit être séparé par le caractère
&. Par ailleurs, elle ne peut pas dépasser 255 caractères. Les données
transmises au serveur par la méthode GET sont visibles par les utilisateurs
directement dans la barre d’adresse du navigateur.
Exemple:
http://www.monsite.com/infos.php?jour=27&mois=07&annee=20
03&titre=Informations
4 variables seront créées :
$_GET['jour'] = 27;
$_GET['mois'] = 07;
$_GET['annee'] = 2003;
$_GET['titre'] = "Informations";
76
Formulaires
Exemple :
infos.php
<html><body>
<p>Lien vers la page appel.php, avec des variables aux valeurs
différentes:</p>
<p><a href="appel.php?nom=Yossef&prenom=Amine">Lien vers
cible.php?nom=YossefDupont&prenom=Amine</a></p>
</body></html>
appel.php
<p>Bonjour !</p>
<p>Votre nom est <?php echo $_GET['nom']; ?> , et votre prénom est <?php
echo $_GET['prenom']; ?>.</p>
<p>Faites un autre essai, <a href="infos.php">cliquez ici</a> pour revenir à
infos.php</p>
77
PHP : Les bases Formulaires
La méthode Post
La méthode POST place les informations directement à la suite de
l’adresse URL de la page appelée.
La partie d’une URL regroupe les informations dans l’en-tête d’une
requête HTTP. Ainsi, les données transmises par un formulaire restent
confidentielles et n’apparaissent pas dans l’URL. La fonction isset() est
très pratique lorsqu’on écrit des traitements de formulaires. Elle permet
de déterminer si une variable est affectée (0 compris mais ni NULL ni
FALSE). En utilisant cette fonction, il est possible de déterminer les
champs d’un formulaire n’ayant pas été renseignés par l’utilisateur. Mais
isset() présente une difficulté : le test d’une chaîne de caractères vide
renvoie TRUE.
78
Formulaires
Exemple : Transmettre en utilisant un formulaire
form.php
<form action="cible.php" method="post">
<label>Entrer votre nom:
<input type="text" name="prenom" /> <input type="submit" value="Valider"
/>
</label></form>
cible.php
<p>Bonjour !</p>
<p>Je sais comment tu t'appelles. Tu t'appelles <?php echo
$_POST['prenom']; ?> !</p>
<p>Si tu veux changer de prénom, <a href="form.php">clique ici</a> pour
revenir à form.php</p>
79
Formulaires
4 LE FORMULAIRE ET LE SCRIPT PHP
PHP peut intervenir à deux endroits par rapport au formulaire :
Pour la construction du formulaire, si ce dernier doit contenir des
informations dynamiques ;
Pour le traitement du formulaire ;
Les méthodes utilisables pour faire interagir un formulaire et un script PHP
sont :
Placer le formulaire dans un document xHTML, dans ce cas le formulaire ne
contient aucun élément dynamique, et indiquer le nom de script qui doit
traiter le formulaire dans l’option action de la balise <form>
Placer le formulaire dans un script PHP et faire traiter le formulaire par un
autre script PHP ;
Placer le formulaire dans un script PHP et le faire traiter par le même script
PHP.
80
Exemple :
<?php
echo ("<html>");
echo ("<head>");
echo ("<title> calcul du factoriel </title>");
echo ("</head>");
echo ("<body>");
echo ("<head>");
echo ("<form method=\"post\" action=\"traitement.php\">");
echo("<label> Entrer entier:
<input type=\"text\" name=\"nombre\" size=\"30\"/>
</label>");
echo("<input type=\"submit\" /> <input type=\"reset\" />");
echo("</form>");
echo("</html>");
?>
Formulaires
81
traitement.php
<?php
function factoriel($n){
if($n==0) return 1 ;
else return $n*(factoriel($n-1));
}
$var=$_POST['nombre'];
print("factoriel($var)=");
print(factoriel($var));
?>
Formulaires
82
Formulaires
Exemple: Variables de formulaires complexes
<?php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
echo '<pre>';
print_r($_POST);
echo '<a href="'. $_SERVER['PHP_SELF'] .'">Essayez à nouveau</a>';
echo '</pre>';
} else {
?>
83
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Nom : <input type="text" name="personal[name]" /><br />
Email : <input type="text" name="personal[email]" /><br />
ville : <br />
<select multiple name="ville[]">
<option value="casa">casa</option>
<option value="fes">fes</option>
<option value="meknes">meknes</option>
</select><br />
<input type="hidden" name="action" value="submitted" />
<input type="submit" name="submit" value="submit me!" />
</form>
<?php
}
?>
Formulaires
84
La notion d'objet dans le langage du PHP à un aspect très limité contrairement au langages de référence tel que le C++.
Le concept objet doit être pris dans le sens de "module", sous ce nom, se cache un ensemble de commandes visant à exécuter des actions, un objetest une entité, un peu comme si l'on voulait diviser notre programme en sous-tâches.
Vocabulaire du concept objet en PHP
• Objet :Représentant de la classe dans l'application, il se nomme instance de classe.
• Classe : Entité contenant toutes les méthodes et attributs.
• Méthode : Nom donné aux fonctions contenu dans la classe.
• Attribut : Nom donné aux variables globales de la classe, définis aux début.
• constructeur: Nom donné à la méthode lancé lors de l'instanciation de la classe, elle porte le même nom que la classe.
• destructeur:Nom donné à la méthode lancé lors de la destruction de la classe, cet notion, n'existe pas vraiment dans l'implémentation du concept objet en PHP.
POO en PHP
85
Déclaration d’une classe en PHP
class nom_classe{
var $variable1; // Variable sans valeur
var $variable2 = "Variable 2"; // Variable avec valeur
var $tableau = array(); // Tableau ...}
On utilise le mot clé var pour introduire un attribut, vous pouvez laissez cette variable indéfini, ou lui donner une valeur.
POO en PHP
86
Introduction des méthodesclass nom_class {
var $variable1;var $variable2 = "Variable 2";var $tableau = array()
function nom_classe ($var, $autre_var) // Le constructeur de la classe{
...}
function Fonction1 () // Fonction1
{...
}
}
La définition de méthodes dans une classe se fait de la même manière que les
fonctions dans le code source PHP,
POO en PHP
87
Mise en œuvre de la classe
<?php$objet = new nom_classe ("valeur, valeur2");$objet->variable1 = "Variable 1";$objet->fonction2("valeur");
?>
• La création d’une instance de la classe nom_classe utilise le mot-clé new.
• Pour initialiser l’attribut $variable1, on utilise l'objet suivi d'un tiret - puis d'un signe supérieur > et on ajoute le nom de la variable (qui est à l'intérieur de la classe) sans le signe dollar $.
• L'utilisation des fonctions (méthodes) de la classe se fait de la même manière que les variables (attributs) comme nous le voyons pour la méthode fonction2().
POO en PHP
88
POO en PHP
Exemple :
class Voiture { // déclaration de la classe
var $couleur; // déclaration d’un attribut
var $belle = TRUE; // initialisation d’un attribut
function voiture() { // constructeur
$this->couleur = ‘’noire’’;
} // le mot clé $this faisant référence à l’objet est obligatoire
function Set_Couleur($couleur) {
$this->couleur = $couleur;
}
}
$mavoiture = new Voiture(); // création d’une instance
$mavoiture->Set_Couleur(‘’blanche’’); // appel d’une méthode
$coul = $mavoiture->couleur; // appel d’un attribut
89
POO en PHP
Le système de classes de PHP est très succinct, il ne gère que l’héritage simple.
Exemple :
class Voituredeluxe extends Voiture { // déclaration de la sous classe
var $couleur;
function voituredeluxe() { // constructeur
$this->Voiture();
}
function Set_Couleur($couleur) {
$this->couleur = $couleur;
}
function Get_Couleur() {
return $this->couleur;
}
}
La nouvelle classe Voituredeluxe hérite de tous les attributs et méthodes de la
classe parente Voiture dont elle est une extension (extends). Il est possible de
surcharger les méthodes, d’en déclarer de nouvelles, etc.
90
POO en PHP
Quelques fonctions :
get_declared_classes() : retourne un tableau listant toutes les classes définies
class_exists($str) : vérifie qu'une classe dont le nom est passé en argument a été
définie
get_class($obj): retournent le nom de la classe de l’objet $obj
get_class_methods($str) : retourne les noms des méthodes de la classe $str dans un
tableau
get_class_vars($str) : retourne les valeurs par défaut des attributs de la classe $str
dans un tableau associatif
get_object_vars($obj) : retourne un tableau associatif des attributs de l’objet $obj
les clés sont les noms des attributs et les valeurs sont celles des attributs si elles
Existent.
is_subclass_of($obj,$str) : détermine si l’objet $obj est une instanciation d’une
sous-classe de $str, retourne VRAI ou FAUX
method_exists($obj,$str) : vérifie que la méthode $str existe pour une classe dont
$obj est une instance, retourne VRAI ou FAUX
91
POO en PHP
• Tout objet instancié est une variable et peut à se titre être passé en
argument à une fonction ou bien être un retour de fonction ou encore
être sauvegardée en donnée de session.
• Il n’existe pas de destructeur : comme en C++, les objets qui cessent
d’être utilisés sont automatiquement détruits.
• Il n’y a pas de notion de visibilité : tous les attributs et méthodes sont
publiques et une classe hérite forcément de tous les attributs et
méthodes de sa classe mère.
• Une classe fille hérite de tous les attributs et méthodes de la classe
parente dont elle est une extension (d’ou la syntaxe extends). Il est
possible de surcharger les méthodes, d’en définir de nouvelles…
92
Fichiers
Nom Rôle
fopen Ouvrir un fichier
fclose Fermer un ficheir
fread Lire le contenu d’un fichier (dans une
chaîne)
file Lire le contenu d’un fichier (dans un
tableau)
fwrite Ecrire dans un fichier
file_get_contents Ouvrir, lire et fermer un fichier
file_put_contents Ouvrir, ecrire et fermer un fichier
copy Copier un fichier
unlink Supprimer un fichier
rename Renommer un fichier
file_exists Tester l’existence d’un fichier
filesize Lire la taille d’un fichier
93
Fichiers
Exemple typique d’affichage du contenu d’un fichier :
<?php
$file = "c:\data\info.txt" ;
$str="";
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 caractères */
}
fclose ($fd); // fermeture du fichier
echo $str; // affichage
} else {
die("Ouverture du fichier <b>$file</b> impossible.");
}
?>
94
Fichiers
La fonction fopen permet d’ouvrir des fichiers dont le chemin est relatif ou absolu. Elle permet aussi d’ouvrir des ressources avec les protocoles HTTP ou FTP. Elle renvoie FALSE si l’ouverture échoue.
Exemples :
$fp = fopen(‘’../docs/faq.txt’’, ‘’r’’);
$fp = fopen(‘’http://www.php.net/’’, ’’r’’);
$fp = fopen(’’ftp://user:[email protected]/’’, ‘’w’’);
Les modes d’ouverture
• 'r' Ouvre en lecture seule, 'r+' Ouvre en lecture et écriture
(pointeur est placé au début)
• 'w' Ouvre en écriture seule, 'w+' Ouvre en lecture et écriture;
(pointeur est placé au début avec création du fichier si il n’existe pas)
• 'a' Ouvre en écriture seule; place le pointeur de fichier à la fin du fichier file. Si le fichier n'existe pas, on tente de le créer.
• 'a+' Ouvre en lecture et écriture; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.
95
<?php
$filename = 'c:\data\info.txt';
$somecontent = "ceci a été ajoutée dans le fichier\n";
// Assurons nous que le fichier est accessible en écriture
if (is_writable($filename)) {
// Dans notre exemple, nous ouvrons le fichier $filename en mode d'ajout
// Le pointeur de fichier est placé à la fin du fichier
// c'est là que $somecontent sera placé
if (!$handle = fopen($filename, 'a')) {
echo "Impossible d'ouvrir le fichier ($filename)";
exit;
}
// Ecrivons quelque chose dans notre fichier.
if (fwrite($handle, $somecontent) === FALSE) {
echo "Impossible d'écrire dans le fichier ($filename)";
exit;
}
echo "L'écriture de ($somecontent) dans le fichier ($filename) a réussi";
fclose($handle);
} else {
echo "Le fichier $filename n'est pas accessible en écriture.";
}
?>
Fichiers
96
Description
• int fwrite ( resource $handle , string $string [, int $length ] )
• fwrite() écrit le contenu de la chaîne string dans le fichier pointé par handle . Si la longueur length est fournie, l'écriture s'arrêtera après lengthoctets, ou à la fin de la chaîne (le premier des deux).
• fwrite() retourne le nombre d'octets écrits ou FALSE en cas d'erreur
Fichiers
97
<?php
// Lit un fichier, et le place dans une chaîne
$filename = 'c:\data\info.txt';
$handle = fopen ($filename, "r");
$contents = fread ($handle, filesize($filename));
echo $contents;
fclose($handle);
?>
Description
string fread ( resource $handle , int $length )
fread() lit jusqu'à length octets dans le fichier référencé par handle . La
lecture s'arrête lorsque length octets ont été lus, ou que l'on a atteint la fin
du fichier.
Retourne la chaîne lue ou FALSE si une erreur survient.
Fichiers
98
<?php
$filename = 'c:\data\info.txt';
$file = 'c:\data\info1.txt';
if (!copy($filename, $file)) {
echo "La copie du fichier $file n'a pas réussi...\n";
}
?>
Description
bool copy ( string $source , string $dest )
copy() fait une copie du fichier source vers le fichier dest . Cette fonction
retourne TRUE en cas de succès, FALSE en cas d'échec.
Fichiers
99
Accès aux dossiers (I)
Il est possible de parcourir les répertoires grâce à ces quelques fonctions :
chdir($str) : Change le dossier courant en $str. Retourne TRUE si succès,
sinon FALSE.
getcwd() : Retourne le nom du dossier courant (en format chaîne de
caractères).
opendir($str) : Ouvre le dossier $str, et récupère un pointeur $d dessus si
succès, FALSE sinon et génère alors une erreur PHP .
closedir($d) : Ferme le pointeur de dossier $d.
readdir($d) : Lit une entrée du dossier identifié par $d. C’est-à-dire
retourne un nom de fichier de la liste des fichiers du dossier pointé. Les
fichiers ne sont pas triés. Ou bien retourne FALSE s’il n’y a plus de fichier.
rewinddir($d) : Retourne à la première entrée du dossier identifié par $d.
100
<?php
// dossier courant
echo getcwd() . "<br/>";
chdir('home');
// dossier courant
echo getcwd() . "<br/>";
?>
Accès aux dossiers (I)
Description
bool chdir ( string $directory )
chdir() change le dossier courant de PHP en directory .
101
Accès aux dossiers (I)
Exemple :
<?php
function list_dir($name) {
if($dir = opendir($name)) {
while($file = readdir($dir)) {
echo "$file<br>\n";
if(is_dir($file) && !in_array($file, array(".",".."))) {
list_dir($file);
}
}
closedir($dir);
}
}
list_dir(".");
?>
102
La classe dir
La classe dir contient les propriétés et méthodes permettant de parcourir un
dossier pour en lister les fichiers.
Propriété Description
Handle Valeur du pointeur vers le dossier
Path Chemin du dossier ouvert (chaîne de caractères)
Méthode Description
dir($str) Constructeur de la classe, ouvre le dossier défini par le
chemin $str (chaîne de caractères) et retourne une instance de
la classe dir.
read() Lecture d'une entrée du dossier ouvert
close() Fermeture du dossier
Accès aux dossiers (I)
103
Accès aux dossiers (II)
Exemple 1:
<?php
if ($dir = opendir(".")) {
echo "Pointeur: ".$dir."<br>\n";
echo "Chemin: ".getcwd()."<br>\n";
while($file = readdir($dir)) {
echo "$file<br>\n";
}
closedir($dir);
}
?>
$dir est un pointeur vers la ressource dossier
$file est une chaîne de caractères qui prend pour valeur chacun des noms
de fichiers retournés par readdir()
104
Accès aux dossiers (IV)
Exemple 2 :
<?php
$d = dir('.'); // ouverture du dossier courant
echo ‘’Pointeur: ‘’.$d->handle.’’<br />’’;
echo ‘’Chemin: ‘’.$d->path.’’<br />’’;
while($entry = $d->read()) { // lecture d’une entrée
echo $entry.’’<br />’’;
}
$d->close(); // fermeture du dossier
?>
Cet exemple est équivalent au précédent. Ils listent tous les deux les
fichiers et sous répertoires du dossier courant.
105
Dates et heures (I)
Les fonctions de dates et heures sont incontournables sur Internet et
sont indispensables pour la conversion en français des dates fournies
par la base de données MySQL qui les code au format anglophone
(YYYY-DD-MM hh:mm:ss).
Quelques fonctions :
date("$format") : retourne une chaîne de caractères contenant la date
et/ou l’heure locale au format spécifié
getdate() : retourne un tableau associatif contenant la date et l’heure
checkdate($month, $day, $year) : vérifie la validité d’une date
mktime($hour, $minute, $second, $month, $day, $year) : retourne le
timestamp UNIX correspondant aux arguments fournis c’est-à-dire le
nombre de secondes entre le début de l'époque UNIX (1er Janvier
1970) et le temps spécifié
time() : retourne le timestamp UNIX de l’heure locale
106
Dates et heures (II)
Exemple 1 :
echo date(''Y-m-d H:i:s'');
/* affiche la date au format MySQL : ‘2002-03-31 22:30:29’ */
Exemple 2 :
if(checkdate(12, 31,2001))
echo"La St Sylvestre existe même chez les anglais !!!";
Exemple 3 :
$aujourdhui = getdate();
$mois = $aujourdhui['mon'];
$jour = $aujourdhui['mday'];
$annee = $aujourdhui['year'];
echo ''$jour/$mois/$annee''; // affiche ‘31/3/2002’
107
Dates et heures (III)
Les formats pour date :
• d Jour du mois sur deux chiffres
[01..31]
• j Jour du mois sans les zéros
initiaux
• l Jour de la semaine textuel en
version longue et en anglais
• D Jour de la semaine textuel en
trois lettres et en anglais
• w Jour de la semaine numérique
[0..6] (0: dimanche)
• z Jour de l'année [0..365]
• m Mois de l'année sur deux
chiffres [01..12]
• n Mois sans les zéros initiaux
• F Mois textuel en version longue et
en anglais
• M Mois textuel en trois lettres
• Y Année sur 4 chiffres
• h Heure au format 12h [01..12]
• g Heure au format 12h sans les zéros initiaux
• H Heure au format 24h [00..23]
• G Heure au format 24h sans les zéros initiaux
• i Minutes [00..59]
• s Secondes [00.59]
• a am ou pm
• A AM ou PM
• L Booléen pour savoir si l'année est bisextile (1)
ou pas (0)
• S Suffixe ordinal anglais d'un nombre (ex: nd
pour 2)
• t Nombre de jour dans le mois donné [28..31]
• U Secondes depuis une époque
• Z Décalage horaire en secondes [-
43200..43200]
108
Dates et heures (IV)
Les clés du tableau associatif retourné par getdate :
seconds secondes
minutes minutes
hours heures
mday jour du mois
wday jour de la semaine, numérique
mon mois de l'année, numérique
year année, numérique
yday jour de l'année, numérique
weekday jour de la semaine, textuel complet en anglais
month mois, textuel complet en anglais
109
Entêtes HTTP (I)
Le rôle des entêtes est d’échanger des méta informations entre serveur et
client à Propos du document, de la connexion, etc. Il est possible d’envoyer
des entêtes particuliers du protocole HTTP grâce à la commande header.
Description
void header ( string $string [, bool $replace [, int $http_response_code ]] )
header() permet de spécifier l'en-tête HTTP string lors de l'envoi des fichiers HTML. Reportez-vous à « HTTP/1.1 Specification » pour plus d'informations sur les en-têtes HTTP.
Les entêtes doivent obligatoirement être envoyées avant l’affichage de tout
caractère dans la page en cours. Car l’affichage force l’envoi des entêtes de
base.
• headers_sent() : Retourne TRUE si les entêtes ont déjà été envoyées, FALSE sinon.
110
Entêtes HTTP (III)
Exemple pratique 1 :
<?php
header(‘’Location: home2.php’’);
exit();
?>
Ce script effectue une redirection vers une autre page. C’est-à-dire que le
navigateur du client en voyant cet entête Location va charger
directement la page indiquée sans regarder la suite du script. La fonction
exit est là pour parer au cas impossible où le script continuerait son
exécution.
Note: en règle générale, le format d’un entête est le suivant
• Champ: valeur
• Avec un espace entre les deux points ‘:‘ et la ‘valeur’.
111
Entêtes HTTP
Exemple pratique 2 :
<?php
if(!isset($_SERVER["PHP_AUTH_USER"])) {
header(‘’WWW-Authenticate: Basic realm=\’’Mon domaine\’’’’);
echo ‘’Echec de l’identification.’’;
exit();
} else {
echo "Bonjour".$_SERVER["PHP_AUTH_USER"]."<br />";
echo "Votre mot de passe :".$_SERVER["PHP_AUTH_PW"];}
?>
• Cet exemple fait intervenir les variables d’environnement $PHP_AUTH_USER et $PHP_AUTH_PW qui contiennent le login et mot de passe d’un utilisateur préalablement identifié. Si l’utilisateur n’est pas identifié, alors on demande au navigateur d’afficher une boite de saisie de mot de passe et on spécifie que l’accès est interdit. Une fois que l’utilisateur est identifié on peut contrôler la validité des login et mot de passe et s’ils sont corrects afficher des données sensibles.
• Attention, cette méthode ne fonctionne pas lorsque PHP est installé en tant que module d’Apache mais seulement lorsqu’il est compilé en même temps que le serveur Apache.
112
Les sessions sont un moyen de sauvegarder et de modifier des variables
tout au cours de la visite d’un internaute sans qu’elles ne soient visibles
dans l’URL et quelque soient leurs types (tableau, objet…).
Cette méthode permet de sécuriser un site, d’espionner le visiteur, de
sauvegarder son panier (e-commerce), etc.
Les informations de sessions sont conservées en local sur le serveur
tandis qu’un identifiant de session est posté sous la forme d’un cookie
chez le client (ou via l’URL si le client refuse les cookies).
Quelques fonctions :
session_start() : démarre une session
session_destroy() : détruit les données de session et ferme la session
session_register("var") : enregistre la variable $var dans la session en
cours, attention!!!, ne pas mettre le signe $ (dollars) devant le nom de
variable
session_unregister("var") : détruit la variable $var de la session en cours
Sessions
113
Sessions
Le mécanisme des sessions est vraiment extrêmement simple. Prenons un
premier exemple pour voir comment s'enregistre une variable dans une
session avec un formulaire simple pour sauvegarder le nom du client qui
s'est connecté.
<html>
<body>
<form method="POST" action="page2.php">
Entrez votre nom : <input type="TEXT" name="nom">
<input type="SUBMIT" value="OK">
</form>
</body>
</html>
Vous avez un simple formulaire HTML qui va poster au script page2.php le
contenu de la variable nom.
114
Sessions
page2.php
<?php
session_start();
$nom = $_POST['nom'];
$_SESSION['nom'] = $nom;
?>
<html>
<body>
Bienvenue sur ce site <?php echo $nom; ?>.<br />Regardons ce qui se passe
sur la <a href="page3.php">page</a> suivante.<br />
</body>
</html>
Dans ce script, nous avons donc le démarrage de la session puis l'enregistrement
dans une variable $nom de la valeur postée par le formulaire. Enfin, nous
enregistrons $nom dans une variable de session.
115
Sessions(Initialisation)
Page 3.php
<?php
session_start();
$nom = $_SESSION['nom'];
?>
<html>
<body>
Vous êtes toujours parmi nous<?php echo $nom; ?>.<br />
</body>
</html>
Dans ce script nous avons toujours le démarrage de session avec cette fois, la
récupération de la variable nom depuis le tableau superglobal de session.
116
Sessions (Effacement)
Nous avons vu que l'enregistrement de variables était vraiment très facile. Pour effacer une variable de session, c'est tout aussi simple.
Page3.php
<?php
session_start();
if ( isset ($_SESSION['nom']) ) {$nom = $_SESSION['nom'];}
else {$nom = "mais votre nom a été effacé"; }
?>
<html>
<body>
Vous êtes toujours parmi nous
<?php echo $nom; ?>.<br /> Effacement de votre nom en cliquant
<a href="page4.php">ici</a>.<br />
</body>
</html>
Continuons en créant notre 4 script. . .
117
L'effacement d'une variable de session se fait de la même manière
qu'avec une variable classique. Vous utilisez la commande unset() suivie
du tableau superglobal et de l'index contenant votre variable :
Page4.php
<?php
session_start();
?>
<html><body>
<?php
unset ($_SESSION['nom']);
if (isset ($_SESSION['nom'])) {$resultat = "La suppression a échouée ."; }
else {$resultat = "Votre nom a été effacé."; }
echo $resultat;
?>
<br />Repartons en <a href="page3.php">arrière</a>.<br/></body></html>
Sessions (Effacement)
118
Dans notre exemple, nous n'avons qu'une seule valeur stockée dans notre
session.
Cependant, il peut arriver de vouloir réinitialiser toutes les variables sans
pour autant vouloir changer de session.
Pour effacer l'ensemble des valeurs d'une session, vous avez deux
possibilités :
Utiliser la commande session_unset() qui ne prend aucun paramètre et ne retourne aucune valeur.
session_unset();
Vider le tableau superglobal des sessions.
$_SESSION = array();
Remarque :
Il est recommandé par la Communauté PHP d'utiliser la seconde possibilité
avec l'effacement du tableau superglobal.
Sessions (Effacement Total)
119
Sessions (Destruction)
Nous avons vu que l'enregistrement de variables était vraiment très facile. Pour effacer une variable de session, c'est tout aussi simple.
Page3.php
<?php
session_start();
if( isset($_SESSION['nom']) ) {$nom = $_SESSION['nom'];}
else{$nom = "mais votre nom a été effacé"; }
?>
<html>
<body>
Vous êtes toujours parmi nous<?php echo $nom; ?>.<br />
Effacement de votre nom en cliquant<a href="page4.php">ici</a>.<br />
Effacement de votre session en cliquant<a href="page5.php">ici</a>.
</body>
</html>
– Continuons en créant notre 5 script. . .
120
Sessions (Destruction)
Page5.php
<?php
session_start();
session_destroy();
?>
<html>
<body>
votre session a été détruite
</body>
</html>
Session détruite. . .
121
Expressions régulières
Les expressions régulières sont un outil puissant pour la recherche de motifs
dans une chaîne de caractères.
Fonctions :
eregi($motif, $str) : teste l’existence du motif $motif dans la chaîne $str
eregi_replace($motif, $newstr, $str) : remplace les occurrences de $motif
dans $str par la chaîne $newstr
split($motif, $str) : retourne un tableau des sous-chaînes de $str délimitées
par les occurrences de $motif
Les fonctions eregi, eregi_replace et split sont insensibles à la casse (c’est-
à-dire ne différencient pas les majuscules et minuscules).
122
<?php
if(eregi(‘’Paris’’, $adresse))
echo ‘’Vous habitez Paris.’’;
$string = 'XYZ';
if(eregi('z', $string)) {
echo "'$string' contient un 'z' ou un 'Z'!";
}
?>
Expressions régulières
Description
int eregi ( string $pattern , string $string )
eregi() est identique à ereg(), hormis le fait qu'elle ignore la casse des
caractères lors de la recherche sur les caractères alphabétiques.
123
Expressions régulières
Les motifs peuvent être très complexes et contenir des caractères spéciaux:
[abcdef] : intervalle de caractères, teste si l’un d’eux est présent
[a-f] : plage des caractères, teste la présence de tous les caractères minuscules entre
‘a’ et ‘f’
[^0-9] : exclusion des caractères de ‘0’ à ‘9’
\^ : recherche du caractère ’^’ que l’on déspécialise par l’antislash \
. : remplace un caractère
? : rend facultatif le caractère qu’il précède
+ : indique que le caractère précédent peut apparaître une ou plusieurs fois
* : pareil que + Mais le caractère précédent peut ne pas apparaître du tout
{i,j} : retrouve une chaîne contenant entre au minimum i et au maximum j fois le
motif qu’il précède
{i,} : idem mais pas de limite maximum
{i} : retrouve une séquence d’exactement i fois le motif qu’il précède
^ : le motif suivant doit apparaître en début de chaîne
$ : le motif suivant doit apparaître en fin de chaîne
124
Expressions régulières
Exemples de motifs :
‘’[A-Z]’’ : recherche toutes les majuscules
‘’[a-zA-Z]’’ : recherche toutes les lettres de l’alphabet minuscules ou majuscules
‘’[^aeyuio]’’ : exclu les voyelles
‘’^Le ’’ : toute chaîne commençant par le mot ‘’Le‘‘ suivi d’un espace
‘’$\.com’’ : toute chaîne se terminant par ’’.com’’ (déspécialise le point)
Exemples :
if( ereg("^.*@wanadoo\.fr", $email) ) {
echo"Vous êtes chez Wanadoo de France Télécom.";
}
$email = eregi_replace("@", "-nospam@", $email);
Ce dernier exemple remplace "[email protected]" en "[email protected]".
125
Mail (I)
La fonction mail envoie un message électronique.
Syntaxe :
• mail($recipient, $subject, $message[, $headers, $params]);
Exemple :
• $message = "salam tout le monde.";
• mail("[email protected]", "Aide sur PHP", $message);
Les arguments obligatoires sont le destinataire, le sujet du message ainsi que le
message proprement dit. Les entêtes et paramètres additionnels sont facultatifs.
Note: cette fonction ne marche que si un programme de messagerie électronique
(appelé « mailer ») est préalablement installé sur le serveur.
126
Mail (II)
Exemple plus complet :
<?php
$recipient = ‘’Toy <[email protected]>, ‘’;
$recipient .= ‘’Pais <[email protected]>’’;
$subject = ‘’Notre rendez-vous’’;
$message = ‘’Je vous propose le samedi 15 juin \n’’;
$message .= ’’--\r\n’’; // Délimiteur de signature
$message .= ‘’salam terre’’;
$headers = ‘’From: Huto Etiopant <[email protected]>\n’’;
$headers .= ‘’Content-Type: text/html; charset=iso-8859-1\n’’ ;
$headers .= ‘’Cc: [email protected]\n’’;
mail($recipient, $subject, $message, $headers);
?>
127
Mail (III)
Quelques entêtes :
• From: Hugo Etiévant <[email protected]>\n
• X-Mailer: PHP\n // maileur
• X-Priority: 1\n // Message urgent!
• X-Files: Truth is out there\n // entête fantaisiste !
• Return-Path: <[email protected]>\n// @ retour pour erreurs
• Content-Type: text/html; charset=iso-8859-1\n // Type MIME
• Cc: [email protected]\n // Champs CC
• Bcc: [email protected], [email protected]\n // Champs BCC
• Reply-To: <[email protected]> // @ de retour
Format général des entêtes :
• Nom-Entete: valeur\n
128
Évaluation d’une portion de code PHP
La fonction eval($str) évalue la chaîne de caractères $str comme du code
php. Les variables éventuellement définies dans cette chaîne seront connues
dans le reste du programme principal.
Grâce à cette fonction, on peut conserver dans une base de données, des
portions de code utilisables ultérieurement.
Le code de la chaîne $str doit respecter les mêmes contraintes que le code
normal. Notamment :
• - point virgule après chaque instruction
• - respect des séquences d’échappement
• - etc…
• Exemple :
• $foobar = ‘’Hello Word’’;
• eval(‘echo $foobar;’); // affiche ’Hello Word’
129
Colorisation syntaxique (I)
• PHP dispose de fonctions qui permettent d’afficher le code source de
scripts php et d’en coloriser la syntaxe.
• Il n’est pas recommandé d’utiliser les fonctions suivantes afin que vos
visiteurs ne connaissent pas votre code source et ne puissent ainsi pas
exploiter des vulnérabilité de votre application web.
• highlight_file($file), show_source : Colorisation de la syntaxe d'un
fichier. Affiche la syntaxe colorisée du fichier $file, en utilisant les
couleurs définies dans le moteur interne de PHP.
• highlight_string($str) : Colorisation d'une chaîne de caractères
contenant du code php.
130
Colorisation syntaxique (II)
• Exemple :
• <?php highlight_file(‘’sondage.php’’); ?>
• Résultat affiché :
<?php
$out = "<html><body>";
ConnexionSQL();
echo date("D, d M Y H:i:s");
if($action == "add") {
AddNew();
} elseif($action == "stats") {
ShowStats();
}
/* ShowSubmitForm(); */
ShowStats();
$out .= "</body></html>";
echo $out;
?>
131
Colorisation syntaxique (III)• La configuration de la colorisation se trouve dans le fichier php.ini :
• Et voici comment la commande phpinfo() affiche ces informations :
Couleur de fond
Couleur des commentaires
Couleur par défaut
Couleur des balises HTML
Couleur des chaînes
Couleur des mots réservés
132
URL (I)
• Les URL (Uniform Ressource Location) sont les chemins de ressources sur
internet.
• Exemples d’URL:
• http://www.google.fr/?q=cours+php
• http://cyberzoide.developpez.com/php/php4_mysql.ppt
• ftp://foo:[email protected]
• Leur format spécifique leur interdit de comporter n’importe quel caractère
(comme l’espace par exemple).
• Une URL est une chaîne de caractères composée uniquemment de caractères
alphanumériques incluant des lettres, des chiffres et les caractères : - (tirêt), _
(souligné), . (point).
• Tous les autres caractères doivent êtres codés. On utilise le code suivant : %xx.
Où % introduit le code qui le suit et xx est le numéro hexadécimal du caractère
codé.
133
URL (II)
• Le passage de valeur d’un script à l’autre se fait soit par les sessions, soit par
les formulaires ou encore par l’URL.
• Exemple par l’URL :
• <a href=‘’index.php?imprim=yes&user_id=75’’>Version imprimable</a>
• Dans cet exemple on transmet deux variables au script index.php : $imprim de
valeur ‘’yes’’ et $user_id de valeur ‘’75’’. Les valeurs sont des chaînes de
caractères qui pouront être castées implicitement en entier.
• Le caractère ? Indique que la suite de l’URL sont des paramètres et ne font pas
partie du nom de fichier. Le caractère = sépare un nom de paramètre et sa
valeur transmise. Le caractère & séparer deux paramètres.
• Pour faire face au cas général d’un paramètre dont la valeur contient des
caractères interdits, on utilise les fonction de codage.
134
URL (III)
• Quelques fonctions de codage sur l’URL :
• Codage de base :
• urlencode : Encode une chaîne en URL.
• urldecode : Décode une chaîne encodée URL.
• Codage complet :
• rawurlencode : Encode une chaîne en URL, selon la RFC1738.
• rawurldecode : Décode une chaîne URL, selon la RFC1738.
• Codage plus évolué :
• base64_encode : Encode une chaîne en MIME base64.
• base64_decode : Décode une chaîne en MIME base64
135
URL (IV)
• urlencode($str) : code la chaîne $str. Les espaces sont remplacés par des signes
plus (+). Ce codage est celui qui est utilisé pour poster des informations dans les
formulaires HTML. Le type MIME utilisé est application/x-www-form-
urlencoded.
• Exemple 1 :
• echo <a href=\‘’$PHP_SELF?foo=‘’.urlencode($foo).’’\’’>Foo</a>’’;
• rawurlencode($str) : code la chaîne $str. Remplace tous les caractères interdits
par leur codage équivalent hexadécimal.
•
• Exemple 2 :
• echo <a href=\‘’$PHP_SELF?foo=‘’.rawurlencode($foo).’’\’’>Foo</a>’’;
• Pour être accessible, la valeur du paramètre devra par la suite être décodée
dans le script d’arrivé par la fonction réciproque adéquate.
136
URL (V)
• base64_encode($str) : code la chaîne $str en base 64. Cet encodage permet à
des informations binaires d'être manipulées par les systèmes qui ne gèrent pas
correctement les codes 8 bits (code ASCII 7 bit étendu aux accents européens),
comme par exemple, les corps de mail qui en général sont américains et ne
gère que les 7 bits. Une chaîne encodée en base 64 a une taille d’environ 33%
supérieure à celle des données initiales.
• Exemple 3 :
• echo <a href=\‘’$PHP_SELF?foo=‘’.base64_encode($foo).’’\’’>Foo</a>’’;
• Comparatif des trois encodages :
• Sans codage : René & Cie : 30%-5*20
• urlencode : Ren%E9+%26+Cie+%3A+30%25-5%2A20
• rawurlencode : Ren%E9%20%26%20Cie%20%3A%2030%25-5%2A20
• base64_encode : UmVu6SAmIENpZSA6IDMwJS01KjIw
137
URL (VI)
• parse_url($str) : retourne un tableau associatif contenant les différents
éléments de l’URL passée en paramètre. Les champs sont les suivants :
‘’scheme’’ (protocol), ‘’host’’ (domaine), ‘’port’’ (n° de port), ‘’user’’
(nom d’utilisateur ftp), ‘’pass’’ (mot de passe ftp), ‘’path’’ (chemin de la
ressource), ‘’query’’ (paramètres et valeurs), et ‘’fragment’’.
• Exemple :
• $tab = parse_url(’’http://www.cia.gov:8080/form.php?var=val’’);
• Cet exemple retourne le tableau suivant : Champ Valeur
scheme http
host www.cia.gov
port 8080
path form.php
query var=val
138
URL (VII)
• parse_str($str) : analyse la chaîne $str comme si c’était une URL et en
extrait les variables et valeurs respectives qui seront alors connues
dans la suite du script.
• Cette fonction évite d’avoir à créer ses propres fonctions d’analyse de
champs de base de données où l’on aurait sauvegardé une url.
• Exemple :
• $str =
‘’nom=jean+pierre&email[][email protected]&email[][email protected]’’;
• parse_str($str);
• echo $nom, $email[0], $email[1];
139
Cryptage et autres réjouissances
• crypt($str [, $salt]) : Retourne une chaîne de caractères. Crypte la chaîne de caractères $str. La chaîne optionnelle $salt sert de base au cryptage. Cet argument optionnel est appelé « grain de sel » à l’image des germes de nucléation à l’origine des dendrites. L’algorythme de cryptage utilisé par PHP n’est a priori pas défini (il peut varier d’un système à un autre), mais c’est en général le DES standard ou bien encore MD5. On sait aussi que le système utilisé – quel qu’il soit – est injectif, c’est-à-dire qu’il n’existe pas d’algorithme symétrique pour décrypter la chaîne codée résultante (du moins officiellement, il est toujours possible que la NSA ait pu le faire et aurait alors tout intérêt à garder cela secret).
• md5($str) : Crypte la chaîne $str en utilisant la méthode MD5.
• crc32($str) : Retourne la somme de vérification de redondance cyclique (32-bit) de la chaîne $str. Cette valeur sert généralement à vérifier l'intégrité de données transmises.
• uniqid($str [, $lcg]) : Retourne un identifiant en chaîne de caractères préfixé unique, basé sur l'heure courante, en micro-secondes. Si le paramètre optionnel booléen $lcg est vrai, uniqid() ajoutera une entropie « combined LCG » à la fin de la valeur retournée, ce qui renforcera encore l'unicité de l'identifiant.
• $x = md5 (uniqid (rand())); // $x est une chaîne difficile à prédire !!!
140
Fonctions de hachage (I)
• Les fonctions de hachage s’appliquent à des données afin d’en produire un
condensat (dit aussi hashcode). Ce condensat est calculé à partir des données
d’origine grâce à un algorithme injectif. C’est-à-dire que l’application de cet
algorithme produira toujours le même condensat si on utilise les mêmes
données de départ. Par contre, deux condensats égaux ne proviennent pas
forcément des mêmes données. Les fonctions de hachage sont généralement
utilisées pour créer des sommes de vérification ou signer des messages. La
génération de condensats joints aux données est une méthode très utilisée pour
assurer l’intégrité des données contre le piratage.
• Méthodologie : X veux envoyer un message à Y de façon a s’assurer que
personne ne pourra altérer le message (le modifier) sans que Y s’en rende
compte. X va calculer un condensat C du message et l’envoier à Y avec le
message. A réception du message, Y calcul lui aussi un condensat K du message
et le comparé au condensat C envoyé par X. Si K est différent de C, alors le
message reçu est différent du message envoyé !
• mhash($hash,$data) : retourne le condensat (binaire) de la chaîne $data,
calculé à partir de l’algorithme d’identifiant numérique $hash.
141
Fonctions de hachage (II)
• Il existe différents algorithmes de hachage :
• L’identifiant numérique passé en paramètre à mhash() est une constante. Les
algorithmes agissent sur les données par bloc de x octets. Cette taille x est
spécifiée dans le tableau ci-dessus.
Algorithme Constante (identifiant) Valeur Taille du bloc
CRC32 MHASH_CRC32 0 4
MD5 MHASH_MD5 1 16
SHA1 MHASH_ SHA1 2 20
HAVAL256 MHASH_HAVAL256 3 32
RIPEMD160 MHASH_RIPEMD160 5 20
TIGER MHASH_TIGER 7 24
GOST MHASH_GOST 8 32
CRC32B MHASH_CRC32B 9 4
HAVAL224 MHASH_HAVAL224 10 28
HAVAL192 MHASH_HAVAL192 11 24
HAVAL160 MHASH_HAVAL160 12 20
142
Fonctions de hachage (III)
• Exemple :
• $data = ‘’TOP SECRET : mise en alerte des missiles nucléaires.’’;
• $condensat = mhash(MHASH_SHA1, $data);
• echo bin2hex($condensat);
• /* affiche : ‘’28424f16ae4a53ae865601372a3462a014614c3b’’
• (la fonction bin2hex() convertit le binaire en hexadécimal) */
• mhash_get_hash_name($hash) : retourne le nom de l’algorithme dont
l’identifiant numérique est passé en paramètre.
• mhash_get_block_size() : retourne la taille des blocs utilisés par l’algorithme
dont l’identifiant numérique est passé en paramètre.
• mhash_count() : retourne le plus grand identifiant d’algorithme de hachage
connu par l’interpréteur PHP.
• mhash_keygen_s2k($hash, $pass, $salt, $nbr) : retourne une clef de $nbr
octets à partir du mot de passe $pass et du grain de sel $salt (chaîne de 8 octets
complétée par des zéros s’il le faut) en utilisant l’algorithme d’identifiant $hash
associé à l’algorithme Salted S2K spécifié dans OpenPGP (RFC 2440).
143
Fonctions de hachage (IV)
• Pour connaître les algorithmes disponibles sur votre système, vous
pouvez procéder ainsi :
• $nbr = mhash_count();
• echo ‘’<table>’’;
• for($i = 0; $i <= $nbr; $i++) {
• if(mhash_get_hash_name($i))
• echo
‘’<tr><td>$i</td><td>’’.mhash_get_hash_name($i).’’</td><td>’’.
• mhash_get_block_size($i).’’</td></tr>’’;
• }
• echo ‘’</table>’’;
144
Divers
• defined($str) : Vérifie qu'une constante existe. Renvoie VRAI si la
constante dont le nom est passé en paramètre existe ou FAUX sinon.
• sleep($nbr) : Retarde l'exécution du script durant $nbr secondes.
Attention, Apache peut être configurer pour limiter la durée d’exécution
des scripts.
• usleep($nbr) : Retarde l'exécution du script durant $nbr microsecondes.
145
Requêtes Apache (I)
• getallheaders() : renvoie un tableau associatif contant tous les entêtes de la requête en cours.
• Exemple :
• $headers = getallheaders() ;
• foreach($headers as $key => $elem) // affichage des entêtes recueillies
• echo ‘’$key : $elem<br />\n’’ ;
• Cet exemple affiche :
• Accept : */*
• Accept-Encoding : gzip, deflate
• Accept-Language : fr
• Connection : Keep-Alive
• Host : 127.0.0.1
• User-Agent : Mozilla/4.0 (compatible; MSIE 5.5; Windows 98;)
• Les fonctions décrites ici de fonctionnent que si PHP est installé en tant que module du serveur HTTP Apache.
146
Requêtes Apache (II)
• apache_lookup_uri($str) : effectue une requête partielle sur l'URI
spécifiée en paramètre et retourne un objet contenant toutes les
informations importantes la concernant.
• Les propriétés de l’objet retourné sont : status (n° erreur HTTP),
the_request (requête HTTP complète), status_line, method (méthode
HTTP utilisée), content_type (type MIME de la ressource), handler, uri,
filename (nom et chemin de la ressource en local sur le serveur),
path_info (chemin du répertoire distant), args, boundary, no_cache (vaut
‘1’ si mise en cache interdite), no_local_copy (vaut ‘1’ si copie locale
interdite), allowed, send_bodyct, bytes_sent, byterange, clength,
unparsed_uri, mtime, request_time (date de la requête au format
timestamp UNIX).
147
Requêtes Apache (III)• Exemple :
• $obj = apache_lookup_uri('http://127.0.0.1/cyberzoide/essai.php') ;
• $tab = get_object_vars($obj) ;
• foreach($tab as $key => $elem)
• echo ‘’$key : $elem <br />\n’’ ;
• Cet exemple affiche :
• status : 403
• the_request : GET /cyberzoide/essai.php HTTP/1.1
• method : GET
• uri : /cyberzoide/http://127.0.0.1/cyberzoide/essai.php
• filename : d:/internet/cyberzoide/http:
• path_info : //127.0.0.1/cyberzoide/essai.php
• no_cache : 0
• no_local_copy : 1
• allowed : 0
• sent_bodyct : 0
• bytes_sent : 0
• byterange : 0
• clength : 0
• unparsed_uri : /cyberzoide/http://127.0.0.1/cyberzoide/essai.php
• request_time : 1034444645
148
Réseau
• checkdnsrr — Résolution DNS d'une adresse IP.
• gethostbyaddr — Retourne le nom d'hôte correspondant à une IP.
• gethostbyname — Retourne l'adresse IP correspondant à un hôte.
• gethostbynamel — Retourne la liste d'IP correspondants à un hôte.
• getprotobyname — Retourne le numéro de protocole associé au nom de
protocole
• getprotobynumber — Retourne le nom de protocole associé au numéro de
protocole
• getservbyname — Retourne le numéro de port associé à un service
Internet, et un protocole.
• getservbyport — Retourne le service Internet qui correspond au port et
protocole.
• ip2long — Convertit une chaîne contenant une adresse (IPv4) IP numérique
en adresse littérale.
• long2ip — Convertit une adresse IP (IPv4) en adresse IP numérique
149
Exercice 1 : conversion de date (I)
Étudions l’exemple complet de la conversion d’une date au format anglophone MySQL
en format francophone.
Une date MySQL se présente ainsi : "YYYY-DD-MM hh:mm:ss"
YYYY : l’année numérique avec 4 chiffres, DD : le jour numérique, MM : le mois
numérique, hh : heures, mm : minutes, ss : secondes
Tous les nombres sur 2 chiffres prennent un zéro devant si nécessaire.
Par exemple : "2002-20-04 15:08:20" correspond au 20 avril 2002 à 15h08 et 20
secondes.
Ce format correspond au type DATETIME. Soit lastmodified un attribut d’une table
MySQL.
La requête suivante permet d’extraire la date de dernière modification d’un
enregistrement.
SELECT lastmodified
FROM citations
WHERE id="$id";
150
Exercice 1 : conversion de date (II)
Etape 1 : extraction de la date d’une base de données MySQL
$requet = "SELECT lastmodified FROM citations WHERE id=\‘’$id\’’’’;
if($result = mysql_query($requet)) {
if($ligne = mysql_fetch_row($result)) {
$lastmodifed = $ligne[0];
} else die(‘’Erreur base de données’’);
} else die(‘’Erreur base de données’’);
Etape 2 : séparation de la date et de l’heure
Le seul espace de la chaîne de caractères qui constitue la variable
$lastmodified est un séparateur entre la date et l’heure. On va donc la
scindée en ses deux morceaux grâce à la fonction explode qui renvoie les
sous chaînes dans un tableau dont est extrait grâce à list les deux
variables $date et $time.
list($date, $time) = explode(‘’ ’’, $lastmodified);
151
Exercice 1 : conversion de date (III)
Etape 3 : extraction des jour, mois, année
On procède selon le même schéma que précédemment sauf qu’ici c’est le tiret qui est séparateur dans la date.
list($year, $day, $month) = explode(‘’-’’, $date);
Etape 4 : extraction facultative des heure, minute, seconde
Ici, le séparateur sont les deux points.
list($hour, $min, $sec) = explode(‘’:’’, $time);
Etape 5 : affichage au format francophone
echo $lastmodified = ‘’$day/$month/$year $time’’;
Affiche ‘’20/04/2002 15:08:20’’.
On a donc transcrit en français notre date anglaise.
On peut aller encore plus loin en affichant les mois en toutes lettres et en français.
152
Exercice 1 : conversion de date
(IV)• Etape 6 : affichage en toutes lettres du mois
• On crée d’abord le tableau des mois de l’année.
• $months = array("janvier", "février", "mars", "avril", "mai", "juin",
"juillet", "août", "septembre", "octobre", "novembre", "décembre");
• Ensuite, on affiche l’élément du tableau des mois de l’année dont l’indice
est égale au numéro du mois. Comme l’indice du tableau commence à
zéro, il faut soustraire 1 à $month, cela aura aussi pour effet de caster
cette chaîne en entier (et de supprimer le zéro éventuel en première
position).
• echo $lastmodified = ‘’le $day ‘’.$months[$month-1].’’ $year à
${hour}h${min}m${sec}s’’;
• Affiche ‘’le 20 avril 2002 à 15h08m20s’’.
• Et voilà !
153
Exercice 2 : compteur de visites (I)
• On souhaite comptabilisé le nombre de chargement d’une page (la page d’accueil par exemple). On va procéder de la façon suivante : le compteur numérique sera stocké dans un fichier, à la première ligne. Ce fichier contiendra seulement un nombre, celui des visites.
• Phase 1 : incrémenter la valeur dans le fichier
• Ce fichier va s’appeler compteur.cpt.
• Principe de l’algorithme : si le fichier n’existe pas encore (file_exists), alors on le crée et on l’ouvre en écriture (fopen w) et on initialise le compteur à zéro en écrivant la chaîne ‘0’ en première ligne (fputs) et on le referme (fclose). Ensuite, ouverture du fichier en lecture plus écriture (fopen r+), lecture du nombre (fgets), incrémentation d’une unité du nombre (++), positionnement du pointeur courant du fichier en première ligne (fseek 0) et réécriture du nombre (fputs) puis fermeture (fclose).
• Cet algorithme (écrit dans la diapo suivante) est écrit directement dans le code source de la page d’accueil.
154
Exercice 2 : compteur de visites (II)
Algorithme :
$fichier = "compteur.cpt"; // affectation du nom de fichier
if( ! file_exists($fichier)) { // test d’existence
// initialisation du fichier si n’existe pas encore
$fp = fopen($fichier,"w"); // ouverture en écriture
fputs($fp,"0"); // écriture
fclose($fp); // fermeture
}
$fp = fopen($fichier,"r+"); // ouverture
$hits = fgets($fp,10); // lecture
$hits++; // incrémentation
fseek($fp,0); // positionnement
fputs($fp,$hits); // écriture
fclose($fp); // lecture
155
Exercice 2 : compteur de visites (III)Phase 2 : généralisation aux autres
pages
• Comme les internautes peuvent atterrir sur des pages internes à votre site sans passer par l’accueil, il peut être intéressant de pouvoir comptabilité des visites des autres pages. Cela permettra aussi de comparer la popularité relative de vos différentes rubriques.
• Créons donc une fonction que l’on placera dans un fichier à part par exemple compteur.php et que l’on appellera par inclusion comme ceci :
<?php include("compteur.php");
Mon_Compteur("ma_page") ?>
• Remplacez "ma_page" par un identifiant unique pour chaque page.
<?
function Mon_Compteur($page) {
$fichier = $page.".cpt";
if(!file_exists($fichier)) {
$fp = fopen($fichier,"w");
fputs($fp,"0");
fclose($fp);
}
$fp = fopen($fichier,"r+");
$hits = fgets($fp,10);
$hits++;
fseek($fp,0);
fputs($fp,$hits);
fclose($fp);
}
?>
156
Exercice 2 : compteur de visites (IV)
• Phase 3 : protection contre la redondance
• Comme un visiteur peut charger plusieurs fois la même page au cours d’une même visite, ce mode de décompte n’est pas assez précis et va surestimé le nombre réel de visiteurs. Il faut donc garder en mémoire le fait qu’un visiteur est déjà passé par la page et incrémenter le compteur seulement si ce n’est pas le cas. On va donc créer une variable de session : un tableau contenant la liste des pages visitées.
• Principe du nouvel algorithme : on teste l’existence de la variable de session $PAGES_LIST, si elle n’existe pas on la crée, on y ajoute la page en cours et on appelle la fonction Mon_Compteur. Si elle existe, on teste la présence de la page en cours dans ce tableau, si elle n’y est pas alors on l’y met et on appelle Mon_Compteur.
• L’appel est légèrement différent :
• <?php
• $page = "ma_page"; // définition du nom de la page
• include("compteur.php"); // chargement de l’algorithme
• ?>
157
Exercice 2 : compteur de visites
(V)• Voici le code à rajouter dans le fichier
compteur.php :
• session_start(); // démarrage de
la session
• if( ! isset($PAGES_LIST)) { // test de
l’existence de la variable de session
• $PAGES_LIST = array($page); //
création de la variable
• session_register($PAGES_LIST); //
ajout de la page en cours
158
Le phénomène PHP
• Sa gratuité et le libre accès à ses sources en fait un langage très populaire
surtout auprès de la communauté GNU Linux.
• Sa syntaxe C universellement connue, et sa programmation intuitive en
font le langage qui a fait la plus grande percée auprès des webdesigners
en 2001.
• De nombreux sites lui sont consacrés, on y trouve des scripts, des astuces
et même des concours de logos…
159
PHP et les bases de données
160
PHP offre un interfaçage très simple entre plusieurs base de données :
– Oracle, MySQL, SQLServer
– Sybase, Empress, FilePro
– Interbase, mSQL, PostgreSQL
– ODBC(Acess, MS-SQL, …)
La communication avec les bases de données se fait à l’aide du langage
SQL.
Présentation
• CREATE TABLE : Pour la création d’une table
• DELETE : Pour la suppression de lignes d’une table
• INSERT : Pour l’insertion d’une nouvelle ligne
• SELECT : Pour récupérer des lignes d’une table ou d’une vue
• UPDATE : Pour modifier les valeurs dans des champs
161
MySQL
• MySQL est une base de données implémentant le langage de requête SQL un
langage relationnel très connu. Cette partie suppose connue les principes des
bases de données relationnelles.
• Il existe un outil libre et gratuit développé par la communauté des programmeurs
libres : phpMyAdmin qui permet l’administration aisée des bases de données
MySQL avec php. Il est disponible sur :
http://sourceforge.net/projects/phpmyadmin/ et http://www.phpmyadmin.net.
• Avec MySQL vous pouvez créer plusieurs bases de données sur un serveur. Une
base est composée de tables contenant des enregistrements.
• Plus d'informations sont disponibles à http://www.mysql.com/.
• La documentation de MySQL est disponibles à
http://www.mysql.com/documentation/, ainsi qu'en français chez nexen :
http://dev.nexen.net/docs/mysql/.
162
Pour traiter une base de données, MySQL offre trois manières :
Utilisation des lignes de commandes
Utilisation de l’interface phpMyAdmin
Utilisation du langage php
Les opérations de base :
Création d’une base de données
Création de différentes tables
Gestion du BD avec MySQL
163
A l’aide des commandes en ligne
164
165
166
167
168
Création d’une nouvelle table dans la base stock
<?
$c = mysql_connect("localhost", "root", "");
$db = mysql_select_db("stock", $c);
$req = "create table stock.Prod_Alimentaire(
id_PA int unsigned not null auto_increment primary key,
nom varchar(32) not null,
date_limite date,
commentaire text,
prix float not null)";
mysql_query($req, $c);
?>
En utilisant des scripts PHP
169
170
Connexion (I)
Pour se connecter à une base depuis php, il faut spécifier un nom de serveur, un
nom d’utilisateur, un mot de passe et un nom de base.
Les fonctions de connexion :
• mysql_connect($server,$user,$password) : permet de se connecter au
serveur $server en tant qu’utilisateur $user avec le mot de passe $password,
retourne l’identifiant de connexion si succès, FALSE sinon
• mysql_select_db($base[,$id]) : permet de choisir la base $base, retourne
TRUE en cas de succès, sinon FALSE
• mysql_close([$id]) : permet de fermer la connexion
Les identifiants de connexion ne sont pas nécessaires si on ne se connecte qu’à une
seule base à la fois, ils permettent seulement de lever toute ambiguïté en cas de
connexions multiples.
171
Connexion (II)
Exemple 1 :
<?
if( $id = mysql_connect("localhost", "root"," ") ) {
if( $id_db = mysql_select_db("gigabase") ) {
echo "Succès 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 données.");
}
?>
172
Connexion (III)
Exemple 2 :
• @mysql_connect(‘’localhost’’,’’foobar’’,’’0478’’) or die(‘’Echec de connexion
au serveur.’’);
• @mysql_select_db(‘’gigabase’’) or die(‘’Echec de sélection de la base.’’);
• Cet exemple est équivalent au précédent mais plus court à écrire. Le symbole
@ (arobase) permet d’éviter le renvoie de valeur par la fonction qu’il précède.
• On pourra avantageusement intégrer ce code dans un fichier que l’on pourra
joindre par include(). C’est aussi un moyen de sécuriser le mot de passe de
connexion.
• Une connexion persistante évite d’avoir à rouvrir une connexion dans chaque
script. Les connexions sont automatiquement fermées au bout d’un certain
temps en cas d’absence de toute activité…
173
Interrogation
• Pour envoyer une requête à une base de donnée, il existe la fonction :
mysql_query($str) qui prend pour paramètre une chaîne de caractères qui
contient la requête écrite en SQL et retourne un identificateur de résultat ou
FALSE si échec.
• Les requêtes les plus couramment utilisées sont : CREATE (création d’une
table), SELECT (sélection), INSERT (insertion), UPDATE (mise à jour des
données), DELETE (suppression), ALTER (modification d’une table), etc.
Exemple :
$res = mysql_query("SELECT * FROM Table");
• L’identificateur de résultat $result permettra à d’autres fonctions d’extraire
ligne par ligne les données retournées par le serveur.
174
Extraction des données (I)
Une fois la requête effectuée et l’identificateur de résultat acquis, il ne reste plus
qu’à extraire les données retournées par le serveur.
Sous MySQL, l’affichage des résultats d’une requête se fait ligne par ligne. Une boucle
permettra de recueillir chacune des lignes à partir de l’identifiant de résultat.
SQL > SELECT * FROM users;
ID NAME ADDRESS
----------------------------
1 Boris Moscou 1ère ligne
2 Bill Washington 2ème ligne
3 William London 3è ligne
Une ligne contient (sauf cas particulier) plusieurs valeurs correspondants aux
différents attributs retournés par la requête. Ainsi, une ligne de résultat pourra
être sous la forme d’un tableau, d’un tableau associatif, ou d’un objet.
175
Extraction des données (II)
mysql_fetch_row($result) : retourne une ligne de résultat sous la forme d’un
tableau. Les éléments du tableau étant les valeurs des attributs de la ligne.
Retourne FALSE s’il n’y a plus aucune ligne.
Exemple 1 :
$requet = "SELECT * FROM users";
if($res = mysql_query($requet)) {
while($ligne = mysql_fetch_row($res)) {
$id = $ligne[0];
$name = $ligne[1];
$address = $ligne[2];
echo "$id - $name, $address <br />";
}
} else {
echo "Erreur de requête de base de données.";
}
Ici, on accède aux valeurs de la ligne par leur indice dans le tableau.
mysql_num_fields($res) //Nb_champs
mysql_field_name($res) //nom_champs
176
Extraction des données (III)
mysql_fetch_array($result) : retourne un tableau associatif. Les clés étant
les noms des attributs et leurs valeurs associées leurs valeurs respectives.
Retourne FALSE s’il n’y a plus aucune ligne.
Exemple 2 :
$requet = "SELECT * FROM users";
if($res = mysql_query($requet)) {
while($ligne = mysql_fetch_array($res)) {
$id = $ligne["id"];
$name = $ligne["name"];
$address = $ligne["address"];
echo "$id - $name, $address <br />";
}
} else { echo "Erreur de requête de base de données.";}
Ici, on accède aux valeurs de la ligne par l’attribut dans le tableau associatif.
177
Extraction des données (IV)
mysql_fetch_object($result) : retourne un objet. Les attributs de l’objet
correspondent à ceux de la ligne de résultat. Et les valeurs des attributs de
l’objet correspondent à ceux de la ligne de résultat. Retourne FALSE s’il n’y a
plus aucune ligne.
Exemple 3 :
$requet = "SELECT * FROM users";
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_object($result)) {
$id = $ligne->id;
$name = $ligne->name;
$address = $ligne->address;
echo "$id - $name, $address <br />";
}
} else {
echo "Erreur de requête de base de données.";
}
Ici, on accède aux valeurs par leur attribut dans l’objet.
178
Application : Création de classe SGBD
Tableau des différentes classes, attributs et méthodes :
class SGBD Nom de la classe mère.
class MySQL Nom de la classe fille, destinée pour le SGBD MySQL.
var $SGBD_login Attribut contenant le login de la base de donnée
var $SGBD_password Attribut contenant le password de la base de donnée
var $SGBD_host Attribut contenant l'hôte de la base de donnée
var $SGBD_base Attribut contenant le nom de la base de donnée
function connect() Méthode de connection au SGBD
function requete() Méthode d'envoi de requête au SGBD
function deconnect() Méthode de déconnection au SGBD
var $connect Attribut contenant la connection au SGBD
179
<?php/* Fichier : SGBD.class.php */
class SGBD // Création de la classe mère{
var $SGBD_login; // Attribut du login du SGBD
var $SGBD_password; // Attribut du password du SGBD
var $SGBD_host; // Attribut de l'hôte du SGBD
var $SGBD_base; // Attribut du nom de la BD
var $connect; // Attribut de connection
var $requete; // Attribut de requête
Classe de base : SGBD
180
// Définition du constructeurfunction SGBD ($login, $password, $host, $base)
{// Vérification des variablesif (empty ($login) || empty ($host) || empty ($base))
{// Affichage du message d'erreurecho"<b>Erreur :</b> Variable(s) non renseignées!!!";exit;
}
else {// Initialisation des attributs$this->SGBD_login = $login;$this->SGBD_password = $password;$this->SGBD_host = $host;$this->SGBD_base = $base;
}}
}?>
Classe de base : SGBD
181
<?php
/* Fichier : MySQL.SGBD.class.php */class MySQL extends SGBD // Création de la classe fille
{function connect (){
$connect = mysql_pconnect ($this->SGBD_host, $this->SGBD_login,
$this->SGBD_password);if (!$connect)
{echo "<b>Erreur :</b> Connection à MySQL impossible.";exit;
}if (!mysql_select_db ($this->SGBD_base, $connect))
{echo "<b>Erreur :</b> Connection à la base de données impossible.";exit;
}
$this->connect = $connect; }
}//Fin de la fonction connect()
Classe MySQL expansion de la classe SGBD
182
function requete ($requete){
// Exécution de la requête$result = mysql_query ($requete, $this->connect);
// Vérification de la requêteif (!$result)
{// Affichage du message d'erreurecho "<b>Erreur :</b> Impossible d'effectuer la requête.";exit;
}else {
// Initialisation de l'attribut de requête$this->requete = $result;
}} //Fin de la fonction requete()
function deconnect (){
mysql_close ($this->connect); // Déconnection de la base de données
} //Fin de la fonction deconnect()
} //Fin de la classe MySQL?>
Classe MySQL expansion de la classe SGBD
183
<?php/* Fichier : SGBD.php */
include ("SGBD.class.php"); // Inclusion de la classe mère
/* Initialisation de la variable du SGBD correspondant */$SQL = "MySQL";
// Inclusion de la classe fille du SGBD correspondantinclude ($SQL.".SGBD.class.php");
/* Création d'un nouvel objet de la classe fille + lancement du constructeur */ /* Les informations sont adaptés à mon serveur, à vous de les modifier pour quelles correspondent avec votre SGBD */
$database = new $SQL('root', '', 'localhost', 'test');
// Connection à la base de données$database->connect();
Classe MySQL expansion de la classe SGBD
184
/* Exécution d'une requête (création d'une nouvelle base de données). Attention, pour créer une nouvelle base de données, il faut que votre utilisateur ai touts les droits. Ceci n'est qu'un exemple parmi tant d'autres, vous pouvez effectuer n'importe quel requête MySQL avec cette méthode */
$database->requete ("CREATE DATABASE newBase");
// Déconnection de la base de données$database->deconnect();?>
Classe MySQL expansion de la classe SGBD