Escolar Documentos
Profissional Documentos
Cultura Documentos
} elseif {
} else {
}
switch( ) {
case : { } break
default : { }
}
53/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Structures de contrle (II)
Structures de boucle (mme syntaxe quen langage C) :
for( ; ; ) {
}
while( ) {
}
do {
} while( );
54/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Structures de contrle (III)
Linstruction break permet de quitter prmaturment une boucle.
Exemple :
while($nbr = $tab[$i++]) {
echo $nbr.<br />;
if($nbr == $stop)
break;
}
Linstruction continue permet dluder les instructions suivantes de litration
courante de la boucle pour passer la suivante.
Exemple :
for($i=1; $i<=10; $i++) {
if($tab[$i] == $val)
continue;
echo $tab[$i];
}
55/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Inclusions
On peut inclure dans un script php le contenu dun autre fichier.
require insert dans le code le contenu du fichier spcifi mme si ce nest pas
du code php. Est quivalent au prprocesseur #include du C.
Exemple :
require(fichier.php);
include value et insert chaque appel (mme dans une boucle) le contenu
du fichier pass en argument.
Exemple :
include(fichier.php);
56/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Arrt prmatur
Pour stopper prmaturment un script, il existe deux fonctions.
die arrte un script et affiche un message derreur dans le navigateur.
Exemple :
if(mysql_query($requette) == false)
die(Erreur de base de donnes la requte : <br />$requet);
exit larrte aussi mais sans afficher de message derreur.
Exemple :
function foobar() {
exit();
}
Ces fonctions stoppent tout le script, pas seulement le bloc en cours.
57/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Variables denvironnement
Le langage php est dot dune multitude de variables denvironnement que la
fonction phpinfo() permet dafficher (ainsi que bien dautres informations sur la
configuration du serveur Apache). Ces variables permettent au script daccder
des informations trs utiles voire quelques fois indispensables.
Quelques variables :
$PHP_SELF : nom du script en cours
$HTTP_ACCEPT : liste des types MIME supports par le client
$HTTP_USER_AGENT : signature du navigateur du client
$REMOTE_ADDR : adresse IP du client
$QUERY_STRING : chane au format URL contenant les paramtres passs
la page en cours
$HTTP_REFERER : URL de la source ayant renvoye le client sur la page en
cours (en lanalysant, on peut connatre le moteur de recherche utilis ainsi
que les mots cls entrs par linternaute, sil vient effectivement dun moteur de
recherche; permet dvaluer la qualit du rfrencement dun site web)
58/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Constantes du PHP (I)
Le langage php met disposition du programmeur des constantes propres au
script qui ne peuvent pas tre redfinies et qui sont bien utiles pour la gestion
des erreurs internes au script.
Les constantes prdfinies du PHP :
__FILE__ : nom du fichier en cours
__LINE__ : numro de ligne en cours
PHP_VERSION : version de PHP
PHP_OS : nom du systme d'exploitation qui est utilis par la machine qui fait
tourner le PHP
TRUE : la valeur vraie boolenne
FALSE : la valeur faux boolenne
Exemples :
$test = true;
echo __file__, __line__;
59/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Constantes du PHP (II)
Les constantes suivantes, lorsquelles sont dclares par le programmeur (en
gnral avant toute les autres instructions du script), permettent de spcifier
linterprteur php du serveur quel niveau de rigueur appliquer face aux erreurs
lors du droulement du script.
E_ERROR : dnote une erreur autre qu'une erreur d'analyse (''parse error'')
qu'il n'est pas possible de corriger.
E_WARNING : dnote un contexte dans lequel le PHP trouve que quelque
chose ne va pas. Mais l'excution se poursuit tout de mme. Ces alertes-l
peuvent tre rcupres par le script lui-mme.
E_PARSE : l'analyseur a rencontr une forme syntaxique invalide dans le
script, correction de l'erreur impossible.
E_NOTICE : quelque chose s'est produit, qui peut tre ou non une erreur.
L'excution continue. Par exemple, la tentative d'accder une variable qui
n'est pas encore affecte.
E_ALL : toutes les constantes E_* rassembles en une seule. Si vous l'utilisez
avec error_reporting(), toutes les erreurs et les problmes que PHP
rencontrera seront notifis.
60/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Constantes du PHP (III)
La fonction error_reporting($nbr) permet de fixer le niveau de rapport
d'erreurs PHP. Par dfaut php est assez permissif puisque autorise lutilisation
des variables avant leur cration, le cast implicite, lappel de fonction
retournant une valeur sans variable pour la rcuprer Cette fonction permet
de forcer une plus grande svrit tout comme loption explicite du Visual
Basic ou le paramtre Wall du compilateur gcc.
Exemples :
error_reporting( E_ERROR |
E_WARNING |
E_PARSE );
error_reporting(E_NOTICE);
valeur constante
E_USER_NOTICE 1024
E_USER_WARNING 512
E_USER_ERROR 256
E_COMPILE_WARNING 128
E_COMPILE_ERROR 64
E_CORE_WARNING 32
E_CORE_ERROR 16
E_NOTICE 8
E_PARSE 4
E_WARNING 2
E_ERROR 1
61/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Passage de paramtres un script (I)
Mthode des formulaires.
La mthode POST permet de passer des variables saisies par lutilisateur dun
script php lautre.
Exemple :
echo <form method=\post\ action=\check.php\>
Login : <input type=\text\ name =\login\ value=\$login\ /><br />
Password : <input type=\password\ name =\pass\ value=\$pass\ /><br />
<input type=\submit\ value=\Identifier\ />
</form>;
Cet exemple affiche un formulaire simple dans le navigateur : un champs de
saisie de texte et un champ de saisie de mot de passe. Lorsque lutilisateur
valide et envoie les donnes au serveur, les variables du formulaire seront
connues comme variables globales du script php destination (dsign par la
valeur de lattribut action de la balise FORM). Les variables porteront le nom
des balises (dsign par lattribut name ou id des balises de saisie).
62/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Passage de paramtres un script (II)
Toutes les variables passes en paramtres par cette mthode seront
considres comme des chanes des caractres. Mais les casts implicites
permettront de les rcuprer directement dans des variables dautre type
(entier, rel).
Exemple :
if($pass==xrT12)
echo Ok, valid user.;
/* + donnes importantes */
else
echo Acces forbiden.;
Dans cet exemple, on contrle la validit du mot de passe du formulaire
prcdent qui a t pass en paramtre au script check.php par la mthode
POST. Par exemple, on affiche des donnes confidentielles seulement si le
mot de passe est le bon.
Les donnes saisies napparatront pas dans lURL et ne seront donc pas
stockes dans les fichiers de log du serveur, contrairement la mthode GET
(attention, HTTP1.1 implique que les appels de GET doivent tre idempotents
cest--dire doivent toujours retourner la mme valeur).
63/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Passage de paramtres un script (III)
Mthode des ancres.
Les variables peuvent directement tre passes par lintermdiaire des URL.
Exemple :
$id = 20;
echo <a href=\fichier.php?action=buy&id=$id\>Acheter</a>;
Cet exemple va crer dans le script destination les variables globales $action
et $id avec les valeurs respectives buy et 20.
La barre dadresse affichera lURL suivante :
Ainsi une application web crite en php peut interagir avec lutilisateur de faon
dynamique.
64/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Chargement de fichiers (I)
Les formulaires permettent de transmettre des informations sous forme de
chanes de caractres. Ils peuvent aussi permettre un internaute de
transmettre un fichier vers le serveur.
Cest la balise HTML suivante : <input type=file /> qui permet le
chargement de fichiers. La balise FORM doit ncessairement possder
lattribut ENCTYPE de valeur multipart/form-data. La mthode utilise sera
POST. De plus, il est utile dimposer au navigateur une taille de fichier limite
par le paramtre MAX_FILE_SIZE dont la valeur numrique a pour unit
loctet.
Exemple :
echo <form action=\$PHP_SELF\ method=\POST\
ENCTYPE=\multipart/form-data\>\n
<input type=\hidden\ name=\MAX_FILE_SIZE\ value=\1024000\ />\n
<input type=\file\ name=\mon_fichier\ /><br />\n
<input type=\submit\ value=\envoyer\ />\n
</form>\n;
65/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Chargement de fichiers (II)
Pour rcuprer le fichier, il faut utiliser la variable denvironnement
$HTTP_POST_FILES qui est un tableau associatif dont les champs sont les
noms des champs HTML file du formulaire. Par exemple :
$HTTP_POST_FILES[mon_fichier] o mon_fichier est le nom donn au
champs du formulaire HTML de type file.
La variable $HTTP_POST_FILES[mon_fichier] est elle aussi un tableau
associatif possdant les champs suivants :
Si aucun fichier na t envoy par le client, la variable mon_fichier vaudra la
chane de caractres : none ou bien (chane vide).
La dure de vie du fichier temporaire sur le serveur est limite au temps
dexcution du script. Pour pouvoir exploiter ultrieurement le fichier sur le
serveur, il faut le sauvegarder dans un rpertoire et lui donner un vrai nom.
nom temporaire du fichier sur le serveur tmp_name
taille du fichier en octets size
type MIME du fichier type
nom du fichier chez le client name
Description Champ
66/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Chargement de fichiers (III)
Exemple du cas du chargement de ce qui doit tre une image GIF de moins de
1024.000 octets :
// cration dune variable contenant toutes les infos utiles
$file = $HTTP_POST_FILES[mon_fichier];
// si un fichier a bel et bien t envoy :
if($file || ($file != none)) {
// extraction du nom du fichier temporaire sur le serveur :
$file_tmp = basename($file[tmp_name]);
// vrification de la taille et du type MIME
if(($file[size] <= 1024000) || ereg(gif$,$file[type]))
// nouveau nom, emplacement et extension du fichier :
$file_def = $dir./.$name...$ext;
// copie du fichier temporaire dans son nouvel emplacement :
copy($file_tmp, $file_def);
}
}
67/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Chargement de fichiers (IV)
Il est important de vrifier avec is_file() si un fichier du mme nom existe dj
sur le serveur lemplacement o on veut copier le nouveau fichier. On pourra
supprimer lancien fichier avec unlink() (qui ne fonctionne pas avec les
serveurs fonctionnant sous Windows). basename() permet de connatre le
nom du fichier partir de son chemin (+nom) complet.
Mme si le paramtre MAX_FILE_SIZE est inclus dans le formulaire, il est
important de vrifier la taille du fichier rceptionn car rien nempche un
internaute malveillant de modifier en local sur sa machine le formulaire pour y
soustraire le champs cach MAX_FILE_SIZE afin de saturer le serveur avec
des fichiers trop volumineux.
La vrification du type MIME du fichier est galement importante dans le cas
o on ne souhaite rceptionner que des types de fichiers bien particuliers (des
images GIF, J PEG ou PNG par exemple).
68/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Chargement de fichiers (V)
Pour charger simultanment plusieurs fichiers, il suffit de rajouter des crochets
au nom du champ HTML file, et de mettre autant de champs file que dsir.
Exemple :
<input type=file name=mes_fichiers[] />
<input type=file name=mes_fichiers[] />
<input type=file name=mes_fichiers[] />
<input type=file name=mes_fichiers[] />
Dans cet exemple, linternaute pourra charger jusqu quatre fichiers.
69/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Chargement de fichiers (VI)
A la rception, la variable $HTTP_POST_FILES sera un tableau de tableaux
associatifs.
Exemple :
$files_tab = $HTTP_POST_FILES[mes_fichiers];
foreach($files_tab as $file) {
/* faire le traitement vu prcdemment :
- extraire le nom du fichier temporaire sur le serveur
- vrifier la taille et le type MIME
- donner un nouveau nom, emplacement et extension du fichier
- copier le fichier temporaire dans son nouvel emplacement */
}
Les fichiers temporaires sont gnralement placs dans le rpertoire /tmp du
serveur. Cest la directive de configuration upload_tmp_dir du fichier php.ini
qui dtermine lemplacement des fichiers chargs par la mthode POST.
70/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Chargement de fichiers (VII)
On aurait pu procder autrement quavec des crochets, en utilisant directement
dans le formulaire HTML des champs file de noms compltement diffrents.
Exemple :
<input type=file name=mon_fichier />
<input type=file name=mon_autre_fichier />
Par contre, la rception, on ne peut plus utiliser de boucle !
Exemple :
$file = $HTTP_POST_FILES[mon_fichier];
// puis faire le traitement vu prcdemment
$file = $HTTP_POST_FILES[mon_autre_fichier];
// puis refaire encore le mme traitement
Lapproche utilisant des crochets convient au cas o le nombre de fichiers
charger est dynamique (non connu lavance, dpend de paramtres divers).
71/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Chargement de fichiers (VIII)
Pour les versions PHP 3 suprieures la 3.0.16, PHP4 suprieures la 4.0.2,
il existe une autre mthode, plus simple :
Exemple 1 :
// vrification que le fichier a bien t envoy par la mthode POST
if (is_uploaded_file($mon_fichier)) {
// dplace le fichier dans le rpertoire de sauvegarde
copy($userfile, $dest_dir);
}
Exemple 2 :
/* dplace directement le fichier dans le rpertoire de sauvegarde en faisant les
vrifications ncessaires */
move_uploaded_file($mon_fichier, $dest_dir);
72/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Sessions (I)
Les sessions sont un moyen de sauvegarder et de modifier des variables tout
au cours de la visite dun internaute sans quelles ne soient visibles dans lURL
et quelque soient leurs types (tableau, objet).
Cette mthode permet de scuriser un site, despionner le visiteur, de
sauvegarder son panier (e-commerce), etc.
Les informations de sessions sont conserves en local sur le serveur tandis
quun identifiant de session est post sous la forme dun cookie chez le client
(ou via lURL si le client refuse les cookies).
Quelques fonctions :
session_start() : dmarre une session
session_destroy() : dtruit les donnes 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) : dtruit la variable $var de la session en cours
73/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Sessions (II)
Une session doit obligatoirement dmarrer avant lenvoi de toute information
chez le client : donc pas daffichage et pas denvoi de header. On peut par
exemple avoir une variable globale contenant le code HTML de la page et
lafficher la fin du script.
Les variables de session sont accessibles comme des variables globales du
script.
Exemple :
<?
$out = <html><body>;
session_start(); // dmarrage de la session
if(! isset($client_ip)) {
$client_ip = $REMOTE_ADDR;
session_register(client_ip); // enregistrement dune variable
}
/* + code de la page */
$out .= </body></html>;
echo $out;
?>
74/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Sessions (III)
Sauvegarder des variables de type objet dans une session est la mthode de
scurisation maximum des donnes : elles napparatront pas dans lURL et ne
pourront pas tre forces par un passage manuel darguments au script dans
la barre dadresse du navigateur.
Les donnes de session tant sauvegardes sur le serveur, laccs aux pages
nest pas ralenti mme si des donnes volumineuses sont stockes.
Une session est automatiquement ferme si aucune requte na t envoye
au serveur par le client durant un certain temps (2 heures par dfaut dans les
fichiers de configuration Apache).
Une session est un moyen simple de suivre un internaute de page en page
(sans quil sen rende compte). On peut ainsi sauvegarder son parcours, tablir
son profil et tablir des statistiques prcises sur la frquentation du site, la
visibilit de certaines pages, lefficacit du systme de navigation
75/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Fichiers (I)
La manipulation de fichier se fait grce un identifiant de fichier.
Quelques fonctions:
fopen($file [,$mode]) : ouverture du fichier identifi par son nom $file et dans
un mode $mode particulier, retourne un identificateur $fp de fichier ou FALSE
si chec
fopen($fp) : ferme le fichier identifi par le $fp
fgets($fp, $length) : lit une ligne de $length caractres au maximum
fputs($fp, $str) : crit la chane $str dans le fichier identifi par $fp
fgetc($fp) : lit un caractre
feof($fp) : teste la fin du fichier
file_exists($file) : indique si le fichier $file existe
filesize($file) : retourne la taille du fichier $file
filetype($file) : retourne le type du fichier $file
unlink($file) : dtruit le fichier $file
copy($source, $dest) : copie le fichier $source vers $dest
readfile($file) : affiche le fichier $file
rename($old, $new) : renomme le fichier $old en $new
76/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Fichiers (II)
Exemple typique daffichage du contenu dun fichier :
<?php
$file = fichier.txt ;
if( $fd = fopen($file, r)) { // ouverture du fichier en lecture
while ( ! feof($fd) ) { // teste la fin de fichier
$str .= fgets($fd, 1024);
/* lecture jusqu fin de ligne o des 1024 premiers caractres */
}
fclose ($fd); // fermeture du fichier
echo $str; // affichage
} else {
die(Ouverture du fichier <b>$file</b> impossible.);
}
?>
77/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Fichiers (III)
La fonction fopen permet douvrir des fichiers dont le chemin est relatif ou
absolu. Elle permet aussi douvrir des ressources avec les protocols HTTP ou
FTP. Elle renvoie FALSE si louverture choue.
Exemples :
$fp = fopen(../docs/faq.txt, r);
$fp = fopen(http://www.php.net/,r);
$fp = fopen(ftp://user:password@cia.gov/, w);
Les modes douverture :
'r' (lecture seule), 'r+' (lecture et criture), 'w' (cration et criture seule), 'w+
(cration et lecture/criture), 'a(cration et criture seule ; place le pointeur de
fichier la fin du fichier), 'a+' (cration et lecture/criture ; place le pointeur de
fichier la fin du fichier)
78/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Accs aux dossiers (I)
Il est possible de parcourir les rpertoires grce ces quelques fonctions :
chdir($str) : Change le dossier courant en $str. Retourne TRUE si succs,
sinon FALSE.
getcwd() : Retourne le nom du dossier courant (en format chane de
caractres).
opendir($str) : Ouvre le dossier $str, et rcupre un pointeur $d dessus si
succs, FALSE sinon et gnre alors une erreur PHP qui peut tre chappe
avec @.
closedir($d) : Ferme le pointeur de dossier $d.
readdir($d) : Lit une entre du dossier identifi par $d. Cest--dire retourne un
nom de fichier de la liste des fichiers du dossier point. Les fichiers ne sont pas
tris. Ou bien retourne FALSE sil ny a plus de fichier.
rewinddir($d) : Retourne la premire entre du dossier identifi par $d.
79/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Accs aux dossiers (II)
Exemple 1:
<?php
if ($dir = @opendir(.)) { // ouverture du dossier
while($file = readdir($dir)) { // lecture dune entre
echo $file<br />; // affichage du nom de fichier
}
closedir($dir); // fermeture du dossier
}
?>
$dir est un pointeur vers la ressource dossier
$file est une chane de caractres qui prend pour valeur chacun des noms de
fichiers retourns par readdir()
80/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Accs aux dossiers (III)
Il existe un autre moyen daccder aux dossiers : lutilisation de la pseudo-
classe dir.
En voici les attributs :
handle : valeur du pointeur
path : nom du dossier
En voici les mthodes :
read() : quivalent readdir($d)
close() : quivalent closedir($d)
Constructeur :
dir($str) : retourne un objet dir et ouvre le dossier $str
81/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Accs 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 dune entre
echo $entry.<br />;
}
$d->close(); // fermeture du dossier
?>
Cet exemple est quivalent au prcdent. Ils listent tous les deux les fichiers et
sous rpertoires du dossier courant.
82/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Dates et heures (I)
Les fonctions de dates et heures sont incontournables sur Internet et sont
indispensables pour la conversion en franais des dates fournies par la base
de donnes MySQL qui les code au format anglophone (YYYY-DD-MM
hh:mm:ss).
Quelques fonctions :
date($format) : retourne une chane de caractres contenant la date et/ou
lheure locale au format spcifi
getdate() : retourne un tableau associatif contenant la date et lheure
checkdate($month, $day, $year) : vrifie la validit dune date
mktime ($hour, $minute, $second, $month,$day, $year) : retourne le
timestamp UNIX correspondant aux arguments fournis cest--dire le nombre
de secondes entre le dbut de l'poque UNIX (1er J anvier 1970) et le temps
spcifi
time() : retourne le timestamp UNIX de lheure locale
83/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
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 mme chez les anglais !!!;
Exemple 3 :
$aujourdhui = getdate();
$mois = $aujourdhui['mon'];
$jour = $aujourdhui['mday'];
$annee = $aujourdhui['year'];
echo ''$jour/$mois/$annee''; // affiche 31/3/2002
84/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Dates et heures (III)
Les formats pour date :
d J our du mois sur deux chiffres [01..31] j J our du mois sans les zros initiaux
l J our de la semaine textuel en version longue et en anglais
D J our de la semaine textuel en trois lettres et en anglais
w J our de la semaine numrique [0..6] (0: dimanche)
z J our de l'anne [0..365]
m Mois de l'anne sur deux chiffres [01..12] n Mois sans les zros initiaux
F Mois textuel en version longue et en anglais
M Mois textuel en trois lettres
Y Anne sur 4 chiffres y Anne sur 2 chiffres
h Heure au format 12h [01..12] g Heure au format 12h sans les zros initiaux
H Heure au format 24h [00..23] G Heure au format 24h sans les zros initiaux
i Minutes [00..59] s Secondes [00.59]
a amou pm A AM ou PM
L Boolen pour savoir si l'anne 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 Dcalage horaire en secondes [-43200..43200]
85/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Dates et heures (IV)
Les cls du tableau associatif retourn par getdate :
seconds : secondes
minutes : minutes
hours : heures
mday : jour du mois
wday : jour de la semaine, numrique
mon : mois de l'anne, numrique
year : anne, numrique
yday : jour de l'anne, numrique
weekday : jour de la semaine, textuel complet en anglais
month : mois, textuel complet en anglais
86/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Expressions rgulires (I)
Les expressions rgulires sont un outil puissant pour la recherche de motifs
dans une chane de caractres.
Fonctions :
ereg($motif, $str) : teste lexistence du motif $motif dans la chane $str
ereg_replace($motif, $newstr, $str) : remplace les occurrences de $motif
dans $str par la chane $newstr
split($motif, $str) : retourne un tableau des sous-chanes de $str dlimites
par les occurrences de $motif
Les fonctions eregi, eregi_replace et spliti sont insensibles la casse (cest-
-dire ne diffrencient pas les majuscules et minuscules).
Exemple :
if (eregi(Paris, $adresse))
echo Vous habitez Paris.;
87/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Expressions rgulires (II)
Les motifs peuvent tre trs complexes et contenir des caractres spciaux.
Les caractres spciaux :
[abcdef] : intervalle de caractres, teste si lun deux est prsent
[a-f] : plage de caractres : teste la prsence de tous les caractres minscules
entre a et f
[^0-9] : exclusion des caractres de 0 9
\^ : recherche du caractre ^ que lon dspcialise par lantislash \
. : remplace un caractre
? : rend facultatif le caractre quil prcde
+ : indique que le caractre prcdent peut apparatre une ou plusieurs fois
* : pareil que + Mais le caractre prcdent peut ne pas apparatre du tout
{i,j} : retrouve une chane contenant entre au minimum i et au maximum j fois
le motif quil prcde
{i,} : idem mais pas de limite maximum
{i} : retrouve une squence dexactement i fois le motif quil prcde
^ : le motif suivant doit apparatre en dbut de chane
$ : le motif suivant doit apparatre en fin de chane
88/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Expressions rgulires (III)
Exemples de motifs :
[A-Z] : recherche toutes les majuscules
[a-zA-Z] : recherche toutes les lettres de lalphabet minuscules ou
majuscules
[^aeyuio] : exclu les voyelles
^Le : toute chane commenant par le mot Le suivi dun espace
$\.com : toute chane se terminant par .com (dspcialise le point)
Exemples :
if ( ereg(^.*@wanadoo\.fr, $email) ) {
echo Vous tes chez Wanadoo de France Tlcom.;
}
$email = eregi_replace(@, -nospam@, $email);
Ce dernier exemple remplace moi@ici.fr en moi-nospam@ici.fr.
89/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Expressions rgulires (IV)
Il existe des squences types :
[[:alnum:]] : [A-Za-z0-9] caractres alphanumriques
[[:alpha:]] : [A-Za-z] caractres alphabtiques
[[:digit:]] : [0-9] caractres numriques
[[:blank:]] : espaces ou tabulation
[[:xdigit:]] : [0-9a-fA-F] caractres hexadcimaux
[[:graph:]] : caractres affichables et imprimables
[[:lower:]] : [a-z] caractres minuscules
[[:upper:]] : [A-Z] caractres majuscules
[[:punct:]] : caractres de ponctuation
[[:space:]] : tout type despace
[[:cntrl:]] : caractres dchappement
[[:print:]] : caractres imprimables sauf ceux de contrle
90/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Enttes HTTP (I)
Il est possible denvoyer des enttes particuliers du protocole HTTP grce la
commande header.
Syntaxe : header($str);
Exemples :
header(Content-type: image/gif); // spcifie le type dimage gif
header(Location: ailleurs.php); // redirection vers une autre page
header(Last-Modified: .date(D, d M Y H:i:s). GMT);
Les enttes doivent obligatoirement tre envoyes avant laffichage de tout
caractre dans la page en cours. Car laffichage force lenvoi des enttes de
base.
headers_sent() : Retourne TRUE si les enttes ont dj t envoyes, FALSE
sinon.
91/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Enttes HTTP (II)
Le rle des enttes est dchanger des mta informations entre serveur et
client propos du document, de la connexion, etc.
Voici quelques enttes HTTP :
HTTP/1.0 404 Not Found
HTTP/1.0 301 Moved Permanently
Date: Sun, 07 Apr 2002 14:39:29 GMT
Server: Apache/1.3.9 (Unix) Debian/GNU
Last-Modified: Sun, 07 Apr 2002 14:39:29 GMT
Connection: keep-Alive
Keep-Alive: timeout=15, max=100
Content-type: text/html
Content-length: 1078
Transfert-Encoding: chunked
Pragma: no-cache
WWW-Authenticate: Basic realm="Domaine scuris"
Location: home.html
92/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Enttes HTTP (III)
Exemple pratique 1 :
<?php
header(Location: home2.php);
exit();
?>
Ce script effectue une redirection vers une autre page. Cest--dire que le
navigateur du client en voyant cet entte Location va charger directement la
page indique sans regarder la suite du script. La fonction exit est l pour
parer au cas impossible o le script continuerait son excution.
Note: en rgle gnrale, le format dun entte est le suivant
Champ: valeur
Avec un espace entre les deux points : et la valeur.
93/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Enttes HTTP (IV)
Exemple pratique 2 :
<?php
if(!isset($PHP_AUTH_USER)) {
header(WWW-Authenticate: Basic realm=\Mon domaine\);
header(HTTP/1.0 401 Unauthorized);
echo Echec de lidentification.;
exit();
} else {
echo Bonjour $PHP_AUTH_USER.<br />;
echo Votre mot de passe : $PHP_AUTH_PW.;
}
?>
Cet exemple fait intervenir les variables denvironnement $PHP_AUTH_USER et
$PHP_AUTH_PWqui contiennent le login et mot de passe dun utilisateur pralablement
identifi. Si lutilisateur nest pas identifi, alors on demande au navigateur dafficher une
boite de saisie de mot de passe et on spcifie que laccs est interdit. Une fois que
lutilisateur est identifi on peut contrler la validit des login et mot de passe et sils sont
corrects afficher des donnes sensibles.
Attention, cette mthode ne fonctionne pas lorsque PHP est install en tant que module
dApache mais seulement lorsquil est compil en mme temps que le serveur Apache.
94/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Mail (I)
La fonction mail envoie un message lectronique.
Syntaxe :
mail($recipient, $subject, $message[, $headers, $params]);
Exemple :
$message = Allez sur le site du CyberZode Qui Frtille, vous y trouverez
un tutoriel complet sur le PHP4 et MySQL.;
mail(vous@labas.fr, Aide sur PHP, $message);
Les arguments obligatoires sont le destinataire, le sujet du message ainsi que
le message proprement dit. Les enttes et paramtres additionnels sont
facultatifs.
Note: cette fonction ne marche que si un programme de messagerie
lectronique (appel mailer ) est pralablement install sur le serveur.
95/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Mail (II)
Exemple plus complet :
<?php
$recipient = Tony <tony@labas.com>, ;
$recipient .= Peter <peter@pwet.net>;
$subject = Notre rendez-vous;
$message = Je vous propose le samedi 15 juin \n;
$message .= --\r\n; // Dlimiteur de signature
$message .= Le CyberZode Qui Frtille;
$headers = From: Hugo Etivant <cyberzoide@multimania.com>\n;
$headers .= Content-Type: text/html; charset=iso-8859-1\n ;
$headers .= Cc: bruno@ici.fr\n;
mail($recipient, $subject, $message, $headers);
?>
96/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Mail (III)
Quelques enttes :
From: Hugo Etivant <theboss@php-help.com>\n
X-Mailer: PHP\n // maileur
X-Priority: 1\n // Message urgent!
X-Files: Truth is out there\n // entte fantaisiste !
Return-Path: <deamon@php-help.com>\n // @ retour pour erreurs
Content-Type: text/html; charset=iso-8859-1\n // Type MIME
Cc: archives@php-help.com\n // Champs CC
Bcc: bill@php.net, tony@phpinfo.net\n // Champs BCC
Reply-To: <hugo@php-help.com> // @ de retour
Format gnral des enttes :
Nom-Entete: valeur\n
97/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Evaluation dune portion de code PHP
La fonction eval($str) value la chane de caractres $str comme du code
php. Les variables ventuellement dfinies dans cette chane seront connues
dans le reste du programme principal.
Grce cette fonction, on peut conserver dans une base de donnes, des
portions de code utilisables ultrieurement.
Le code de la chane $str doit respecter les mmes contraintes que le code
normal. Notamment :
- point virgule aprs chaque instruction
- respect des squences dchappement
- etc
Exemple :
$foobar = Hello Word;
eval(echo $foobar;); // affiche Hello Word
98/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Colorisation syntaxique (I)
PHP dispose de fonctions qui permettent dafficher le code source de scripts
php et den coloriser la syntaxe.
Il nest pas recommand dutiliser les fonctions suivantes afin que vos visiteurs
ne connaissent pas votre code source et ne puissent ainsi pas exploiter des
vulnrabilit de votre application web.
highlight_file($file), show_source : Colorisation de la syntaxe d'un fichier.
Affiche la syntaxe colorise du fichier $file, en utilisant les couleurs dfinies
dans le moteur interne de PHP.
highlight_string($str) : Colorisation d'une chane de caractres contenant du
code php.
99/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Colorisation syntaxique (II)
Exemple :
<?php highlight_file(sondage.php); ?>
Rsultat affich :
<?php
$out = "<html><body>";
ConnexionSQL();
echo date("D, dM Y H:i:s");
if($action == "add"){
AddNew();
}elseif($action == "stats"){
ShowStats();
}
/* ShowSubmitForm();*/
ShowStats();
$out.= "</body></html>";
echo $out;
?>
100/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
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 dfaut
Couleur des balises HTML
Couleur des chanes
Couleur des mots rservs
101/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
URL (I)
Les URL (Uniform Ressource Location) sont les chemins de ressources sur
internet.
Exemples dURL:
http://www.google.fr/?q=cours+php
http://cyberzoide.developpez.com/php/php4_mysql.ppt
ftp://foo:0478@ftp.download.net
Leur format spcifique leur interdit de comporter nimporte quel caractre
(comme lespace par exemple).
Une URL est une chane de caractres compose uniquemment de caractres
alphanumriques incluant des lettres, des chiffres et les caractres : - (tirt), _
(soulign), . (point).
Tous les autres caractres doivent tres cods. On utilise le code suivant :
%xx. O % introduit le code qui le suit et xx est le numro hexadcimal du
caractre cod.
102/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
URL (II)
Le passage de valeur dun script lautre se fait soit par les sessions, soit par
les formulaires ou encore par lURL.
Exemple par lURL :
<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 chanes de
caractres qui pouront tre castes implicitement en entier.
Le caractre ? Indique que la suite de lURL sont des paramtres et ne font
pas partie du nom de fichier. Le caractre = spare un nom de paramtre et sa
valeur transmise. Le caractre & sparer deux paramtres.
Pour faire face au cas gnral dun paramtre dont la valeur contient des
caractres interdits, on utilise les fonction de codage.
103/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
URL (III)
Quelques fonctions de codage sur lURL :
Codage de base :
urlencode : Encode une chane en URL.
urldecode : Dcode une chane encode URL.
Codage complet :
rawurlencode : Encode une chane en URL, selon la RFC1738.
rawurldecode : Dcode une chane URL, selon la RFC1738.
Codage plus volu :
base64_encode : Encode une chane en MIME base64.
base64_decode : Dcode une chane en MIME base64
104/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
URL (IV)
urlencode($str) : code la chane $str. Les espaces sont remplacs 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 chane $str. Remplace tous les caractres
interdits par leur codage quivalent hexadcimal.
Exemple 2 :
echo <a href=\$PHP_SELF?foo=.rawurlencode($foo).\>Foo</a>;
Pour tre accessible, la valeur du paramtre devra par la suite tre dcode
dans le script darriv par la fonction rciproque adquate.
105/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
URL (V)
base64_encode($str) : code la chane $str en base 64. Cet encodage permet
des informations binaires d'tre manipules par les systmes qui ne grent
pas correctement les codes 8 bits (code ASCII 7 bit tendu aux accents
europens), comme par exemple, les corps de mail qui en gnral sont
amricains et ne gre que les 7 bits. Une chane encode en base 64 a une
taille denviron 33% suprieure celle des donnes 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
106/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
URL (VI)
parse_url($str) : retourne un tableau associatif contenant les diffrents
lments de lURL passe en paramtre. Les champs sont les suivants :
scheme (protocol), host (domaine), port (n de port), user (nom
dutilisateur ftp), pass (mot de passe ftp), path (chemin de la ressource),
query (paramtres et valeurs), et fragment.
Exemple :
$tab = parse_url(http://www.cia.gov:8080/form.php?var=val);
Cet exemple retourne le tableau suivant :
http scheme
var=val query
form.php path
8080 port
www.cia.gov host
Valeur Champ
107/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
URL (VII)
parse_str($str) : analyse la chane $str comme si ctait une URL et en extrait
les variables et valeurs respectives qui seront alors connues dans la suite du
script.
Cette fonction vite davoir crer ses propres fonctions danalyse de champs
de base de donnes o lon aurait sauvegard une url.
Exemple :
$str = nom=jean+pierre&email[]=moi@ici.fr&email[]=moi@labas.com;
parse_str($str);
echo $nom, $email[0], $email[1];
108/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Cryptage et autres rjouissances
crypt($str [, $salt]) : Retourne une chane de caractres. Crypte la chane de
caractres $str. La chane optionnelle $salt sert de base au cryptage. Cet
argument optionnel est appel grain de sel limage des germes de
nuclation lorigine des dendrites. Lalgorythme de cryptage utilis par PHP
nest a priori pas dfini (il peut varier dun systme un autre), mais cest en
gnral le DES standard ou bien encore MD5. On sait aussi que le systme
utilis quel quil soit est injectif, cest--dire quil nexiste pas dalgorithme
symtrique pour dcrypter la chane code rsultante (du moins officiellement,
il est toujours possible que la NSA ait pu le faire et aurait alors tout intrt
garder cela secret).
md5($str) : Crypte la chane $str en utilisant la mthode MD5.
crc32($str) : Retourne la somme de vrification de redondance cyclique (32-
bit) de la chane $str. Cette valeur sert gnralement vrifier l'intgrit de
donnes transmises.
uniqid($str [, $lcg]) : Retourne un identifiant en chane de caractres prfix
unique, bas sur l'heure courante, en micro-secondes. Si le paramtre
optionnel boolen $lcg est vrai, uniqid() ajoutera une entropie combined
LCG la fin de la valeur retourne, ce qui renforcera encore l'unicit de
l'identifiant.
$x = md5 (uniqid (rand())); // $x est une chane difficile prdire !!!
109/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Fonctions de hachage (I)
Les fonctions de hachage sappliquent des donnes afin den produire un
condensat (dit aussi hashcode). Ce condensat est calcul partir des donnes
dorigine grce un algorithme injectif. Cest--dire que lapplication de cet
algorithme produira toujours le mme condensat si on utilise les mmes
donnes de dpart. Par contre, deux condensats gaux ne proviennent pas
forcment des mmes donnes. Les fonctions de hachage sont gnralement
utilises pour crer des sommes de vrification ou signer des messages. La
gnration de condensats joints aux donnes est une mthode trs utilise
pour assurer lintgrit des donnes contre le piratage.
Mthodologie : X veux envoyer un message Y de faon a sassurer que
personne ne pourra altrer le message (le modifier) sans que Y sen rende
compte. X va calculer un condensat C du message et lenvoier Y avec le
message. A rception du message, Y calcul lui aussi un condensat K du
message et le compar au condensat C envoy par X. Si K est diffrent de C,
alors le message reu est diffrent du message envoy !
mhash($hash,$data) : retourne le condensat (binaire) de la chane $data,
calcul partir de lalgorithme didentifiant numrique $hash.
110/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Fonctions de hachage (II)
Il existe diffrents algorithmes de hachage :
Lidentifiant numrique pass en paramtre mhash() est une constante. Les
algorithmes agissent sur les donnes par bloc de x octets. Cette taille x est
spcifie dans le tableau ci-dessus.
20 12 MHASH_HAVAL160 HAVAL160
24 11 MHASH_HAVAL192 HAVAL192
28 10 MHASH_HAVAL224 HAVAL224
4 9 MHASH_CRC32B CRC32B
32 8 MHASH_GOST GOST
24 7 MHASH_TIGER TIGER
20 5 MHASH_RIPEMD160 RIPEMD160
32 3 MHASH_HAVAL256 HAVAL256
20 2 MHASH_ SHA1 SHA1
16 1 MHASH_MD5 MD5
4 0 MHASH_CRC32 CRC32
Taille du bloc Valeur Constante (identifiant) Algorithme
111/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Fonctions de hachage (III)
Exemple :
$data = TOP SECRET : mise en alerte des missiles nuclaires.;
$condensat = mhash(MHASH_SHA1, $data);
echo bin2hex($condensat);
/* affiche : 28424f16ae4a53ae865601372a3462a014614c3b
(la fonction bin2hex() convertit le binaire en hexadcimal) */
mhash_get_hash_name($hash) : retourne le nom de lalgorithme dont
lidentifiant numrique est pass en paramtre.
mhash_get_block_size() : retourne la taille des blocs utiliss par lalgorithme
dont lidentifiant numrique est pass en paramtre.
mhash_count() : retourne le plus grand identifiant dalgorithme de hachage
connu par linterprteur 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 (chane de 8
octets complte par des zros sil le faut) en utilisant lalgorithme didentifiant
$hash associ lalgorithme Salted S2K spcifi dans OpenPGP (RFC 2440).
112/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Fonctions de hachage (IV)
Pour connatre les algorithmes disponibles sur votre systme, vous pouvez
procder 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>;
113/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Divers
defined($str) : Vrifie qu'une constante existe. Renvoie VRAI si la constante
dont le nom est pass en paramtre existe ou FAUX sinon.
sleep($nbr) : Retarde l'excution du script durant $nbr secondes. Attention,
Apache peut tre configurer pour limiter la dure dexcution des scripts.
usleep($nbr) : Retarde l'excution du script durant $nbr microsecondes.
114/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Requtes Apache (I)
getallheaders() : renvoie un tableau associatif contant tous les enttes de la
requte en cours.
Exemple :
$headers = getallheaders() ;
foreach($headers as $key => $elem) // affichage des enttes 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 dcrites ici de fonctionnent que si PHP est install en tant que
module du serveur HTTP Apache.
115/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Requtes Apache (II)
apache_lookup_uri($str) : effectue une requte partielle sur l'URI spcifie en
paramtre et retourne un objet contenant toutes les informations importantes la
concernant.
Les proprits de lobjet retourn sont : status (n erreur HTTP), the_request
(requte HTTP complte), status_line, method (mthode HTTP utilise),
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
rpertoire 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 requte au format timestamp UNIX).
116/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Requtes 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
117/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Rseau
checkdnsrr Rsolution DNS d'une adresse IP.
gethostbyaddr Retourne le nom d'hte correspondant une IP.
gethostbyname Retourne l'adresse IP correspondant un hte.
gethostbynamel Retourne la liste d'IP correspondants un hte.
getprotobyname Retourne le numro de protocole associ au nom de
protocole
getprotobynumber Retourne le nom de protocole associ au numro de
protocole
getservbyname Retourne le numro de port associ un service Internet, et
un protocole.
getservbyport Retourne le service Internet qui correspond au port et
protocole.
ip2long Convertit une chane contenant une adresse (IPv4) IP numrique en
adresse littrale.
long2ip Convertit une adresse IP (IPv4) en adresse IP numrique
118/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Exercice 1 : conversion de date (I)
Etudions lexemple complet de la conversion dune date au format anglophone
MySQL en format francophone.
Une date MySQL se prsente ainsi : YYYY-DD-MM hh:mm:ss
YYYY : lanne numrique avec 4 chiffres, DD : le jour numrique, MM : le
mois numrique, hh : heures, mm : minutes, ss : secondes
Tous les nombres sur 2 chiffres prennent un zro devant si ncessaire.
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 dune
table MySQL.
La requte suivante permet dextraire la date de dernire modification dun
enregistrement.
SELECT lastmodified
FROM citations
WHERE id=$id;
119/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Exercice 1 : conversion de date (II)
Etape 1 : extraction de la date dune base de donnes 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 donnes);
} else die(Erreur base de donnes);
Etape 2 : sparation de la date et de lheure
Le seul espace de la chane de caractres qui constitue la variable
$lastmodified est un sparateur entre la date et lheure. On va donc la
scinde en ses deux morceaux grce la fonction explode qui renvoie les
sous chanes dans un tableau dont est extrait grce list les deux variables
$date et $time.
list($date, $time) = explode( , $lastmodified);
120/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Exercice 1 : conversion de date (III)
Etape 3 : extraction des jour, mois, anne
On procde selon le mme schma que prcdemment sauf quici cest le tiret
qui est sparateur dans la date.
list($year, $day, $month) = explode(-, $date);
Etape 4 : extraction facultative des heure, minute, seconde
Ici, le sparateur 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 franais notre date anglaise.
On peut aller encore plus loin en affichant les mois en toutes lettres et en
franais.
121/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Exercice 1 : conversion de date (IV)
Etape 6 : affichage en toutes lettres du mois
On cre dabord le tableau des mois de lanne.
$months = array(" janvier" , " fvrier" , " mars" , " avril" , " mai" , " juin" ,
" juillet" , " aot" , " septembre" , " octobre" , " novembre" , " dcembre" );
Ensuite, on affiche llment du tableau des mois de lanne dont lindice est
gale au numro du mois. Comme lindice du tableau commence zro, il faut
soustraire 1 $month, cela aura aussi pour effet de caster cette chane en
entier (et de supprimer le zro ventuel en premire position).
echo $lastmodified = le $day .$months[$month-1]. $year
${hour}h${min}m${sec}s;
Affiche le 20 avril 2002 15h08m20s.
Et voil !
122/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Exercice 2 : compteur de visites (I)
On souhaite comptabilis le nombre de chargement dune page (la page
daccueil par exemple). On va procder de la faon suivante : le compteur
numrique sera stock dans un fichier, la premire ligne. Ce fichier
contiendra seulement un nombre, celui des visites.
Phase 1 : incrmenter la valeur dans le fichier
Ce fichier va sappeler compteur.cpt.
Principe de lalgorithme : si le fichier nexiste pas encore (file_exists), alors on
le cre et on louvre en criture (fopen w) et on initialise le compteur zro en
crivant la chane 0 en premire ligne (fputs) et on le referme (fclose).
Ensuite, ouverture du fichier en lecture plus criture (fopen r+), lecture du
nombre (fgets), incrmentation dune unit du nombre (++), positionnement du
pointeur courant du fichier en premire ligne (fseek 0) et rcriture du nombre
(fputs) puis fermeture (fclose).
Cet algorithme (crit dans la diapo suivante) est crit directement dans le code
source de la page daccueil.
123/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Exercice 2 : compteur de visites (II)
Algorithme :
$fichier = " compteur.cpt" ; // affectation du nom de fichier
if( ! file_exists($fichier)) { // test dexistence
// initialisation du fichier si nexiste 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++; // incrmentation
fseek($fp,0); // positionnement
fputs($fp,$hits); // criture
fclose($fp); // lecture
124/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Exercice 2 : compteur de visites (III)
Phase 2 : gnralisation aux autres
pages
Comme les internautes peuvent atterrir
sur des pages internes votre site sans
passer par laccueil, il peut tre
intressant de pouvoir comptabilit des
visites des autres pages. Cela
permettra aussi de comparer la
popularit relative de vos diffrentes
rubriques.
Crons donc une fonction que lon
placera dans un fichier part par
exemple compteur.php et que lon
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);
}
?>
125/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Exercice 2 : compteur de visites (IV)
Phase 3 : protection contre la redondance
Comme un visiteur peut charger plusieurs fois la mme page au cours dune
mme visite, ce mode de dcompte nest pas assez prcis et va surestim le
nombre rel de visiteurs. Il faut donc garder en mmoire le fait quun visiteur
est dj pass par la page et incrmenter le compteur seulement si ce nest
pas le cas. On va donc crer une variable de session : un tableau contenant la
liste des pages visites.
Principe du nouvel algorithme : on teste lexistence de la variable de session
$PAGES_LIST, si elle nexiste pas on la cre, on y ajoute la page en cours et
on appelle la fonction Mon_Compteur. Si elle existe, on teste la prsence de
la page en cours dans ce tableau, si elle ny est pas alors on ly met et on
appelle Mon_Compteur.
Lappel est lgrement diffrent :
<?php
$page = " ma_page" ; // dfinition du nom de la page
include(" compteur.php" ); // chargement de lalgorithme
?>
126/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Exercice 2 : compteur de visites (V)
Voici le code rajouter dans le fichier compteur.php :
session_start(); // dmarrage de la session
if( ! isset($PAGES_LIST)) { // test de lexistence de la variable de session
$PAGES_LIST = array($page); // cration de la variable
session_register($PAGES_LIST); // ajout de la page en cours
Mon_compteur($page); // incrmentation du compteur
} else {
if( ! in_array($page, $PAGES_LIST)) { // test de redondance
$PAGES_LIST[ ] = $page; /* ajout dans la variable
de session pour viter la redondance */
Mon_compteur($page); // incrmentation du compteur
}
}
127/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Le phnomne PHP
Sa gratuit et le libre accs ses sources en fait un langage trs populaire
surtout auprs de la communaut GNU Linux.
Sa syntaxe C universellement connue, et sa programmation intuitive en font le
langage qui a fait la plus grande perce auprs des webdesigners en 2001.
De nombreux sites lui sont consacrs, on y trouve des scripts, des astuces et
mme des concours de logos
128/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Partie 2 : MySQL
129/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Prsentation
MySQL est une base de donnes implmentant le langage de requte SQL un
langage relationnel trs connu. Cette partie suppose connue les principes des
bases de donnes relationnelles.
Il existe un outil libre et gratuit dvelopp par la communaut des
programmeurs libres : phpMyAdmin qui permet ladministration aise des
bases de donnes MySQL avec php. Il est disponible sur :
http://sourceforge.net/projects/phpmyadmin/ et http://www.phpmyadmin.net.
Avec MySQL vous pouvez crer plusieurs bases de donnes sur un serveur.
Une base est compose 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 franais chez nexen :
http://dev.nexen.net/docs/mysql/.
130/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Connexion (I)
Pour se connecter une base depuis php, il faut spcifier un nom de serveur,
un nom dutilisateur, 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 quutilisateur $user avec le mot de passe $password,
retourne lidentifiant de connexion si succs, FALSE sinon
mysql_select_db($base[,$id]) : permet de choisir la base $base, retourne
TRUE en cas de succs, sinon FALSE
mysql_close([$id]) : permet de fermer la connexion
mysql_pconnect : idem que mysql_connect sauf que la connection est
persistante, il ny a donc pas besoin de rouvrir la connexion chaque script qui
travaille sur la mme base.
Les identifiants de connexion ne sont pas ncessaires si on ne se connecte
qu une seule base la fois, ils permettent seulement de lever toute
ambigut en cas de connexions multiples.
131/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Connexion (II)
Exemple 1 :
if( $id = mysql_connect(localhost,foobar,0478) ) {
if( $id_db = mysql_select_db(gigabase) ) {
echo Succs de connexion.;
/* code du script */
} else {
die(Echec de connexion la base.);
}
mysql_close($id);
} else {
die(Echec de connexion au serveur de base de donnes.);
}
132/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Connexion (III)
Exemple 2 :
@mysql_connect(localhost,foobar,0478) or die(Echec de
connexion au serveur.);
@mysql_select_db(gigabase) or die(Echec de slection de la base.);
Cet exemple est quivalent au prcdent mais plus court crire. Le symbole
@(arobase) permet dviter le renvoie de valeur par la fonction quil prcde.
On pourra avantageusement intgrer ce code dans un fichier que lon pourra
joindre par include(). Cest aussi un moyen de scuriser le mot de passe de
connexion.
Une connexion persistante vite davoir rouvrir une connexion dans chaque
script. Les connexions sont automatiquement fermes au bout dun certain
temps en cas dabsence de toute activit
133/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Interrogation
Pour envoyer une requte une base de donne, il existe la fonction :
mysql_query($str) qui prend pour paramtre une chane de caractres qui
contient la requte crite en SQL et retourne un identificateur de rsultat ou
FALSE si chec.
Les requtes les plus couramment utilises sont : CREATE (cration dune
table), SELECT (slection), INSERT (insertion), UPDATE (mise jour des
donnes), DELETE (suppression), ALTER (modification dune table), etc.
Exemple :
$result = mysql_query(SELECT address FROM users WHERE
name=\$name\);
Cet exemple recherche ladresse de lutilisateur portant pour nom la valeur de
la chane $name. Lidentificateur de rsultat $result permettra dautres
fonctions dextraire ligne par ligne les donnes retournes par le serveur.
Attention, contrairement Oracle SQL, les requtes MySQL ne se terminent
pas par un point virgule ; et nautorisent pas les SELECT imbriqus.
134/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Extraction des donnes (I)
Une fois la requte effectue et lidentificateur de rsultat acquis, il ne reste
plus qu extraire les donnes retournes par le serveur.
Sous Oracle, laffichage des rsultats dune requte se fait ligne par ligne, sous
MySQL, cest pareil. Une boucle permettra de recueillir chacune des lignes
partir de lidentifiant de rsultat.
SQL > SELECT * FROM users;
ID NAME ADDRESS
----------------------------
1 Boris Moscou 1re ligne
2 Bill Washington 2me ligne
3 William London 3 ligne
Une ligne contient (sauf cas particulier) plusieurs valeurs correspondants aux
diffrents attributs retourns par la requte. Ainsi, une ligne de rsultat pourra
tre sous la forme dun tableau, dun tableau associatif, ou dun objet.
135/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Extraction des donnes (II)
mysql_fetch_row($result) : retourne une ligne de rsultat sous la forme dun
tableau. Les lments du tableau tant les valeurs des attributs de la ligne.
Retourne FALSE sil ny a plus aucune ligne.
Exemple 1 :
$requet = SELECT * FROM users;
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_row($result)) {
$id = $ligne[0];
$name = $ligne[1];
$address = $ligne[2];
echo $id - $name, $address <br />;
}
} else {
echo Erreur de requte de base de donnes.;
}
Ici, on accde aux valeurs de la ligne par leur indice dans le tableau.
136/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Extraction des donnes (III)
mysql_fetch_array($result) : retourne un tableau associatif. Les cls tant les
noms des attributs et leurs valeurs associes leurs valeurs respectives.
Retourne FALSE sil ny a plus aucune ligne.
Exemple 2 :
$requet = SELECT * FROM users;
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_array($result)) {
$id = $ligne[id];
$name = $ligne[name];
$address = $ligne[address];
echo $id - $name, $address <br />;
}
} else {
echo Erreur de requte de base de donnes.;
}
Ici, on accde aux valeurs de la ligne par lattribut dans le tableau associatif.
137/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Extraction des donnes (IV)
mysql_fetch_object($result) : retourne un objet. Les attributs de lobjet
correspondent ceux de la ligne de rsultat. Et les valeurs des attributs de
lobjet correspondent ceux de la ligne de rsultat. Retourne FALSE sil ny 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 requte de base de donnes.;
}
Ici, on accde aux valeurs par leur attribut dans lobjet.
138/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Fonctions additionnelles
Quelques fonctions supplmentaires trs utiles :
mysql_free_result($result) : efface de la mmoire du serveur les lignes de
rsultat de la requte identifies par $requet. Trs utile pour amliorer les
performances du serveur.
mysql_insert_id([$id]) : retourne lidentifiant dun attribut cl primaire
AUTO_INCREMENT de la dernire insertion.
mysql_num_fields($result) : retourne le nombre dattributs du rsultats.
mysql_num_rows($result) : retourne le nombre de lignes du rsultats. Et
ainsi permet de remplacer le while par un for.
Penser bien tester la valeur de retour des fonctions (mysql_query et les
autres) afin de dtecter toute erreur et dviter de polluer votre page avec des
Warnings.
139/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Partie 3 : Un exemple concret
140/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Prsentation
Cet exemple concret dapplication dynamique crite en php et utilisant une
base MySQL sinspire directement de la rubrique Citations de profs que jai eu
raliser pour le site web de lAssociation des Miagistes Lyonnais dont je suis
le webmaster (anne 2001-2002).
Le site web en question est : http://www.miag-rezo.net
Cette rubrique consiste en un seul script qui propose les services suivants :
1) soumettre une nouvelle citation (laisse lapprobation pralable dun
administrateur avant affichage publique)
2) lancer une recherche par critres dans la base (parmi les citations valides
par ladmin)
3) afficher toutes les citations (valides)
4) afficher des statistiques
141/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Cration de la table des citations (I)
Pour stocker les citations, on cr une table citation dans notre base de
donnes MySQL, en voici le schma :
CREATE TABLE citation (
id MEDIUMINT UNSIGNED not null AUTO_INCREMENT,
body TEXT not null ,
author VARCHAR (40) not null ,
sender VARCHAR (40) ,
accept ENUM ('yes','no') DEFAULT 'no' not null ,
PRIMARY KEY (id)
)
Les simples quotes autour du nom de la table servent scuriser ce nom.
Il est donc cre une table ayant une cl primaire (un entier positif qui sauto-
incrmente lors des insertions), un champ body (le corps de la citation), un
champ author (le nom du prof), un champ sender (nom de llve qui la
propose, facultatif) et un champ accept de validation par un administrateur (on
ne va pas laisser afficher nimporte quelle obscnit).
142/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Cration de la table des citations (II)
Bien quil aurait t tout aussi simple de la crer avec une requte
mysql_query, cette table a t cre grce loutil phpMyAdmin (qui a t
scuris avec les fichiers .htaccess et .htpasswd).
Cet utilitaire rend la gestion
dune base de donnes
(surtout la cration de tables)
trs intuitive et sans effort.
Il permet aussi de crer un
fichier de sauvegarde, de
modifier les valeurs des
enregistrements, etc.
143/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Formulaire de soumission (I)
Il est intressant de permettre aux lves de poster aux mmes des paroles
de profs entendues en cours. Pour cela, ils remplissent un formulaire qui
contient les champs suivants :
1) Une balise SELECT qui contient la liste de tous les profs de la base
2) Une autre SELECT avec la liste des annes
3) Une autre SELECT avec la liste des semestres
4) Un TEXTAREA pour crire le corps de la citation
5) Un INPUT TEXT pour que linternaute laisse son pseudonyme
6) Un champs HIDDEN qui spcifie laction raliser (ici : proposer)
144/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Formulaire de soumission (II)
En voici la source HTML :
<form action=$PHP_SELF'' method=''post''>
<b>Proposer une citation</b><br />
Prof : <select name=''author''>
<option value=''''> </option>
<option value=''Aubert ''>Aubert</option>
<option value=''Bonneville''>Bonneville</option>
</select> // mme chose pour year et semestre
<textarea name=''body'' cols=''40'' rows=''5''></textarea><br />
Votre pseudo(*) : <input type=''text'' name='sender'' value='''' />
<input type=''hidden'' name=''action'' value=''proposer />
<input type=''submit'' value=''Valider /><br />
Tous les champs sauf celui avec astrisque sont obligatoires.
</form>
145/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Formulaire de soumission (III)
En voici la source php :
function PrintSubForm()
{
global $out, $author, $body, $year, $semestre, $proposer;
$out .= "<form action=\"$PHP_SELF\" method=\"post\">";
$out .= "<b>Proposer une citation</b><br />";
$out .= " Prof : <select name=\"author\">";
$requet = "SELECT DISTINCT author FROM citation ORDER BY author ASC";
$result = mysql_query($requet);
$out .= "<option value=\"\"> ";
while($ligne = mysql_fetch_object($result)) {
if($author == $ligne->author) { $selected = "selected"; } else { $selected=""; }
$out .= "<option value=\"".$ligne->author."\" $selected>".ligne->author. "</option>";
}
$out .= "</select><br />"; // mme chose pour year et semestre
$out .= "<textarea name=\"body\" cols=\"40\" rows=\"5\">$body</textarea><br />";
$out .= "Votre pseudo(*) : <input type=\"text\" name=\"sender\" value=\"$proposer\" />";
$out .= "<input type=\"hidden\" name=\"action\" value=\"proposer\" />";
$out .= "<input type=\"submit\" value=\"Valider\" /><br />";
$out .= "Tous les champs sauf celui avec astrisque sont obligatoires.";
$out .= "</form>";
}
146/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Contrle des donnes soumisses (I)
Lors du dmarrage du script, la variable $action (qui provient du champ
HIDDEN action) est teste :
switch($action)
{
case "chercher" : PrintSearchResults(); break;
case "proposer" : InsertCitation(); break;
case "stats" : PrintStats(); break;
default : PrintCitations();
}
Si laction rsulte de la validation du formulaire de soumission dune nouvelle
citation ($action == proposer), alors on va inserer la nouvelle citation
(aprs vrification des donnes) par lappel de la fonction InsertCitation().
147/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Contrle des donnes soumisses (II)
Le contrle des donnes fournies par le formulaire se fait ainsi :
1) On vrifie que les attributs obligatoires ont bien t saisis.
2) On vrifie que le nom du prof et les valeurs anne et semestre sont bien
prsents dans la base, des fois quun petit malin essaierait de pirater notre
base en y rajoutant des valeurs incohrentes ou en voulant faire planter notre
script !
3) Et si tout se passe bien jusque l, on insert les donnes par la commande
suivante :
$requet = "INSERT INTO citation(author,body,year,semestre,sender)
VALUES(\"$author\",\"$body\",\"$year\",\"$semestre\" \"$sender\")";
if(!($result = mysql_query($requet))) {
$out .= "Erreur de base de donnes.";
}
148/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Affichage
La requte suivante permet dafficher les citations dans lordre des plus
rcentes, et dans lordre alphabtique des nom de prof.
SELECT *
FROM citation
WHERE accept="yes"
ORDER BY year DESC, semestre DESC, author ASC, id DESC;
149/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Statistiques
La requte suivante permet de calculer des statistiques sommaires :
SELECT author, COUNT(id) nbr
FROM citation
WHERE accept="yes"
GROUP BY author
ORDER BY nbr DESC, author ASC
Cette requte partitionne la table des citations par prof et compte le nombre
de citations par profs en les triant dans lordre dcroissant des profs les plus
productifs. Si deux profs arrivent ex quo, alors on les affichent dans lordre
alphabtique. On slectionne une citation condition quelle ait t valide
par un administrateur.
dcompte
condition
partition
tri
150/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
PARTIE 4 : Mthodologie
151/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Mthodologie gnrale
Ce manire gnrale, il faut :
1) Programmer orient objet en crant des objets, comme par exemple un
objet citation dont les mthodes sont : ajouter, afficher, proposer, statistiques
dont peut hriter un autre objet : citationvalide.
2) Toujours contrler les donnes saisies par un utilisateur afin dviter tout
piratage ; ne jamais prsupposer lhonntet de linternaute dans un univers
aussi impersonnel que lest Internet.
3) Ne pas rpercuter automatiquement les donnes saisies par un utilisateur
auprs des autres internautes sans contrle ; faire valider les donnes par un
administrateur.
4) Utiliser des variables de session, puisque celles globales peuvent tres
forces par des passages en URL.
Le respect de ces quelques conseils devrait vous viter des mauvaises
surprises.
152/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Rcupration et sauvegarde de donnes
Pour rcuprer les donnes dun visiteur, utilisez un formulaire HTML.
Ce formulaire pourra envoyer les donnes saisies par mail votre adresse
condition que le client soit quip dun logiciel de messagerie et dun compte
mail valide (<FORM action=mailto:webmaster@monsite.com method=post
enctype=text/plain>). Ou bien envoyez les donnes saisies un script PHP
qui saura quoi en faire (<FORM action=monscript.php method=post>).
Le script de sauvegarde aura plusieurs mthodes au choix :
Mthode 1 : Fichier de sauvegarde (texte ou binaire), pratique pour les
compteurs de visites.
Mthode 2 : Base de donnes (gnralement MySQL), souvent plus simple,
plus rapide et plus adapt pour les donnes volumineuses.
Mthode 3 : Variables de session, inconvnient : dure de vie limite au seul
temps de visite de linternaute.
Mthode 4 : Envoyer des cookies aux clients, qui peut les refuser
153/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Rafrachissement de la page
Pour rafrachir la page en cours (la recharger ou en changer automatiquement)
sans intervention de linternaute, vous disposez dau moins trois solutions.
Solution 1 :
Utiliser une mta balise dans lentte de votre page HTML :
<HEAD><META HTTP-EQUIV="Refrech" CONTENT="n; URL=url"></HEAD>
O n est la dure en secondes aprs laquelle faire la redirection et url est
ladresse de la page charger.
Solution 2 :
Utiliser le J avaScript dans le corps de votre page HTML :
<SCRIPT language=JavaScript> document.location = url; </SCRIPT>
Solution 3 :
Utiliser la fonction header avec lentte Location :
<?php header(Location: url); ?>
154/154
http://cyberzoide.developpez.com Le CyberZode Qui Frtille
Historique
6 octobre 2002 : nombres alatoires amliors, constantes mathmatiques,
formatage dun nombre, url parsing, chargement de fichiers, requtes Apache,
algos de hachage (154 diapos)
30 aot 2002 : partie 4 Mthodologie , documentation en ligne, quelques
corrections (135 diapos)
22 avril 2002 : cryptage, exercices : conversion de date et compteur de
visites (130 diapos)
11 avril 2002 : fonctions dynamiques, accs aux dossiers, enttes HTTP,
URL, Mail, coloration syntaxique, exemple de script, la petite histoire du PHP,
valuation dune portion de code, quelques dveloppements (chanes,
tableaux, fonctions, classes) (123 diapos)
2 avril 2002 : quelques corrections
1er avril 2002 : cration du document par Hugo Etivant (83 diapos)
Et remerciements spciaux tout ceux qui par leurs commentaires ont
contribu lamlioration de ce document.
Hugo Etivant
cyberzoide@yahoo.fr
http://cyberzoide.developpez.com/