Académique Documents
Professionnel Documents
Culture Documents
-1-
Introduction............................................................................................................... 5
1.1
Origine de ce langage.................................................................................................... 5
1.2
Atouts ............................................................................................................................. 5
1.3
Identifiants..................................................................................................................... 6
2.2
2.3
2.4
2.5
Constantes ..................................................................................................................... 9
2.6
3.2
Switch ........................................................................................................................... 10
3.3
3.4
Tableaux .................................................................................................................. 12
4.1
4.2
Initialisation................................................................................................................. 13
4.3
4.4
Entres/Sorties ........................................................................................................ 15
5.1
5.2
5.3
6.2
6.2.1
Dclarations ............................................................................................................. 17
-2-
6.2.2
Arguments................................................................................................................ 18
6.2.3
Lecture/criture de fichiers..................................................................................... 18
7.1
8.2
8.3
8.4
10
Srialisation..................................................................................................................... 23
10.1
Mail........................................................................................................................... 24
10.2
FTP ........................................................................................................................... 24
11
11.1
11.2
11.3
11.4
Autres fonctions....................................................................................................... 26
11.5
12
12.1
12.2
12.3
12.4
12.5
12.6
12.7
12.8
13
13.1
14
15
Contrle de sessions............................................................................................. 34
-3-
15.1
15.2
16
PHP-Ajax ............................................................................................................. 36
17
18
19
Conclusion ........................................................................................................... 46
-4-
1
1.1
Introduction
Origine de ce langage
PHP, crit en C, est n en 1994 avec le site de Rasmus Lerdof. Il dsirait mettre son CV en ligne et garder
une trace des utilisateurs. Ds le dpart, il supportait les requtes SQL, et devant le nombre de personnes
intresses, il a dcid de mettre en ligne la version 1.0 de PHP (Personal Home Page). Cette version
permettait de plus de contrler les saisies des utilisateurs et de remplacer certaines commandes.
Devant le succs et le nombre de requtes des programmeurs, en utilisant Bison/Yacc est mis en uvre
PHP 2.0. Cette version ajoutera des structures conditionnelles, des boucles et encore bien dautres
amliorations. Elle permettait galement au programmeur dintgrer des instructions de programmation
puissantes lintrieur de leur code HTML.
A l'origine, PHP signifiait Personnal Home Page mais ce nom a chang pour tre mis la mode GNU
(Gnu is not Unix), cest dure un acronyme rcursif. Il signifie maintenant PHP : Hypertext
Preprocessor.
Le script PHP est maintenant directement compil dans le serveur Web (Apache par exemple), les
instructions sont donc excutes sur le serveur lui mme.
Ce pauvre Rasmus devenant un peu dbord, il a fait appel dautres programmeurs de renom et le 6 juin
1998 est n PHP 3.0, point de dpart de linvasion PHP !
1.2
Atouts
On peut se demander pourquoi utiliser du PHP alors quil existe bien dautres technologies et en
particulier le Perl. Microsoft propose les ASP (Active Server Pages) avec son serveur Web IIS (Internet
Information Server) et Sun propose les JSP (Java Server Pages) Il existe dautres solutions plus ou moins
propritaires, la fois gratuites et payantes (comme Coldfusion).
Le choix de PHP se ralise vite : cest le meilleur ! Il intgre tous les avantages des autres solutions. Son
code est rapide produire et excuter. Il tourne sur diffrents serveurs (Apache, IIS, WebTen, ) et
diffrents systmes dexploitation (UNIX, Windows et Macintosh, etc.). Il permet non seulement des
performances leves mais galement possde des interfaces vers la plupart des SGBD du march, il
intgre de nombreuses bibliothques pour faciliter le dveloppement de tches Web et enfin il possde un
autre avantage, qui, sil nest pas son principal, en est un de plus : il est gratuit.
1.3
De manire classique, voici lternel Hello World dans sa version PHP. La commande print (ou echo)
permet dafficher le texte entre parenthses et/ou guillemets.
<HTML><BODY>
<?php
print "Hello World<P>";
?>
</BODY></HTML>
Le code PHP est plac directement dans le code source HTML, il est encadr par deux balises spciales
qui sont destines tre reconnues par l'interprteur PHP. On aurait tout aussi bien pu utiliser les balises
-5-
Attention,
Il ne faut pas confondre PHP et JavaScript. Il s'agit de deux choses diffrentes PHP est un langage de
script destin tre excut par le serveur, alors que le JavaScript est charg et excut dans le
navigateur, donc cot client . PHP est donc comparable aux ASP de Microsoft ou aux CGI
standards dans le sens o ils sexcutent tous les deux ct serveur .
Enfin, il est galement possible dutiliser les tags sous leur forme courte (<? et ?>), mais cette possibilit
n'est pas active par dfaut. Il faudra donc modifier le paramtrage de PHP sur la machine serveur.
Quand on affiche dans le navigateur le source HTML d'une page gnre par PHP, on ne voit que le code
HTML rsultant. Si vous regardez le source de la page prcdente dans votre navigateur, vous obtiendrez
a :
<HTML><BODY>
Hello World<P>
</BODY></HTML>
2
2.1
PHP propose trois types de donnes : les entiers, les dcimaux, et les chanes de caractres. PHP respecte
la casse lors de lidentification des variables. Ainsi, maVariable est diffrent que MaVariable. Une
variable est toujours prcde du signe $ que les amateurs de Shell connaissent bien.
2.2
Types de donnes
En fait, quand on utilise du PHP, on ne soccupe pas de distinguer le types des variables. Elles prennent le
type des donnes qui leur sont affectes. Nanmoins, il est possible de contourner ceci si ncessaire en
utilisant la fonction settype qui attribue un type spcifique une variable. Il existe une autre solution par
lutilisation des fonctions intval, doubleval et strval permettant de raliser des conversions de chanes en
entiers par exemple pour intval.
Il existe nanmoins un certain nombre de types de donnes :
Entier: pour les nombres entiers,
Float(ou Double) : nombres rels,
Chanes: pour les chanes de caractres,
Boolen: pour des valeurs de type vrai ou faux,
Tableau: pour stocker des donnes du mme type,
Objet: pour stocker des instances de classes,
Deux types particuliers sont galement proposs :
NULL: pour des valeurs de type non dfinies,
ressource: retournes frquemment par des fonctions accdant des ressources externes (fichiers, BD,
etc.). elles sont rarement manipules.
-6-
Exemple
<?
$temperature = 30 ;
settype($temperature, double ) ;
print Double : $temperature <BR> ;
settype($temperature, integer) ;
print Integer : $temperature <BR> ;
settype($temperature, string) ;
print String : $temperature <BR>;
$temperature = 30 ;
print <BR>String <BR>;
print strval($temperature);
print <BR>Double <BR>;
print doubleval($temperature);
print <BR>Integer <BR>;
print intval($temperature);
?>
Il est galement possible de raliser ceci de manire implicite en utilisant la coercition vue en C. Ainsi,
intval($temperature) et (integer) $temperature sont identiques.
Afin de connatre le type des variables, un certain nombre de fonctions sont disponibles et retournent true
ou false :
is_array(),
is_double(), is_float(), is_real() - c'est la mme fonction,
is_long(), is_int(), is_integer()- c'est la mme fonction,
is_string(),
is_object(),
is_ressource(),
is_null(),
is_scalar() - si la variable est scalaire, c'est dire si c'est un entier, une chane, ou un double.
is_numeric() - si la variable est un nombre ou une chane numrique,
is_callable()- le la variable est un nom de fonction valide.
Trois fonctions permettent galement de connatre l'tat de variables :
-7-
isset () : retourne true ou false selon que la variable passe en paramtre existe ou pas,
unset () : supprime la variable passe en paramtre,
empty() : retourne un boolen selon que la variable est non vide te non nulle.
2.3
A linverse dautres langages comme le C, il est inutile en PHP de dclarer les variables avant de les
utiliser. Cest lune des caractristiques des langages interprts.
Il est noter que comme dans la plupart des langages, la porte des variables gale celle du bloc o elle a
t utilise pour la premire fois (ce qui quivaut une dclaration). Dans les cas o une variable dclare
dans une fonction est ncessaire au niveau global, il est possible de lui tendre sa porte de manire ce
quelle continue dexister une fois la fonction termine. On pourra pour cela la dclarer comme globale :
Exemple
function maFonction( ) {
global maVar ;
Une autre manire plus lgante est dutiliser le mot cl static qui dans la plupart des cas permet de
saffranchir de lutilisation peu lgante de global.
Exemple
static mavar ; // static a le mme comportement quen C
2.4
Lorsque lon assigne une valeur une variable (=), son type change pour correspondre au type de donnes
qui lui est affect. Ce fonctionnement est linverse du C qui lui essaie de convertir la donne au type de la
variable.
Exemple
$machaine1 = Grard ;
$machaine2 = Dupont ;
integer var1 ; // dclaration de variable avec typage
$var1 = 12 ;
$var1 = -45 ;
double var1 ;
$var1 = -3.14
-8-
Guillemets doubles
\\
Caractre antislash
\n
Nouvelle ligne
\r
Retour chariot
\t
Tabulation
\x00 - \xFF
Caractres hexadcimaux
Il est noter quil est tout fait possible dinclure une variable dans une chane de caractres :
Exemple
print Je suis : $machaine1 <BR> ; // Affichera Je suis Grard
2.5
Constantes
Il existe un certain nombre de constantes cres automatiquement par PHP (nous en verrons quelques unes
plus loin). Il est galement possible de dfinir ses propres constantes avec define(nomconstante, valeur
constante). En ralit, une constante est une variable dont le contenu ne peut tre paramtr quune seule
fois. Comme les variables, les constantes sont par dfaut sensibles la casse. Associ la fonction define,
une autre fonction defined(nom constante) peut tre utilise afin de tester lexistence dune constante
(elle retournera true ou false selon le cas).
Exemple
define(MACONSTANTE, Hello World) ;
if (defined(MACONSTANTE)) {
print La valeur de ma constante est : .MACONSTANTE //Attention, on accde au contenu sans le $.
}
2.6
Nous nallons pas dcrire lutilisation de chacun des oprateurs, ils sont quasi-identiques au C.
Oprateurs arithmtiques :
+
*
/
%
++
-Oprateurs logiques
<
>
<=
>=
==
!=
AND &&
Addition
Soustraction
Multiplication
Division
Modulo
Incrmentation
Dcrmentation
Infrieur
Suprieur
Infrieur ou gal
Suprieur ou gal
gal
Diffrent
Et
-9-
OR ||
XOR
!
Ou
Ou exclusif
Sauf
Autres oprateurs
Le . permet de faire une concatnation (print $var1.$var2 affichera le contenu de var1 concatn var2).
Instructions de contrle
Pas de surprises en PHP pour lutilisation des instructions de contrle. Elles sont identiques celles dj
vues en C.
3.1
if (expression) {
Bloc si expression vraie
}
else {
Bloc si expression fausse
}
ou bien
if (expression 1) [
Bloc si expression vraie
}
else if (expressio2) {
Bloc si expression2 vraie
}
else {
Bloc si expression2 est fausse
}
3.2
Switch
switch (expression) {
case exprt1:
default :
}
$note=11;
$extension="fr";
- 10 -
switch($note) {
case $note>10:
echo ("Bac obtenu");
break;
case $note>=12:
echo ("Bac obtenu avec mention AB");
break;
case $note>=14:
echo ("Bac obtenu avec mention B");
break;
case $note>=16:
echo ("Bac obtenu avec mention B");
break;
default :
echo ("Bac non obtenu");
break;
}
print "<br><br>";
switch($extension) {
case "fr" : $pays="France";
break;
case "es" : $pays="Espagne";
break;
case "Be" : $pays="Belgique";
break;
default
: $pays="Inconnu";
break;
}
print "Pays visit : $pays";
php?>
Il nest pas ncessaire de mettre des accolades pour chacun des cas.
- 11 -
3.3
while (expression) {
do {
} while (expression);
3.4
Tableaux
Pas de surprises avec lutilisation des travaux, lutilisation est tout fait classique.
4.1
<?
$bab[0] = Biarritz;
$bab[1] = Anglet;
$bab[2] = Bayonne;
Dans les cas o lon ne dsire pas se proccuper de mentionner les index, PHP le fera votre place :
$bab [ ] = Biarritz;
$bab [ ] = Anglet;
$bab [ ] = Bayonne;
Si lon dsire savoir combien de valeurs ont t entres dans un tableau, on utilisera la fonction
count(tableau) :
$limiteIndex = count ($bab) ;
- 12 -
Il est galement possible d'indexer les tableaux autrement qu'avec des entiers :
print "Exemples de tableaux : <br>";
$capitale[fr]="Paris";
$capitale["es"]="Madrid";
A noter que les guillemets ne sont pas ncessaires l'initialisation, mais ils ne doivent pas tre mis
l'utilisationautant dire qu'il est inutile de les mettre !
4.2
Initialisation
Il est galement possible de dclarer un tableau avec ses initialisations. Ce type de tableau est appel
associatif :
<?
$mois=array(2=> Janvier, Fvrier, Mars,
Avril, Mai, Juin, Juillet, Aot, Septembre, Octobre, Novembre, Dcembre) ;
?>
Loprateur => permet ici de faire dmarrer le tableau lindex 2 et non pas 0 comme cest le cas par
dfaut.
Enfin, il n'est pas ncessaire d'avoir des tableaux avec des indices numriques successifs.
$tabbizarre[12] = "pas bien grand";
$tabbizarre[1025] = "plutot grand";
$tabbizarre[15215] = "trs grand";
> Key : 12
> Current : pas bien grand
> Next : plutot grand
- 13 -
Afin de raliser un parcours efficace de ce genre de tableaux, deux fonctions sont bien utiles. La fonction
each permet de renvoyer uniquement les lments du tableau contenant les donnes. La fonction list
($indice, $valeur) rcupre l'indice et la valeur de l'lment.
while (list($indice,$contenu) = each ($tabbizarre))
print "$contenu <br>";
4.3
Tri de tableaux
La fonction sort() permet de trier dans l'ordre alphabtique le contenu d'un tableau. Sa cousine ksort() fait
de mme mais dans l'ordre inverse. Les deux autres asort() et arsort()font la mme chose mais pour des
tableaux avec indice entiers.
$tabatrier[] = "albert";
$tabatrier[] = "george";
$tabatrier[] = "bacus";
sort($tabatrier);
while (list($indice,$contenu) = each ($tabatrier))
print "$contenu <br>";
print "<br>";
rsort($tabatrier);
while (list($indice,$contenu) = each ($tabatrier))
print "$contenu <br>";
> albert
> bacus
> george
> george
> bacus
> albert
4.4
Lutilisation de tableaux dimensions multiples est l encore semblable aux autres langages. Ainsi si un
tableau reprsente un chiquier, nous accderons aux valeurs en faisant par exemple :
$echiquier[5][4] ;
- 14 -
Entres/Sorties
PHP tant un langage de script, il doit pouvoir tre capable de communiquer avec son environnement. Les
scripts PHP tant excute dans le contexte dun navigateur Web, il est important de se rappeler que toute
sortie vers le navigateur sera interprte comme du texte HTML.
5.1
Trois fonctions permettent denvoyer du texte vers le navigateur : echo, print et printf. Lintrt principal
de cette dernire fonction est, nous le verrons plus tard, la possibilit de spcifier un format de sortie afin
dviter denvoyer la valeur telle quelle.
5.2
Si lenvoi de donnes vers le navigateur est simple en utilisant les trois fonctions dcrites prcdemment,
la rcupration dinformations en provenance du navigateur lest un peu moins.
Le langage HTML permet la rcupration de donnes dun formulaire : champs/zones de texte, listes
droulantes, cases cocher,
PHP transforme tous les champs dun formulaire en variables ce qui permettra de modifier
ventuellement leur contenu.
Soit le formulaire suivant :
<FORM ACTION="/php/myprogramme.php"
METHOD="POST">
Dans le fichier myprogramme.php, il sera possible de rcuprer la valeur saisie dans le champ NOM de la
manire suivante :
$nom = $_POST[NOM] ;
Attention, vous trouverez dans de nombreux scripts une rcupration de variable de formulaire
directement (print $NOM ) ou via des tableaux noms longs comme $HTTP_GET_VARS. Cette
technique employe jusqu peu montre ses limites avec les dernires versions de PHP (et quel que soit le
mode de passage des paramtres : POST, GET, cookie, session, ). La diffrence est que depuis la
version 4.2.0, loption register_globals du php.ini qui tait positionne par dfaut ON est OFF. Donc,
autant prendre de bonnes habitudes et utiliser la nouvelle technique . Pour vrifier la version de PHP,
utilisez la fonction phpinfo() qui retourne une multitude dinformations. Ca vaut le coup dil.
Voici un rcapitulatif des variables et des changement selon les versions :
Avant la version 4.10 (deprecated)
$HTTP_GET_VARS
$HTTP_POST_VARS
$HTTP_POST_FILES
$HTTP_COOKIE_VARS
$HTTP_SESSION_VARS
$HTTP_ENV_VARS
$HTTP_SERVER_VARS
- 15 -
Pour rcuprer facilement les variables, vous pouvez utiliser la fonction PHP extract. Elle va exporter
votre tableau associatif et crer une variable pour chaque cl du tableau.
extract($_POST,EXTR_OVERWRITE);
Cette fonction va crer une variable pour chaque cl du tableau associatif $_POST. Si l'on a :
$_POST['nom']
$_POST['prenom']
$_POST['age']
La fonction extract() va crer les variables suivantes :
$nom
$prenom
$age
Type
EXTR_OVERWRITE
EXTR_SKIP
EXTR_PREFIX_SAME
EXTR_PREFIX_ALL
EXTR_PREFIX_INVALID
5.3
signification
crase les variables existantes
N'crase pas les variables existantes
Si une variable existe dj, une nouvelle variable
est cre avec un prfix donn en 3me argument
la fonction
Cre de nouvelles variables avec le prfix pass en
3me argument pour toutes les cls du tableau
Cre de nouvelles variables avec le prfix pass en
3me argument pour les noms de variable invalides
(par exemple $1)
Tableau $_SERVER
PHP_SELF : Le nom du fichier du script en cour d'excution, par rapport au document root.
SERVER_NAME : Le nom du serveur hte qui excute le script suivant. Si le script est excut
sur un hte virtuel, ce sera la valeur dfinie pour cet hte virtuel.
DOCUMENT_ROOT : La racine sous laquelle le script courant est excut, comme dfini dans
la configuration du serveur.
REMOTE_ADDR : L'adresse IP du client qui demande la page courante.
REMOTE_PORT : Le port utilis par la machine cliente pour communiquer avec le serveur
web.
SCRIPT_FILENAME : Le chemin absolu jusqu'au script courant.
SERVER_PORT : Le port de la machine serveur utilis pour les communications. Par dfaut,
c'est '80'. En utilisant SSL, par exemple, il sera remplac par le numro de port HTTP scuris.
REQUEST_URI : L'URI qui a t fourni pour accder cette page. Par exemple : '/index.html'.
Tableau $_FILE
[NOM OBJET FILE][name] : permet de rcuprer le nom du fichier slectionn dans un
objet file du navigateur (exemple, fichier tlcharger).
[NOM OBJET FILE][tmp_name] : retourne le nom du fichier temporaire stock sur le
serveur, en attente de transfert la destination dsire.
[NOM OBJET FILE][size] : retourne la taille en octet du fichier.
- 16 -
Rutilisation de code
6.1
Fonctions include/require
Tout comme il est possible de raliser des inclusion de fichiers en C avec la directive de compilation
#include il est galement possible de le faire en PHP avec la fonction include(nom de fichier) ou
require(nom de fichier). Ces fonctions trs utiles permettent une rutilisation maximale de fonctions dj
crites. Il est noter que mme si l'extension n'a aucune importance, la norme d'utilisation des inclusions
est .inc.
Il n'y a pas de diffrence fondamentale entre require et include. La diffrence est que si un problme
survient, require produira une erreur fatale alors que include ne produira qu'un avertissement.
La syntaxe des fichiers inclure a son importance. Dans le cas o le texte inclus ne possde pas de balises
<? et ?> , le texte sera inclus tel quel , sans interprtation, ce qui peut tre intressant pour par
exemple ajouter systmatiquement des entte/pieds de pages des pages HTML. Par contre si des balises
sont trouves, le code correspondant sera excut et insr l'endroit o la fonction est appele :
Codeareutiliser.php
<?
print Je suis du code rutiliser <br> ;
?>
codequireutilise.php
print Debut du code <br> ;
require (''codeareutiliser.php'');
print Fin du code <br>'';
Donnera :
Debut du code
Je suis du code rutiliser
Fin du code
6.2
Comme dans la plupart des langages de programmation, il est galement possible dcrire ses propres
fonctions en PHP.
6.2.1 Dclarations
La syntaxe est proche de ce qui est ralis par exemple en C :
function nomFonction (paramtres) {
Corps de la fonction
}
- 17 -
6.2.2 Arguments
Voici par exemple une fonction qui permet dafficher en gras une chane de caractres :
function bold ( $machaine ) {
print <B> . $machaine . </B> ;
}
Comme cela est possible en C++, nous pouvons dfinir des paramtres par dfaut :
function afficher($maChaine, $couleur = black) {
print <FONT COLOR=\ $Color\ > $maChaine </FONT> ;
}
Si le deuxime paramtre nest pas prcis lors de lappel, la fonction choisira le noir.
Par dfaut, les passages de paramtres sont raliss par recopie. Il est possible de raliser un passage de
paramtres par rfrence (l'original donc !) en prcdent le nom du paramtre par & dans la dclaration de
la fonction, l'instar de ce qui se fait en C.
return ($chaineTmp) ;
}
7 Lecture/criture de fichiers
Comme dans la plupart des langages, afin de travailler avec un fichier, il est ncessaire douvrir laccs au
fichier, dy accder, puis de le fermer.
Il est possible en PHP douvrir un fichier local (fonction fopen) ou distant et le dsignant par une URL et
un protocole (http ou ftp).
Les diffrents modes d'ouvertures sont les suivants :
r: ouverture en lecture seule partir du dbut,
r+: ouverture en lecture/criture partir du dbut,
w: ouverture en criture seule. Si le fichier existe dj, il est cras, sinon, il est cre (si possible),
w+: ouverture en lecture/criture. Si le fichier existe dj, il est cras, sinon, il est cre (si possible),
a: ouverture en ajout uniquement. Les donnes sont crites la fin du fichier, s'il n'existe pas, il est
cre (si possible),
a+: ouverture en lecture et ajout. Les donnes sont crites la fin du fichier, s'il n'existe pas, il est
cre (si possible).
Afin de revenir au dbut du fichier, il est ncessaire d'utiliser la fonction fseek. Le premier paramtre est
l'identifiant du fichier retourn par fopen, le second paramtre est l'offset (dcalage en nombre d'octets,
partir du dbut du fichier - exprim par un entier).
- 18 -
Nous nallons pas le dcrire ici, mais il est galement possible daccder des fichiers en ouvrant un
canal ou pipe avec la fonction popen ou en ouvrant une connexion par socket avec fsockopen.
Voici un exemple douverture fichier :
<?
$monFichier = fopen(monfichier.txt, w) ; // ouverture en criture
if ( !($monfichier)) {
print( Impossible de crer le fichier \n) ;
exit ;
}
fclose ($monfichier) ;
?>
On peut galement accder des fichiers distants en passant par une URL :
$url = http://wwwbay.univ-pau.fr/~roose/index.shtml ;
fopen($url) ;
Il est parfois ncessaire de lire un fichier pour lafficher par la suite dans le navigateur. La fonction
readfile permet ceci en renvoyant le contenu du fichier vers le navigateur. La valeur retourne est le
nombre doctets lus. Si le nom du fichier commence par http:// ou ftp://, laccs ce dernier sera fait via
lun de ces protocoles. Dans le cas o aucun protocole nest spcifi, laccs se fait sur le systme local,
celui sur lequel est hberge la page PHP correspondante.
Il existe toute une srie de fonctions associes aux fichiers, comme :
- 19 -
fgetcsv (descripteur, longeur max, sparateur) : permet de lire une chane de caractre en ne prenant
pas le marqueur de fin de ligne comme fin, mais le sparateur prcis. Trs pratique pour lire des
contenus exports au format csv.
file_exists(descripteur de fichier) : teste lexistence dun fichier (ne fonctionne pas avec des accs
HTTP ou FTP).
filesize( nom fichier) qui retourne la taille en octets du fichier.
fseek (descripteur fichier, offset) : permet de se positionner loctet offset dans le fichier. Cette
fonction retourne 0 si tout cest bien pass, -1 sinon.
rewind (descripteur): place le pointeur au dbut du fichier.
chmod(fichier, droits unix) : change les droits du fichier ( condition que le serveur PHP ai galement
les droits dessus).
unlink(nom du fichier) : supprime ce fichier.
is_dir( nom fichier) ; is_executable(nom fichier), is_link( nom fichier), is_readable( nom
fichier), is_writeable( nom fichier) permettant de savoir si un fichier est un rpertoire,
excutable, un lien, si les droits en lecture ou criture sont valides. Lorsque les valuations sont
vrifies, 1 est retourn, 0 sinon.
opendir( nom rpertoire) retourne un tat de rpertoire exploitable par la suite avec readdir et
closedir.
readdir(descripteur de rpertoire), retourne le nom du fichier suivant partir du descripteur de
rpertoire obtenu avec opendir. On fermera le rpertoire avec closedir comme on le fait lorsque lon
ouvre un fichier.
fgetcsv(descripteur, nb max de car lire, dlimiteur). Lorsque lon a faire une ficher encod au
format CSV (chaque champs spar par un dlimiteur), il est possible dutiliser la fonction : fgetcsv
qui sutilise un peu comme la fonction explode. Elle retourne un tableau dont chaque case est un
champ de la ligne lue au format CSV. Sur le mme format, il existe la commande fputcsv.
7.1
Il est frquent de dsirer transfrer un fichier d'un ordinateur vers le serveur PHP. Afin de raliser ceci, il
est ncessaire d'implmenter la fonction d'upload.
Pour ce faire, il faut utiliser la fonction move_upload_file(source, destination). Il est noter que la source
est un fichier dj prsent sur le serveur mais gnralement dans un rpertoire temporaire. Ce fichier aura
t mis dans ce rpertoire l'aide par exemple du code HTML suivant :
<form ENCTYPE="multipart/form-data" action="upload.php" METHOD="POST">
<input type="file" name="nomfichier"> <br>
<input type="submit" value="Tlcharger">
On se rfrera au tableau $_FILE pour plus d'informations. Bien videmment, on prendra soin de grer
les droits en criture du rpertoire destinataire.
Une fois le transfert ralis (appui sur le bouton submit) la premire chose faire est de vrifier que
l'opration s'est bien passe en vrifiant la prsence du fichier dans le dossier temporaire; pour cela, nous
avons notre disposition la fonction is_uploaded_file($_FILES['fichier']['tmp_name']). Une fois la
vrification ralise, on copie le fichier sur notre espace web l'aide de la fonction
move_uploaded_file(string $filename , string $destination) qui est plus sre que la fonction copy(), car
elle vrifie que le fichier copier vient bien du dossier temporaire (et donc, provient d'un formulaire
d'upload).
- 20 -
Fonctions diverses
8.1
Il est frquent davoir des fichiers contenant diffrents champs spars par un dlimiteur quelconque. Une
fonction trs utile dans ces cas l est la fonction explode. Sa syntaxe est la suivante
explode ( caractre dlimiteur , chane de donne)
Ce fichier dcrit des enseignants avec leur nom, prnom, lieu de poste, matire principale. Si lon
souhaite afficher ce fichier dune manire plus jolie , il est ncessaire de rcuprer champs aprs
champs et dafficher chacun deux comme dsir. Sans la mthode explode, il serait ncessaire de
rcuprer caractre par caractre, tester si le sparateur est atteint, si oui,
explode ralise ce travail pour nous en retournant dans un tableau lensemble des champs. Il ne reste plus
qu boucler sur ce tableau pour rcuprer les valeurs et les traiter.
Il est noter quil existe sa rciproque, la fonction implode qui retourne une chane et qui accepte en
paramtre un tableau et un dlimiteur (qui peut tre lui mme une chane).
Il existe une variante explode appele strok() (ok pour token) qui contrairement explode qui ralise le
dcoupage en une fois, le ralise ici chaque itration :
$token = strok($mavariable,'' | '');
while ($token != ' ') {
print $token. ''<br>'';
$token = strok($mavariable,'' | '');
}
Lensemble des fonctions classiques rencontres en C sur les chanes se retrouvent galement en PHP.
On y retrouve ainsi : strlen, strcmp, strcasecmp(idem strcmp, mais respecte la casse), mais aussi :
strpos (chane, sous chane) : retourne la position de la sous chane dans la chane. Dans le cas o la
chane existe en plusieurs exemplaires, cest la position de la premire occurrence qui est retourne.
strrpos retourne quand elle la position de la dernire occurrence.
strstr (chane, sous chane) retourne la portion de la chane partir de la premire occurrence de la
sous chane.
str_replace (chane remplacer, nouvelle chane, chane complte) : Permet de remplacer une sous
chane par une autre dans une chane de caractres. Il est noter que la chane remplacer peut
galement tre un tableau de chane afin de contenir par exemple une liste de termes remplacer par
un seul unique autre.
foreach (nom tableau) : A chaque appel, cette fonction retourne la valeur suivante du tableau.
strlen (chane) : retourne la taille de la chane.
strtolower|strtoupper (chane) : retourne la chane passe en paramtres an minuscules (resp.
majuscules).
- 21 -
8.2
Fonctions mathmatiques
On retrouve en PHP lensemble des fonctions mathmatiques que lon retrouve en C, savoir :
abs, cos, sin, tan, acos, , exp, sqrt, Ces fonctions acceptent un nombre en paramtre et retournent, la
valeur absolue, le cosinus, le sinus, la tangente, larc cosinus, , le carr, la racine carre,
Il existe galement une fonction pi( ) retournant une valeur approche de PI.
8.3
- 22 -
m
M
S
U
y
Y
z
Chiffre du mois
Abrviation du nom du mois
Suffixe ordinal pour le jour du mois
Nombre de secondes depuis le 1/1/1970
Anne, sur 2 units
Anne, sur 4 units
Jour de lanne
Exemple dutilisation :
<?
$ladate=date( l j F Y);
$lheure=date(h : i - a) ;
print Nous sommes le $ladate <BR> ;
print Il est : $lheure <BR> ;
?>
Affichera :
Nous sommes le Thursday 16 November 2000
Il est : 08:56 - am
Il est une autre fonction qui peut avoir son utilit, cest la fonction sleep(nombre de secondes) qui ralise
une pause dans lexcution du script. La fonction usleep fait de mme, mais lunit est la miliseconde.
8.4
exec (commande[, resultat]) : ralise la mme chose que prcdemment mais sans cho sur la
sortie standard. Si le second paramtre est donn, il contiendra un tableau de chanes avec
chaque ligne du rsultat.
Srialisation
Il est parfois ncessaire de sauvegarder un objet ou le contenu d'un tableau dans son tat. Un mcanisme
de srialisation est aussi mis disposition. Il transforme dans un format de type chane de caractres le
contenu d'un tableau ou un objet quel qu'il soit.
Pour ce faire, deux fonctions de srialisation (encodage) et dsrialisation (dcodage) sont ncessaires :
$monobjetserialise = serialize($monobjet); // srialisation
$monnouvelobjet = unserialize ($monobjetserialise); // dsrialisation
Attention, au moment de la dsrialisation d'un objet, il est ncessaire de connatre la structure de classe
(d'o l'intrt de l'utilisation des fonctions include/require !)
- 23 -
L'intrt est qu'au del de l'encodage, il est ainsi possible d'envoyer via le rseau des objets/tableaux en
PHP, mais galement de sauvegarder des objets/tableau aisment dans des fichiers/BD pour les retrouver
tels quels plus tard.
Enverra un mail dupont@mondomaine.fr avec comme sujet de mail Test de la commande mail , et
comme corps du mail : Voici le corps du mail .
10.2 FTP
La connexion un serveur FTP requiert la mme chose qu'une authentification un SGBD : une URL, un
identifiant de connexion, un mot de passe.
ftp_connect(URL) : retourne un identifiant de connexions l'URL spcifie
ftp_login (''roose'',''mp'') : retourne un code d'erreur dans le cas d'une authentification errone,
ftp_quit(identifiant) : termine la connexion,
ftp_fget(identifiant connexion, identifiant fichier local, nom fichier distant, mode[FTP_BINARY |
FTP_ASCII]). Avant de rcuprer un fichier, il est ncessaire d'ouvrir un fichier sur le serveur en
mode cration (w). Celui-ci contiendra le fichier rcupr.
ftp_get(identifiant connexion, fichier local, fichier distant, mode) : identique au prcdent, mais
ne demande pas l'ouverture pralable du fichier local.
ftp_fput (identifiant connexion, nom fichier distant, identifiant fichier local, mode) : permet de
transfrer un fichier pralablement ouvert en lecture vers le serveur FTP sur lequel on est
identifi.
ftp_put (identifiant connexion, nom fichier distant, nom fichier local, mode) : idem mais sans
ouverture du fichier pralable.
set_time_limit (nb secondes) : permet de limiter le temps d'excution du script (du script, et pas
du transfert) en cas de problme. Par dfaut, si cette fonction n'est pas utilise, le temps est de 30
secondes.
ftp_size (identifiant, nom du fichier distant) : retourne la taille du fichier distant, -1 en cas
d'erreur. Cette fonction permet entre autre de calculer le temps ncessaire au transfert.
ftp_nlist (identifiant, dirname(nom rpertoire)) : permet d'obtenir la liste des fichiers dans un
rpertoire donn. Cette commande est utilise par exemple afin dcrire l'quivalent de la
commande mget.
- 24 -
11 Base de donnes
PHP offre un nombre de fonctions impressionnantes permettant aux scripts de rcuprer des donnes
partir de quantit de SGBD diffrents. En natif, PHP gre les drivers pour accder aux SGBD
PostgreSQL, dBase, mSQL, mySQL, Oracle, FilePro, Informix, Sybase, InterBase ainsi que tous les
SGBD supportant les accs via ODBC (Open DataBase Connectivity).
Nous nallons pas dcrire lensemble de ces fonctions, mais uniquement celles qui sont ncessaires pour
une utilisation classique .
Nous allons nous baser ici sur une connexion un SGBD distant de type mySQL avec une interrogation
de la base en SQL.
- 25 -
Bien quici la requte est mise dans une variable, il est tout fait possible de linclure directement dans la
commande mysql_query.
Gnralement aprs chaque requte, on teste si tout cest bien pass. Pour cela, on appelle la fonction
mysql_error qui rcupre le dernier message derreur retourn par une fonction mySQL.
if (mysql_error()){ // Erreur base de donnes, srement la table qu'il faut crer
print
produite.
exit();
}
;
}
A noter qu'au lieu d'utiliser les indices 0, 1, ... il est possible de donner le nom du champ ($row['pays'])
la condition d'utiliser mysql_fetch_array() en lieu et place de mysql_fetch_row().
- 26 -
Nous nallons pas dcrire lutilisation des fonctions ODBC puisquelles sutilisent de manire identique
celles dcrites prcdemment pour mySQL.
12 Manipulations dimages
Grce la librairie GD intgre PHP, il existe toute une srie de fonctions permettant de manipuler,
entre autres, des images au format JPEG (Joine Photographic Experts Group), PNG (Portable Network
Graphics) et WBMP (Wireless BMP). Elles permettent par exemple de retourner directement une image
cre au cours du script PHP.
Le choix du format se fait en fonction des images gnrer. Le format JPEG est plutt utilis pour des
images riches en couleurs et/ou en dgrads (comme les photos). C'est un codage avec compression et
avec pertes. Le PNG est en train de remplacer le GIF (intgre le codage Lempel Ziv Welch protg par un
brevet via la socit UNISYS c'est donc un format propritaire ET payant). Ce format permet une
compression sans perte et s'utilise particulirement pour des images contenant du texte, des tracs et des
couleurs unies (boutons de sites web, bannires, etc.). Ce format permet la transparence et l'entrelacement
que ne permet pas le JPEG. Les adeptes du GIF anim seront dus, le PNG ne le permet pas. Un format
appel MNG qui le permettra est en cours de dveloppement.
Enfin, le WBMP est spcifique aux priphriques sans fils. Il n'est pas encore gnralis.
Nous nallons pas dcrire ici toutes les (trs) nombreuses fonctions qui nous demanderaient plus de temps
que nous nen navons mais nous allons dcrire les principales qui nous servirons dillustration afin de
comprendre les mcanismes.
?>
ImageCreate(largeur, hauteur). Celle-ci retourne lidentifiant dune image. Cet identifiant sera
utilis par la plupart des fonctions graphiques. On pensera imprativement librer lespace
- 27 -
mmoire une fois que limage cre est termine (ImageDestroy(identifiant image) ). La
destruction dune image nimplique pas sa disparition lcran puisqu'elle aura au pralable t
retourne au navigateur.
ImageCreateTrueColor(largeur, hauteur) : idem prcdent, mais en vrai couleurs et pas sur une
palette
ImageCreateFrom[PNG|JPEG|GIF]( nom de l'image ) : permet de crer une image partir
d'une autre dj existante (la cration partir GIF est autorise l'image retourne au navigateur
ne sera pas un GIF).
ImageFill (image, x dbut, y dbut, couleur) permet de remplir un espace vide par une couleur.
Utilise ds le dpart, elle permet de donner un fond une image. Attention, les coordonnes
(0,0) correspondent au coin suprieur gauche.
Image[Dashed]Line(image, x dbut, y dbut, x fin, y fin, couleur) trace une ligne (en pointill
pour ImageDashedLine)en partant des coordonnes (x dbut, y dbut) jusqu (x fin, y fin).
Image[Filled]Polygon(image, tableau de points, nombre de points, couleur) autorise le dessin de
polygone plein (ImageFilledPolygon) ou juste le contour (ImagePolygon). Les coordonnes sont
contenues dans un tableau de points (2 2), le paramtre nombre de points indique combien de
points sont rcuprer dans le tableau.
<?
imagefilledpolygon($image, array(100,10,50,60,150,60), 3 $color) ; // trace un rectangle
?>
Plus simple, mais peut tre plus utile (trac de courbes par exemple), la fonction
imagesetpixel(image, x, y, couleur) permet de placer un pixel dans la zone image.
- 28 -
<?
$mapolice=imageloadfont( helvetica ) ;
imagestring($image, $mapolice, 10,10, Coucou , $couleur ) ;
?>
<?
imagefillrectangle($monimage, 30, 30, 70, 70, $macouleur) ; // dessine un rectangle dans une certaine
couleur
imagecolortransparent($monimage, $macouleur) ; // rend cette couleur transparente.
?>
GetImageSize (nom de fichier) : cette fonction est disponible avec toutes les versions de php (ce
qui nest pas les cas avec les fonctions qui suivront). Le nom de fichier doit correspondre lun
des formats suivants : GIF, JPEG, PNG. Elle retourne un tableau de 4 lments : [0] : largeur en
pixels, [1] : hauteur en pixels, [2] : type dimage (GIF = 1, JPEG = 2, PNG = 3), [3] : chane au
format HTML du type HEIGHT=### WIDTH=### utilisable dans une balise IMG.
Les fonctions imageSX(image) et imageSY(image) permettent se connatre la largeur et la
hauteur dune image (souvent ncessaire pour connatre la taille dune image charge
dynamiquement, par exemple avec ImageCreateFromPng).
- 29 -
des vignettes par exemple) ou imagecopy qui permet de copier une zone dune image dans une autre. La
liste exhaustive est sur http://fr2.php.net/manual/fr/ref.image.php.
$dst_im = ImageCreate($dst_w,$dst_h);
$dst_im = ImageCreateTrueColor($dst_w,$dst_h);
// Copie dedans l'image initiale redimensionne
$src_im = ImageCreateFromJpeg("$img_src");
//ImageCopyResized($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
- 30 -
Une fois l'image retourne vers la navigateur, celle-ci est devenue inutile sur le serveur. Aussi, afin de
librer ce dernier (n'oublions pas que nous sommes dans un environnement distribu et partag et
donc...nous ne sommes pas seuls !), on appliquera la fonction :
imageDestroy(identifiant image) : supprime l'image du serveur...et pas dans le navigateur !
13.1.2
$monObjet->nomMethode() ;
$monObjet->nomAttribut = ou $mavar = $monObjet->nomAttribut
On fera attention mettre le $ sur le nom de lobjet et pas sur le nom de la mthode/attribut. Lorsquon
dsirera affecter un attribut relatif soi-mme (le this), on procdera de la mme manire : $this->
PHP nayant pas de dclaration pralable des variables ncessaires, loublie de $this-> ne provoquera pas
derreur, une nouvelle variable sera ainsi dfinie et utilise, mais ce ne sera pas lattribut de la classe.
13.1.3
- 31 -
13.1.4
class MaClasse {
$attribut1 ;
$attribut2 ;
function maMethode1( ) {
}
function maMethode2($param1, $param2= je suis une chane ) { // paramtre par dfaut
}
} // fin de la dclaration de la classe.
Par dfaut, tout accs un membre (attribut/mthode) est public. Nanmoins, il est tout fait possible d'y
prciser un accs de type private ou protected en plaant le mot cl devant la dclaration de l'attribut et/ou
de la mthode.
Communment, les fichier de dclaration comporteront lextension .inc (pour include). Afin de ne pas
surcharger le code, et dans un but de rutilisation maximum, nous inclurons le code via la commande
include( maclasse.inc ) dans le fichier PHP exploitant cette dernire. On procdera ainsi :
< ?php
include ( maClasse.inc ) ;
?>
- 32 -
La surdfinition d'attributs et de mthodes est galement possible la condition que le membre concern
n'ai pas t dclar final ( final mamethode (...) ),
Afin de palier en partie aux problmes lis l'inexistence d'hritage multiple, PHP permet de dfinier des
interfaces. Une Interface permet de spcifier le squelette d'une classe qui sera implmente dans les
classes implmentant l'interface :
interface AffichezMoi {
function afficher();
}
Nous avons ici une classe qui implmente (ce qui n'est pas exclusif avec l'hritage) une classe dont elle
contiendra le code. Ceci permet de crer des modles de classes en dlocalisant l'implmentation la
classe qui la ncessite afin que l'implmentation colle au mieux aux besoins.
Lors de l'utilisation de classes, il est noter une fonction bien pratique (galement prsente en Java par
exemple) qui permet de connatre la classe d'un objet et donc de raliser des traitement particuliers :
if ($o1 instanceof ClasseA)
...
else
...
galement prsent la possibilit de crer une copie d'un objet l'aide du mot cl clone :
$copie = clone $objet;
Enfin, il est galement possible d'utiliser la rflexivit sur les classes afin d'interroger les classes et objets
pour en connatre leur structure et contenu. Cette API complte ne sera pas dcrite, on pourra consulter la
bibliographie pour plus d'informations.
- 33 -
Il est possible d'associer plusieurs procdures (plusieurs catch) un try dans le cas o le code critique
peut lever plusieurs exceptions diffrentes.
Chaque exception tant un objet, un certain nombre de mthodes ont t mise dans la dfinition de la
classe afin de pister l'exception :
getMessage() : retourne la chane de caractre dfinie dansle constructeur,
getCode() : donne le code de l'exception pass au constructeur,
getFile() : donne le nom (avec chemin complet) du fichier dans lequel s'est produite l'exception,
getLine() : retourne le numro de la ligne o s'est produite l'exception,
getTrace()/getTraceAsString() : permet d'avoir une trace complte, une sorte d'historique de ce
qui s'est pass. GetTrace retourne un tableau, getTraceAsString, idem mais sous forme de
chanes de caractres.
try {
...
throw new Exception ('Ae, y a un problme', 1);
}
catch (Exception $e) {
print <br>Exception n: .$e->getCode();
print <br>Message : .$e->getMessage();
print <br>Dans le fichier : .$e->getFile();
print <br>A la ligne : .$e->getLine();
}
Afin de dfinir ses propres exceptions, il est tout fait possible de se crer une classe hrite d'Exception
que l'on lvera par la suite l'aide de throw et qu'on rcupre l'aide de catch.
15 Contrle de sessions
HTTP n'est pas un protocole maintenant un tat entre de transactions. Ceci signifie entre autre qu'il n'est
pas possible de savoir que deux requtes qui se suivent ont t ralises par le mme utilisateur.
Afin de palier ce problme, un certain nombre de mcanismes ont t mis en oeuvre afin de suivre un
utilisateur tout au long de sa session. Mais qu'est ce qu'une session ? C'est une instance d'un navigateur.
Tant que la fentre du navigateur n'a pas t ferme (et que nous sommes dans un dlai imparti), nous
sommes dans la mme session.
Lors d'une cration d'une session, un identifiant alatoire est gnr automatiquement : c'est l'identifiant
de session. Il peut tre stock dans un cookie (petit fichier texte stock sur le poste client ), envoy
dans l'URL (GET) ou par l'environnement (POST).
setcookie (nom, valeur, expiration, chemin, domaine, securite) permet de crer un cookie sur le
poste client. Le premier champ nom est obligatoire et dfini son nom. Si l'on souhaite lui
associer une valeur on renseignera le second champ. Le troisime permet de spcifier une date
- 34 -
d'expiration dans le cas o rien n'est prcis, le cookie devient permanent. Les champs chemin et
domaine permettent de prciser les URL et domaines auxquels sont associs le cookie. Enfin le
dernier, scurit permet de n'envoyer le cookie que si la connexion est ralise via le protocole
scuris HTTPS (TRUE).
Une fois le cookie cr, il est possible de le rcuprer dans les pages suivantes via le tableau
$_COOKIE['nom cookie'].
La suppression d'un cookie se fait en le recrant...mais avec une date d'expiration passe !
Les cookies ne sont malheureusement pas supports par l'ensemble des navigateurs pour des raisons de
confidentialit. Aussi, il est ncessaire de mettre en uvre d'autres mcanismes afin de grer les sessions.
L'affectation du tableau $_SESSION permet de crer des variables de session (il faut que
session_start() soit en entte de page).
$_SESSION['mavariable'] = valeur ;
(!isset($_SESSION['mavariable']))
$_SESSION['mavariable'] = valeur ;
else
print $_SESSION['mavariable'];
- 35 -
16 PHP-Ajax
Jusqu prsent, les scripts que nous avons raliss retournent lintgralit dune page web. Impossible de
ne retourner quune partie (cest que lon appelle le Web 1.0). Ainsi, lors dinteractions soutenues avec un
utilisateur, des lenteurs peuvent apparatre du fait de la lourdeur des changes, ce qui nuit rend pnible
lusage de certaines pages. La technologie AJAX (qui nest pas nouvelle) a pour objectif de permettre un
rafraichissement partiel de donnes dune page web, et uniquement de certaines donnes (cest que lon
appelle le Web 1.0). AJAX est lacronyme de Asynchronous JavaScript and XML , bien quil ne soit
en rien li au XML. AJAX est bas sur l'objet XMLHttpRequest qui permet de faire une requte via
Javascript un serveur http (jusque l rien de nouveau !) et dattendre le retour en ne rafraichissant que
certaines donnes contenues dans le code HTML retourn initialement
Mme si dans lacronyme dAJAX il est mentionn le mot asynchrone, il nest pas ncessaire que ce le
soit (rappel : un appel synchrone => on attend la rponse du serveur pour continuer/terminer ;
asynchrone, => on nattend pas !). Le choix entre synchrone et asynchrone se fait lors de linstanciation
de lobjet XMLHttpRequest avec dans le dernier paramtre true pour asynchrone, false pour synchrone.
La contrepartie lutilisation de la mthode asynchrone est quil nest pas possible de prdire le moment
o le serveur va rpondre. Lorsque lobjet XMLHttpRequest change dtat, il lve un vnement
(onreadystatechange) que lon va associer une fonction. Cet vnement est lev ds que lobjet
readyState est modifi. Il peut prendre les valeurs : 0 non initialise, 1 en chargement, 2 charge, 3 en
cours de traitement, 4 termine.
Comme prcdemment dit, le mode asynchrone permet de ne pas bloquer le navigateur client pendant le
chargement de la page. Lexemple qui suit permet dafficher un message dattente durant un traitement
quelconque, puis laffichage du rsultat de ce traitement. Cela va se faire en deux temps : d'une part
afficher un message lors de l'appel initial, puis le retirer lorsque notre onreadystatechange passe 4
(termin).
On va utiliser la balise HTML DIV qui permet de diviser le document en section. Cest justement une de
ces sections que va mettre jour notre script.
Page PHP qui ralise une requte
<?php
header('Content-Type: text/xml');
//on connect
$dbhost="iparla.iutbayonne.univ-pau.fr";
$dbuser="roose";
$dbpass="drop64";
$ddb="roose";
$dblink=mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($ddb);
sleep(2);
- 36 -
?>
Code Ajax
<!DOCTYPE
html
PUBLIC
"-//W3C//DTD
XHTML
1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Exemple d'attente</title>
<script type="text/javascript">
function ajax()
{
var xhr=null;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
//on dfinit l'appel de la fonction au retour serveur
xhr.onreadystatechange = function() { alert_ajax(xhr); };
- 37 -
xhr.send(null);
}
function alert_ajax(xhr)
{
if (xhr.readyState==4)
{
var docXML= xhr.responseXML;
var items = docXML.getElementsByTagName("donnee")
document.getElementById("zonetraitement").innerHTML=Table;
}
}
</script>
</head>
<body>
<p>
<a href="javascript:ajax();">Go...</a>
</p>
Ce qui donne :
- 38 -
Si dans le cas prsent, la communication (asynchrone) se dclenche sur le clic sur Go , il est
galement possible raliser des interactions plus intressantes comme une aide la saisie par exemple :
BDAjax.php
<?php
$hote = 'localhost';
$base = 'roose';
$user = 'roose';
$pass = 'drop64';
$cnx = mysql_connect ($hote, $user, $pass) or die (mysql_error ());
$ret = mysql_select_db ($base) or die (mysql_error ());
/* Vrification */
$qer = mysql_query("select ville from bourse where ville='".$_GET["ville"]."'");
if(mysql_num_rows($qer)>=1)
echo "occupe";
else
echo "libre";
?>
Formulaire.html
- 39 -
<html> <head>
<title>EssayeAjax</title>
<script type="text/javascript">
function writediv(texte)
{
document.getElementById('zonetraitement').innerHTML = texte;
}
function verificationville(ville)
{
if(window.ActiveXObject) // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
if(window.XMLHttpRequest) // FIREFOX
xhr_object = new XMLHttpRequest();
fichier = "http://iparla.iutbayonne.univ-pau.fr/~roose/ajax/BDAjax.php?ville="+ville;
if(xhr_object.readyState == 4) {
texte = xhr_object.responseText;
}
if(texte != '')
{
if(texte == "occupe"){
writediv(ville+' : est un Nom de ville est occupé !');
}
else if(texte == "libre") {
writediv(ville+' : est un nom de ville libre vous pouvez l\'ajouter a la BD');
}
}
else
writediv(texte);
- 40 -
</script>
</head>
<body>
<form name="formville" action="" methode="GET">
<input name="ville" type="text" onKeyUp="verificationville(this.value)" >
<!-- onKeyUp : c est un evenement lance la fonction js 'verificationville'
this.value : ce qui est tap ds la zone de texte, ici alias de ville (nom d'onglet)
-->
<div id="zonetraitement"></div>
</form>
</body>
</html>
- 41 -
Figure 1:http://vivien-brissat.developpez.com/tutoriels/php/soap/#LI
Lors d'un change SOAP, le message transmis se dcompose en 2 parties :
1.
2.
Le contenu lui-mme qui est form de donnes structures (mthodes formates, interrogation
structure d'aprs les besoins du serveur, etc.).
Afin de savoir comment utiliser un service web, ce dernier est dcrit selon dans un langage de description
de service web bas sur XML : le WSDL (Web Services Description Language). Il donne une dfinition
abstraite des services, le dtail des types de donnes changes, les oprations possibles, le protocole
- 42 -
utiliser ainsi que l'adresse (URL) du service. Le fichier WSDL de chaque webservice peut tre publi
dans un annuaire. Le fichier WSDL associ un webservice reprsente en quelque sorte sa notice
dutilisation.
Dans sa version 5, le PHP intgre en natif une gestion du protocole SOAP.
Fichier wsdl
<?xml version='1.0' encoding='UTF-8'?>
<!-- WSDL file generated by Zend Studio. -->
<definitions
name="exemple"
targetNamespace="urn:exemple"
xmlns:typens="urn:exemple"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:typens0="http://iparla.iutbayonne.univ-
pau.fr/~roose/wsdl/moteur.php">
<message name="retourDate"/>
<message name="retourDateResponse">
<part name="retourDateReturn"/>
</message>
<portType name="essai_instancePortType">
<operation name="retourDate">
<input message="typens:retourDate"/>
<output message="typens:retourDateResponse"/>
</operation>
</portType>
<binding name="essai_instanceBinding" type="typens:essai_instancePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="retourDate">
<soap:operation soapAction="urn:essai_instanceAction"/>
<input>
<soap:body
namespace="urn:exemple"
use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body
namespace="urn:exemple"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="exempleService">
- 43 -
use="encoded"
location="http://iparla.iutbayonne.univ-
pau.fr/~roose/wsdl/moteur.php"/>
</port>
</service>
</definitions>
Moteur.php (serveur)
<?php
class DateServer{
//On dclare notre mthode qui renverra la date et la signature du serveur dans un tableau associatif...
function retourDate(){
$tab = array(
'serveur' => $_SERVER['SERVER_SIGNATURE'],
'date' => date("d/m/Y"),
'auteur' => "service web appele" //attention, unaccent => erreur
);
return $tab;
}
}
//Cette option du fichier php.ini permet de ne pas stocker en cache le fichier WSDL, afin de pouvoir faire
nos tests
//Car le cache se renouvelle toutes les 24 heures, ce qui n'est pas idal pour le dveloppement
ini_set('soap.wsdl_cache_enabled', 0);
//Instanciation du SoapServer
$serversoap=new SoapServer("http://iparla.iutbayonne.univ-pau.fr/~roose/wsdl/exemple.wsdl");
//Noter le style employ pour la dclaration : le nom de la classe est pass en argument de type String,
et non pas de variable...
$serversoap->setClass("DateServer");
//Ici, on dit trs simplement que maintenant c'est PHP de prendre la main pour servir le Service WEB :
il s'occupera de l'encodage XML, des
- 44 -
//Enveloppes SOAP, de grer les demandes clientes, etc. Bref, on en a fini avec le serveur SOAP !!!!
$serversoap->handle();
?>
Client.php
<?php
//Cette option permet d'viter la mise en cache du WSDL, qui se renouvelle toutes les 24 heures... Pour
le dveloppement, ce n'est pas gnial !!!
ini_set('soap.wsdl_cache_enabled', 0);
//On accde la mthode de notre classe DateServeur, dclar dans notre SoapServer
$taballservices=$service->retourDate();
18 PHP en chiffre
PHP nest pas uniquement ce qui a t dcrit prcdemment. Cest galement un poids conomique
important. PHP, cest plus de 5 millions de dveloppeurs estims travers le monde, cest un march de
4,8 milliards d.
Selon (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html), PHP est le 4me (5me selon les
priodes au coude coude avec C#) langage le plus utilis, derrire le Java, C, C++.
Le langage (en fait la plate-forme) est utilis par plus de 1/3 des sites web dans le monde (46 % en
France), ce qui reprsente 17 millions de domaines. Parmi les entreprises du CAC40, 78% en 2003 et
87% en 2004 utilisent le PHP. Parmi les vingt premires socits les plus bnficiaires en France, 95%
recourent PHP pour leur site web.
A quoi est d cet engouement. Au del de la simplicit et de la souplesse du langage, PHP souvre sur une
facette mconnue de linteroprabilit. Aussi, PHP peut instancier des objets COM, .NET mais galement
Java. PHP peut se connecter lensemble des tnors des SGBD, mais aussi aux annuaires (LDAP),
Lotus Notes, SAP, permet lutilisation des services web (SOAP/WSDL), gre le XML, sinterface avec
les systmes de paiement en ligne (VeriSign, Cybercash, Crdit Mutuel, etc.), gnre du Flash (extension
Ming), du PDF (classe FPDF). Un autre atout ne pas ngliger, est la robustesse
(performances/fiabilits), ce qui en fait le langage privilgi de 90% des sites web les plus frquents
dans lhexagone avec des sites dpassant les 500 000 connexions/jour. Une des plus fortes plates-formes
au monde supportant PHP permet 150 000 utilisateurs simultanment (avec 220 serveurs en cluster).
Source : Livre Blanc "PHP en entreprise" - http://www.afup.org/docs/livre-blanc-php-en-entreprisev4.pdf
- 45 -
19 Conclusion
PHP (PHP : Hypertext Preprocessor) est un langage de programmation (comme Java ou C#) possdant
deux syntaxes. La premire, mi-chemin entre C et Perl, sadresse aux dveloppeurs la recherche dun
langage de script simple manipuler. Elle est adapte la couche prsentation. La seconde, trs proche
de Java, permet de dvelopper dans un paradigme orient objet. Elle est adapte au dveloppement de
logique mtier ou de traitements complexes. PHP permet de dvelopper les types dapplications
suivantes :
des applications Web dynamiques (site web, intranet, etc.)
des clients riches (PHP-XUL)
des applications client/serveur (PHP-GTK et PHP4Delphi)
des services web (SOAP, XML-RPC, REST)
des scripts en ligne de commande (CLI)
des services sexcutant en tche de fond (gestion de quota disque, serveur HTTP, etc.)
Dvelopp par prs de 1 000 ingnieurs regroups au sein de la fondation Apache, PHP runit autour de
lui une communaut qui compte environ 4 500 000 utilisateurs. PHP est un logiciel libre distribu sous
une licence Open Source dite non virale qui protge les entreprises utilisatrices en ne les obligeant pas
publier leurs dveloppements. PHP est disponible pour lensemble des systmes dexploitation courants :
Windows toutes versions, Linux et Unix toutes versions, IBM iSeries (AS/400), SGI IRIX 6.5.x, RISC OS,
Novell Netware, Mac OS X, AmigaOS, etc.
- 46 -