POEC PHP 2017 - Laboratoire d'Informatique et Systèmes › elmouelhia › courses › php ›...

Post on 24-Jun-2020

1 views 0 download

Transcript of POEC PHP 2017 - Laboratoire d'Informatique et Systèmes › elmouelhia › courses › php ›...

PHP 5

1

POEC – PHP 2017

Qu'est-ce que PHP ?

PHP (PHP Hypertext PreProcessor) est un langage de programmation.

Il s’agit d’un langage interprété et indépendant de la plate-forme d'exécution.

Il permet de générer des pages HTML dynamiques.

Il s’avère utile pour utiliser de ressources serveurs comme des bases de données.

Une large communauté d’utilisateurs PHP existe. De nombreuses documentations et ressources sont disponibles.

2

Licence de PHP ?

PHP est distribué via une licence propre qui permet

sa rediffusion,

son utilisation,

sa modification.

PHP est distribué librement et gratuitement.

3

Que faire avec PHP ?

Des sites Web

La partie serveur de tout type d’application :

Application Web

Application mobile

Applications utilisables en ligne de commande (scripting)

4

Quelques technologies concurrentes à PHP

• JSP : Java-Server Pages

• Technologie de Sun

• Semblable à PHP mais la partie dynamique est écrite en Java

• ASP.Net: Active Server Pages

• Produit de Microsoft

• Contenu dynamique pouvant être écrit dans tous les langages de la plateforme .Net (les plus utilisés étant le C# et le VB.Net)

• Le choix entre PHP, JSP et ASP.Net est plus "politique" que technique.

5

Intérêts d’utiliser PHP

• Très populaire et très utilisé– Utilisé par des sites internet à très fort trafic tels Yahoo ou Facebook

• Amène un certain nombre de personnes à améliorer le langage

– Simplifie l’accès à de la documentation

• Syntaxe simple à prendre en main (héritée du C, du Shell et du Perl)

• Très portable (fonctionne sous Windows, Linux, Mac…)

• Extensible par de nombreuses bibliothèques– calcul mathématique, – création dynamique d'images, – connexions sécurisées, – accès à la plupart des SGBD

6

Intérêts d’utiliser PHP

• Un fichier PHP (.php) peut contenir

– du code HTML

– du code PHP

– du code JavaScript

• Logiciel open source (donc plus facilement extensible) et disponible gratuitement

• Conçu pour fonctionner efficacement avec le serveur Apache, lui aussi en open source

7

Historique

• 1994 : créé par Rasmus Lerdorf pour ses besoins personnels

• très succinct

• savoir qui venait consulter son CV en ligne

• 1995 : première version publique

• interpréteur du code très simple (quelques macros) et quelques utilitaires

• gestion d'un livre d'or

• gestion d'un compteur d'accès

8

Historique

• Eté 1995 : deuxième version

– Nommée PHP/FI pour Personnal Home Page Tools / Form Interpreter

• réécriture de l'interpréteur

• ajout de la gestion des formulaires (Form Interpreter)

• support pour MySql

• Eté 1997 : plus de 50 000 sites Web utilisent PHP/FI

• Fin 1997 : PHP devient un projet d'équipe

• réécriture complète de l'interpréteur par Zeev Suraski et Andi Gutmans

• donne naissance à PHP3

9

Historique• Eté 1999 : succès de PHP3

• 150 000 sites Web utilisent PHP3

• PHP : Hypertext PreProcessor

• Une des principales nouveautés: une API modulaire. N’importe quel développeur peut créer ses propres modules.

• 2000 : PHP4

• le projet est maintenant dirigé par Zend, société privée créée par Suraski et Gutmansqui commercialise des logiciels complémentaires à PHP

• interpréteur optimisé par Zend et ouverture de PHP à d'autres serveurs HTTP qu'Apache

• 2004 : PHP5

– Sortie du moteur Zend Engine II avec un nouveau modèle objet

• Aujourd’hui PHP est utilisé par 78% de l’ensemble des sites internet.

10

Mise en place de PHP

Installation et configuration

Installation d’un poste de développement

11

Installation et configuration

• Dans la plupart des cas PHP est couplé à un serveur web.

• Il est donc nécessaire d’installer– PHP– Un serveur Web

• Le plus utilisé avec PHP est Apache (licence OpenSource)

– Un moteur de base de données relationnelles• Le plus utilisé avec PHP est MySQL (licence OpenSource)

• Une fois installés il est nécessaire de configurer les différents outils afin qu’ils fonctionnent bien ensemble.

12

Installation d’un poste de développement

• Afin de faciliter la tâche aux développeurs il existe des outils installant directement des versions d’Apache, PHP et MySQL préconfigurées :– Wamp Server– EasyPHP– Xampp

• Ces outils intègrent aussi des utilitaires tels que PHPMyAdmin ou SQLiteManager qui facilitent la vie des développeurs

• Pour PHP 5 le plus utilisé est WAMP Server– www.wamp5.com

13

Première utilisation de Wamp Server

14

Par défaut le serveur Apache crée un nom de

domaine virtuel (car local) http://127.0.0.1 ou

http://localhost.

La sélection du raccourci Localhost dans le menu de

Wamp Server ouvre http://localhost et affiche la

page par défaut (index.php).

Il s’agit du contenu du répertoire www du serveur

local (C:\wamp\www\)

Installation d’un poste de développement

• Un éditeur de texte suffit à développer en PHP.

(bloc note, sublime text 2, notepad, …)

• Toutefois, pour faciliter le développement il est conseillé d’utiliser un environnement de développement intégré (IDE) :– Eclipse for PHP developers (Open source)

– Aptana (Open source)

– Zend Studio (payant, une version d’évaluation existe)

15

Vérification du bon fonctionnement

• phpinfo() permet d'afficher les informations relatives à la configuration de PHP sur le serveur

– options de compilation, extensions, version, informations sur le serveur, environnement PHP, chemins, utilisateur, en-têtes HTTP, et licence GNU Public License

– contenu de toutes les variables EGPCS (Environnement, GET, POST, Cookie, Serveur)

16

<?php phpinfo(); ?>

Le fichier de configuration de PHP

• Il s’agit du fichier php.ini

• Il est généralement dans /etc/php<version>/

• Il contrôle les principaux comportements de PHP

• Il est très clair et très facilement configurable:– Sa syntaxe est la suivante: clef="valeur"

– Un ; marque les lignes de commentaire

– Il est segmenté en parties : options du langage, ressources maximales allouées à PHP, gestion des erreurs, gestion des données HTTP, fichiers et répertoires, ajout et configuration des modules PHP (mail, SGBD, debugger, …)

17

Principe de fonctionnement

Théorie

Mise en pratique

18

Principe

• L'interpréteur de code PHP est intégré au serveur HTTP

• Le serveur lit les instructions PHP intégrées à la page HTML, interprète ces instructions et les remplace par le résultat de leur exécution

19

Principe

20

Navigateurclient

Serveur WebDémon HTTP

1 Requête HTTPdemandant index.php

DD

4 Réponse HTTP

recherche de index.phpsur le disque

2

SGBD

Poste client Site serveur

InterpréteurPHP

requêtes SQL éventuelles

interprétation descommandes PHP3

code HTML/JavaScript

Affichage dela page

Principe

• Fonctionnement de l'interpréteur PHP :

• Un bloc PHP est un groupe de lignes encadré par deux balises <?php ?>

• Toute ligne située à l'extérieur de ces balises n'est pas interprétée : elle est recopiée à l'identique sur la sortie standard,

• Toute ligne située à l'intérieur de ces balises est interprétée par le moteur comme une instruction PHP.

21

Principe

– Les instructions PHP n'apparaissent pas dans le flux de sortie généré,

– Lorsqu'une erreur se produit, un message explicatif est intégré dans le flux de sortie et l'analyse du code est interrompue (sauf si warning).

22

Balises d’ouverture et de fermeture• Le début et la fin des portions de code PHP sont signalés grâce à

des balises d’ouverture et de fermeture.

• Seul ce qui est entre ces balises est interprété.

• Il est conseillé d’utiliser la syntaxe suivante:

23

<?php echo "Bonjour !"; ?>

Balises d’ouverture et de fermeture

• On trouve aussi couramment

Cette syntaxe peut poser des problèmes de compatibilité avec le langage XML.

Cette syntaxe est utilisé par Microsoft FrontPage (style ASP)

24

<? echo "Bonjour !"; ?>

<% echo "Bonjour !"; %>

25

Les fichiers HTML portant du code PHP ont l'extension .php

Intégrer du PHP dans une page HTML

<html>

<head>

<title>PHP</title>

</head>

<body>

Première page PHP<br />

<?php

echo "Bonjour" ; // ou print "Bonjour";

?>

</body>

</html>

26

Code PHP traduit en HTML

dans la page :

<html>

<head><title>Page PHP</title></head>

<body>

Première page PHP<br />

Bonjour

</body>

</html>

Page reçue par le client

Intégrer du PHP dans une page HTML

• Le ; est le séparateur d'instructions

• Entrelacement de code HTML et PHP

27

<?php

echo "Bonjour Monsieur";

echo $nom;

?>

<?php

echo '<p>Ceci est du code PHP</p>';

echo '<img src="./image.gif" alt="Mon image">';

?>

Les bases du langage PHP

Types, chaînes de caractères, tableaux, opérateurs, instructions conditionnelles,

boucles, fonctions, variables, objets

28

Commentaires• PHP possède comme les langages Java ou C# des commentaires sur

ligne simple et des commentaires multi-lignes.

– La séquence // permet de commenter une ligne complète– Les commentaires multi-lignes sont introduits par la séquence /* et se

terminent par */

29

<?php

/*

commentaire sur plusieurs lignes

*/

// commentaire sur une seul ligne

echo "Ceci n’est pas un commentaire";

?>

La casse

• Les noms de fonction sont insensibles à la casse:

• En revanche les noms de variables sont sensibles à la casse:

30

echo $nom; // etecho $NOM; // concernent deux variables différentes

echo "Bonjour"; etEcHo "Bonjour"; sont équivalents

Types de données

Comme tout langage de programmation, PHP dispose de plusieurs types de données.

Type scalaire : String (chaînes de caractères) ‘bonjour’

Bool (true ou false) true

Int (entiers signés) 12

Float – double (réels signés) 4.63

Type composite : Object (objets) new stdClass()

Array (tableau) array(2, ‘matelli’)

Type spécial : Ressource (descripteur abstrait) fopen(...)

31

Variables

Les noms de variables sont précédés d'un $

Le langage PHP est faiblement typé: Il n’est pas nécessaire de déclarer le type d’une variable avant de l’utiliser

Il n’est pas nécessaire de déclarer sa variable

32

<?php$i = 2;$texte = ‘Hello world !‘

?>

$maVariable;

Nommage des variables

Ce qu'il faut éviter : Les variables trop longues

Les variables peu compréhensibles

Les variables quasi-semblables

Pour nommer une variable qui contient plusieurs mots, deux écritures sont recommandées : CamelCaseVars

plusieurs_mots

33

Constantes

Les constantes sont déclarées grâce à la fonction define

Pour utiliser une constante, il suffit de l'intégrer dans son code. Sans quotes, ni rien d’autre...

Par convention, les constantes sont toujours écrites en majuscules

34

<?php

define ('MA_CONSTANTE' , 5);

/*...*/

$resultat = 100 * MA_CONSTANTE;

echo MA_CONSTANTE;

?>

Booléens, entiers et flottants• Les booléens

• true ou false• sont considérés comme faux : le booléen FALSE, l'entier 0, le flottant 0.0,

"" ou "0", un tableau vide, un objet vide, la constante NULL

• Entiers positifs ou négatifs dans différentes bases

– Pas de division entière mais transtypage (cast) possible

• Les flottants

35

$i = -5; // Entier en base 10$i = 012; // Entier base 8$i = 0x12; // Entier en base 16

$i = (int) (7/3) // i aura pour valeur 2

$f = -1.3;$f = 1.2e-3; // f vaudra ici 0,0012

Chaînes de caractères

• Les chaînes de caractères doivent systématiquement être entourées de

quotes. Ces quotes peuvent être simples ou doubles (apostrophe ou

guillemet)

• PHP tentera d’interpréter tout ce qui est entre doubles quotes tandis

qu’il n’interprétera pas ce qui est entre simples quotes.

36

$ch1 = 'Bonjour';

$ch2 = "$ch1 Monsieur !\n";

<?php

$hello = ‘bonjour';

echo "la variable vaut $hello";

//affiche : la variable vaut bonjour

echo 'la variable vaut $hello';

//affiche : la variable vaut $hello

?>

Les tableaux

• Un tableau est un type de variable dit ‘composite’

• Ce type peut contenir d’autres variables

– De tout type

– Y compris tableau (tableau dans un tableau)

• On range des valeurs...

• Dans des index

– Numériques (tableau numérique)

– Ou littéraux (tableau associatif)37

Les tableaux indexés numériquement

• Création

• Utilisation

38

$tab = array("Nicolas", "Paul", "Caroline" ,"Julie", "Jean");// ou$tab[0] = "Nicolas";$tab[] = "Julien";

echo $tab[1];

echo '<br />';

echo $tab[2];

Clé Valeur

0 Nicolas

1 Paul

2 Caroline

3 Julie

4 Jean

… …

Les tableaux associatifs

39

• Création

• Utilisation

<?php$tableau = array(

'prenom' => 'Paul' ,'nom' => 'Paris' ,'adresse' => '1 avenue Victor Hugo''ville' => 'Paris'

);

echo $tab['prenom'];

echo '<br />';

echo $tab['adresse'];

Clé Valeur

prenom François

nom Dupont

adresse 3 Rue du Paradis

ville Marseille

Les tableaux multidimensionnels

40

• Création Utilisation

<?php$tableau = array(

'prenom' => 'Cyril' ,'ville' => 'Paris' ,'poste' => 'Consultant informatique''telephone' =>

array('0145012345','0145321232')) ;

// ou bien$tableau[0] = array(2,4,6);$tableau[1] = array(1,3,5);

//ou bien$tab[0][] = 8;?>

<?php

echo 'Son premier numéro de téléphone est :

';

echo $tableau['telephone'][0];

echo 'Son second numero de téléphone est :

';

echo $tableau['telephone'][1];

echo 'Nombres pairs :';

echo $tableau[0][0];

echo $tableau[0][1];

echo $tableau[0][2];

?>

Traitements de base

41

Les opérateurs

• Les opérateurs sont des symboles qui permettent de manipuler des variables.

• Ils permettent notamment

– d'effectuer des opérations

– d'affecter des valeurs

– de comparer des valeurs

42

Les opérateurs d’affectation

• affectation avec le signe =

• les opérateurs combinés : +=, -=, *=, /=, .=, &=, |=, ^=, <<=, >>=, ~=

• ++ est équivalent à += 1, -- est équivalent à -= 1

43

$a = ($b = 4) + 1; // $b vaut 4 et $a vaut 5

$a += 1; // équivalent à $a = $a + 1;

$ch .= "!"; // équivalent à $ch = $ch . "!";

$i = 0;

echo ++$i; // incrémente $i puis affiche 1

echo $i++; // affiche 1 puis incrémente $i

echo $i; // affiche 2

Les opérateurs de comparaison

• Egal à : $a == $b

• Différent de : $a != $b

• Inférieur à : $a < $b

• Supérieur à : $a > $b

• Inférieur ou égal à : $a <= $b

• Supérieur ou égal à : $a >= $b

44

L’opérateur ternaire

• L’opérateur fonctionne selon le principe suivant :

retour = (condition) ? (expr1) : (expr2);

• retour vaut expr1 si condition est vraie et expr2 si condition est fausse

45

$a = 2;$b = 3;$max = ($a >= $b) ? $a : $b; // $max vaudra $b, soit 3

Les opérateurs binaires

• ET bit à bit : $a & $b

• OR bit à bit : $a | $b

• XOR bit à bit : $a ^ $b

• NON bit à bit : ~$a

• décalage à droite de $b bits : $a >> $b

• décalage à gauche de $b bits : $a << $b

46

Les opérateurs logiques

• ET logique : and, && (les deux sont possibles)

• OU logique : or, ||

• XOR logique : xor

• NON logique : !

47

La concaténation

• Concaténation de chaîne de caractère (.)

48

$ch1 = "Bonjour ";

$ch2 = "Monsieur";

$ch = $ch1 . $ch2

echo $ch . " Martin" . ' !';

// Affiche "Bonjour Monsieur Martin !"

Les structures de contrôle

• Les structures de contrôles permettent de poser des conditions à l’exécution d’une instruction.

• Exemple:

– Si un visiteur a entre 12 et 25 ans

• Il a le profil jeune

– Si un visiteur a entre 25 et 65 ans

• Il a le profil adulte

49

L’instruction if

50

<?php

$age = 25;

if($age < 18)

{

exit ('Vous êtes trop jeune pour entrer ici');

//La fonction exit() arrête l'exécution du script

}

?>

L’instruction if / else

51

<?php

$temps = 'moche';

if($temps == 'ensoleillé')

{

echo 'Il fait beau';

}

else

{

echo 'Il ne fait pas beau';

}

?>

L’instruction if / elseif

52

<?php

$nombre = 2 ;

if ($nombre > 1)

{

echo "$nombre est supérieur à 1";

}

elseif ($nombre < 1)

{

echo "$nombre est inférieur à 1";

}

else

{

echo "$nombre est égal à 1";

}

?>

L’instruction switch

• Le switch a un comportement similaire à un long if / elseif / … / elsemais avec une syntaxe plus facile à lire

• Le Switch exécute les instructions dans l’ordre. D’où l’importance des break.

53

switch( $var )

{

case 1 :

echo '$var vaut 1';

break;

case 10 :

echo '$var vaut 10';

break;

default :

echo '$var ne vaut ni 1 ni 10';

break;

}

La boucle while

• L'instruction while correspond à "tant que".

• On pourra exécuter des instructions tant qu'une condition sera remplie

• Le programme commence par tester si la condition est vraie.

54

La boucle while

• La boucle while exécute le code du programme jusqu’à ce que la condition devienne fausse.

55

<?php

$i = 1;

while ( $i <= 10 )

{

echo $i;

$i++;

}

?>

La boucle for

• Identique fonctionnellement à la boucle while

• La boucle for intègre un compteur sous la forme d'une variable

– for (initialisation ; condition ; incrémentation)

56

<?php

for ( $i = 0 ; $i < 10 ; $i++)

{

echo $i ;

}

// Affichera 0123456789

?>

La boucle for each

• La boucle foreach s'applique à un tableau

• Elle permet de boucler sur chacune de ses cellules.

– foreach (tableau as clef => valeur)

57

<?php

$tab['prenom'] = ‘Victor';

$tab['nom'] = ‘Hugo';

foreach ($tab as $key => $value)

{

echo $key . ' = ' . $value . '<br>' ;

}

?>

Fonctions utilisateur

58

Les types de fonction

• Il existe deux types de fonctions en PHP :

– les fonctions dites natives :

• que vous pouvez employer sans faire appel à des librairies (phpinfo(), date()…)

– les fonctions dites « utilisateur » :

• qui sont déclarées par vous-même,

• qui sont en général définies dans un fichier précis (une bibliothèque).

59

Fonctions utilisateur: déclaration

• La définition d'une fonction s'appelle déclaration et peut se faire n'importe où dans le code grâce au mot-clé function.

– Les fonctions sont insensibles à la casse

– Elles doivent commencer par une lettre ou un _

– 2 fonctions ne peuvent avoir le même nom

• attention aux noms des fonctions PHP natives

60

<?php

function dire_bonjour($qui)

{

echo "Bonjour $qui";

}

?>

<?php

function phpinfo()

{

echo "infos sur PHP";

}

// Fatal error

Fonctions utilisateur: les arguments

• Les arguments peuvent être optionnels, pour cela , il suffit de leur donner une valeur par

61

<?php

function dire_bonjour($qui = ‘Paul')

{

echo "Bonjour $qui";

}

dire_bonjour ('Pierre');

// affiche 'Bonjour Pierre'

affiche_bonjour();

// affiche 'Bonjour Paul'

?>

Fonctions utilisateur: valeur de retour

• La fonction peut renvoyer une valeur grâce au mot clé return.

• return renvoie la valeur spécifiée et arrête l'exécution de la fonction.

• On ne peut pas renvoyer plusieurs valeurs mais on peut renvoyer un tableau de valeurs.

62

<?phpfunction multiplier($var1,$var2) {

$resultat = $var1 * $var2;return $resultat;echo 'ce message ne sera jamais affiché';

}

echo multiplier(10,15);// affiche 150

?>

Fonctions utilisateur: passage par copie

• Par défaut les arguments reçus par une fonction sont passés par copie.

– Les modifications effectuées sur les variables au sein de la fonction ne seront pas appliquées dans le programme principal.

63

<?php

function incrementer($var1)

{

$var1++;

}

$mavar = 10;

incrementer($mavar);

echo $mavar;

// affiche 10

?>

Fonctions utilisateur: passage par référence

• On peut changer le comportement par défaut (passage par copie) en spécifiant dans la déclaration que la fonction reçoit ses arguments par référence.

– Il suffit de mettre un & devant l'argument dans la déclaration

64

<?phpfunction incrementer(&$var1) {

$var1++;} $mavar = 10;incrementer($mavar);echo $mavar;// affiche 11?>

Fonctions utilisateur: portée des variables

• Les variables extérieures à une fonction ne sont pas disponibles dans cette fonction, et inversement.

• Mais il existe plusieurs niveaux de définition de variable :– Le niveau local (utilisé par défaut) : la variable ne sera visible

que dans la fonction en cours,– Le niveau global : la variable extérieure est visible dans la

fonction (importée),– Le niveau static : la variable locale à la fonction persiste durant

tout le temps d'exécution du script,– Cette variable conservera ses différentes valeurs à chaque

nouvel appel de la fonction.

65

Notions avancées sur les variables

Les variables prédéfinies / Les variables globales / Les variables statiques / Les

variables dynamiques / Affichage de variables complexes

66

Les variables prédéfinies

– Depuis PHP 4.1.0, des tableaux "super-globaux" sont prédéfinis

• Ils sont accessibles dans n'importe quel contexte d'exécution,

• Ils fournissent les infos sur les variables du serveur, les variables d'environnement, les variables de PHP...

– Le contenu de ces tableaux dépend de la version et de la configuration du serveur et de PHP.

67

Les variables prédéfinies

– $GLOBALS : variables globales de l'exécution en cours

– $_SERVER : variables fournies par le serveur WEB

• 'PHP_SELF' (chemin du script sur le serveur),

– $_GET : variables fournies par HTTP/méthode GET

– $_POST : variables fournies par HTTP/méthode POST

– $_COOKIE : variables issues des cookies HTTP reçus

– $_FILES : variables fournies par HTTP suite à un téléchargement de fichier(s) par la méthode POST

68

Les variables prédéfinies

– $_ENV : variables d'environnement positionnées au démarrage du serveur Web

– $_REQUEST : tableau associatif constitué de toutes les variables en entrée (contient en particulier $_GET, $_POST, $_COOKIE, $_FILES)

– $_SESSION : variables relatives à la session en cours

69

Les variables globales

Déclarer une variable comme global dans un bloc créé une référence locale sur la variable globale

Il est aussi possible d’accéder à une variable globale grâce au tableau associatif $GLOBALS

70

<?php

$a1 = 1; $a2 = 2; // portée globale

function affiche() {

global $a1; // $a1 est la variable globale

echo $a1." et ".$GLOBALS['a2'];

$a1++;

}

affiche(); // affiche "1 et 2"

echo $a1; // affiche "2" ($a1 a été modifiée)

?>

Les variables statiques

• Une variable statique a une portée locale à un bloc mais conserve sa valeur entre deux exécutions du bloc.

• Elles sont utiles pour les fonctions récursives

71

function up_to_10() {

static $cpt = 0;

$cpt++;

echo "$cpt ";

if ($cpt<10) up_to_10();

}

up_to_10(); // affiche 1 2 3 4 5 6 7 8 9 10

Affichage de variables complexes

– var_dump() affiche les informations structurées d'une variable (type, valeur, …)

– print_r() affiche les informations lisibles pour une variable (par exemple affiche les clés et les valeurs d'un tableau)

72

$a = array (1, 2, "a"); var_dump ($a);

/* Affichage :

array(3) {

[0]=> int(1)

[1]=> int(2)

[2]=> string(1) "a"

} */

Variables et types

– is_array(), is_bool(), is_callable(), is_double(), is_float(), is_int(), is_integer(), is_long(), is_null(), is_numeric(), is_object(), is_real(), is_resource(), is_scalar(), is_string(), gettype(), settype()

– gettype($var) retourne le type de $var : integer, double, string, array, object, ou unknown type

73

$foo = "5bar"; // chaîne

$bar = true; // booléen

settype($foo, "integer"); // $foo vaut maintenant 5

settype($bar, "string"); // $bar vaut maintenant "1"

La valeur NULL

• Constante spéciale qui représente l'absence de valeur

• Valeur insensible à la casse, introduite en PHP4

• $var = NULL;

• isset($var) # retourne FALSE

• is_null($var) # retourne TRUE

• empty($var) # retourne TRUE

• $ch = "";

• isset($ch) # retourne TRUE

• is_null($ch) # retourne FALSE

• empty($ch) # retourne TRUE

74

Les fichiers

• Ouvrir : fopen($nom_fichier,mode_ouverture)

• 4 modes : (r : lecture seule, r+ : lecture et écriture, a : écriture seule, a+ : lecture et écriture à la fin, création si inexistant)

• Lire : file_get_contents, fgets et fgetc pour lire tout le contenu, un caractère ou une ligne (exemple : $ligne = fgets($nom_fichier))

• Ecrire : fputs ($nom_fichier, $message)

• Fermer : fclose($nom_fichier)

75

Premières applications web

Formulaires

Gestion de fichiers

76

Intégration de fichiers externes• PHP a été pensé pour faciliter la conception de sites et d’applications

Web.

• L’intégration de fichiers externes permet de:

• de définir des "briques de base" qui peuvent être réutilisées plusieurs fois,

• de répercuter facilement un changement sur l'ensemble de l'application.

• Le fichier qui est inclus hérite de l'ensemble des variables du fichier qui effectue l'inclusion

• Les fichiers inclus sont analysés comme du code HTML qui peut contenir du code PHP

77

Intégration de fichiers externes

Les fonctions d’inclusions sont les suivantes

– include()

• require() : similaire à include mais provoque une erreur fatale si le fichier n'existe pas (include émet seulement un warning)

• include_once et require_once : similaire à include et require. S'assurent toutefois que le fichier n'a pas déjà été inclus.

78

Intégration de fichiers externes

79

//file2.php

<?php

$num = 10;

function carre($var){

return $var * $var;

}

?>

//file1.php

<?php

echo "var num avant include = $num <br/>"; //affiche var num avant include =

include 'file2.php';

echo "var num après include= " . $num . "<br/>"; //affiche var num après include =

10

echo carre(2); //affiche 4

?>

Les formulaires

• Un formulaire permet d’effectuer différentes choses :

– Saisir du texte, des mots de passe

– Choisir un élément dans une liste

– Afficher un résultat

– Lancer des actions (appel de script ou ouverture de pages) avec des boutons 80

Les Formulaires en HTML

• Toute la partie formulaire de la page doit se trouver entre les marqueurs <FORM> ....</FORM>

• Cette balise sert de conteneur pour accueillir les éléments ou composants du formulaire– un bouton, une ligne de texte, une liste de choix…

• Chacun de ces composants s'y trouve déclaré et est créé individuellement par une balise qui commence généralement par INPUT ou par SELECT

81

Propriétés de la balise form

• Liste des propriétés :

• name : Nom du formulaire

• action : Adresse du script de serveur à exécuter

• method : Méthode d'appel du script (get ou post)

• enctype : Type d'encodage du formulaire

• target : Destination du retour du formulaire

82

Méthodes de la balise form

• Liste des méthodes

• submit : Déclenche l'action du formulaire

• reset : Réinitialise les données du formulaire avec les valeurs par défaut

• Liste des événements

• onSubmit : Détecte la soumission du formulaire

• onReset : Détecte la réinitialisation

83

Saisie par ligne de texte

• Ligne de texte<INPUT TYPE="text" NAME="Nom du champ"

VALUE="texte initial" SIZE=longueur ou MAXLENGTH=nb >

• L'objet INPUT permet d'afficher : – des champs texte

– des boutons

– des radio-boutons

– des cases à cocher

– un champ caché

– des champs password (***)

– les boutons spéciaux RESET et SUBMIT

84

Propriétés de la balise input• Liste complète des propriétés :

• Name : nom du champ

• Type : type du champ text, button, radio, checkbox, submit, reset

• Value : Libellé texte

• Defaultvalue : valeur par défaut du champ (utile avec reset)

• Size : taille du champ

• Maxlength : taille maximale du champ de type texte

• Checked : case à cocher ou radio bouton coché ou non

• Disabled : grisé (modification impossible par le visiteur)

• readOnly : lecture seule

• Class : nom de la classe de style

• Style : chaîne de caractères pour le style

85

Champ de saisie Bouton <INPUT type="button" value="Détruire la session">

Propriétés acceptées :name | value | defaultvalue | size | maxlength | disabled | readOnly | class | style

Méthodes acceptées:focus | blur | click (donne, reprend le focus, clic)

Evénements acceptés:onFocus | onBlur | onClick onFocus détecte la prise de focus onBlur détecte la perte de focus onClick détecte le clic utilisateur

86

Liste de sélection

• Les listes sont définies par la balise <SELECT>. Cette balise définie la zone de la liste. Les lignes de contenu de la liste sont alimentées par la balises <OPTION>.

Voici la syntaxe générale pour créer une liste contenant des lignes :

87

<SELECT name="mono" size=1>

<OPTION value="1">ligne 1</OPTION>

<OPTION value="2">ligne 2</OPTION>

<OPTION value="3">ligne 3</OPTION>

<OPTION value="4">ligne 4</OPTION>

</SELECT>

ligne 1ligne 2ligne 3ligne 4

Formulaire : Zone de texteZones de textes multi-lignes TEXTAREA

L'objet TEXTAREA est essentiellement utilisé pour permettre

au visiteur de saisir un texte assez long (message, descriptif...).

Voici la syntaxe classique pour définir une zone de texte :

88

<TEXTAREA name="texte" rows="5" cols="20">Ligne 1

Ligne 2

...

</TEXTAREA>

Ligne 1Ligne 2...

Formulaires et PHP

• On associe un script PHP à un formulaire par :

• Bouton déclenchant l'action du formulaire :

• Ce formulaire déclenche une action qui ici consiste à appeler le programme ins.php

– et à l'exécuter sur le serveur

• On va utiliser les noms définis pour les champs texte : <INPUT type="text" name="nom"> pour récupérer les valeurs

89

<FORM action="ins.php" method="post">

….

</FORM>

<INPUT type="submit" value="CLIC">

Exemple de formulaire

90

<FORM action="essai4.php" method="post">

NOM

<INPUT type=text name="nom"><BR>

PRENOM

<INPUT type=text name="prenom"><BR>

ADRESSE

<INPUT type=text name="adresse"><BR>

<INPUT type=submit value="CLIQUEZ ICI">

</FORM>

Suite de l’exemple

91

Fichier essai4.php

Lorsqu'un formulaire est envoyé à un script PHP, toutes les variables du

formulaire seront automatiquement disponibles dans le script sous frome de

chaînes.

<html><body><H1 Mon quart d'heure de célébrité ! <BR>Bienvenue à Monsieur <? phpprint "<H1>".$_POST['prenom']";

print $_GET['nom']." </H1>" ;

?>

</body>

</html>

Exemple de formulaire écrit en PHP

Ici on saisit le login et pwd, et on appelle une fonction de vérification

effectuée dans check.php.

On observera les guillemets internes à la chaîne :

echo "<form method=\"post\" action=\"check.php\">

Login : <input type=\"text\" name =\"login\"

value=\"$login\" /><br />

Password : <input type=\"password\" name =\"pass\"

value=\"$pass\" /><br />

<input type=\"submit\" value=\"Identifier\"/>

</form>";

92

Préférer les apostrophes aux guillemets doubles quand il n’y a pas besoin des deux, c’est

plus lisible et plus rapidement interprété

Fonctions trim()et empty()

• La fonction trim() retire les espaces en début et fin de chaîne

– cela permet de ne pas traiter des informations vides (un utilisateur pourrait très bien n'entrer que des espaces dans le formulaire)

• La fonction empty() permet de savoir si une variable (chaîne ou bouton) a une valeur ou non.

• Cf un exemple avec formulaire.html et formul1.phpci-après

93

Trim et empty (partie HTML)

94

<form action="formulaire.php" method="post">

<table>

<tr>

<td>Nom :</td>

<td><input type="text" name="nom" value=""></td>

</tr>

<tr>

<td>Prénom :</td>

<td><input type="text" name="prenom" value=""></td>

</tr>

</table>

<input type="submit" value="envoyer" name="send">

</form>

Trim et empty (partie PHP)

95

<?php

$bouton = $_POST['send'];

if(!empty($bouton)) {

$nom = trim($_POST['nom']);

$prenom = trim($_POST['prenom']);

if(!empty($nom) && !empty($prenom)) {

echo 'Bonjour, '.$prenom.' '.$nom;

}

else {

echo "vous n\'avez pas rempli tous les champs";

}

}

?>

Accéder à des variables de formulaire HTML

96

<?php

import_request_variables('p', 'p_'); // Importe les variables de

// POST dans l'environnement global, avec le préfixe ‘p_’ ->

// $_POST['nom'] $p_nom

echo $p_username;

// Disponibles depuis PHP 3:

echo $HTTP_POST_VARS['username'];

// echo $username;

// serait disponible si la directive ‘register_globals = on’ dans php.ini.

// Depuis PHP 4.2.0 la valeur par défaut de cette directive est à ‘off’

// Utiliser ou présumer sur cette méthode est

// fortement déconseillé; c’est une sécurité

// importante.

?>

Accès aux variables avec GET

• Utiliser un formulaire de type GET est similaire, hormis le fait qu’il faut utiliser les variables prédéfinies de GET à la place.

• GET s'applique aussi à la QUERY_STRING (les informations disponibles après le '?' dans une URL).– De ce fait, par exemple,

http://www.example.com/test.php?id=3 contient les données de GET, qui sont accessibles via $_GET['id']

97

Passer des variables par l’adresse URL avec _GET

98

http://www.toto.fr/index.php?var=12&a=1&b=2

Dans la page www.toto.fr/index.php, les 3 variables sont

utilisables:$_GET['var']=12

$_GET['a']=1

$_GET['b']=2

http://www.toto.fr/index.php?nom=cow&prenom=flying

<?php

$nom = $_GET['nom'];

$prenom = $_GET['prenom'];

echo 'Bonjour, '.$prenom.' '.$nom;

?>

Variables de

type String:

Convention d'écriture PHP

• Localiser les parties "programme" en début de fichier

– avant tout code HTML

• Cela permet de bien séparer la partie traitement, maintenue par le programmeur

– de l'affichage, dévolue au Web designer

99

Gestion des fichiers: lecture d’un fichier

• La fonction file_get_contents() prend en argument l'adresse du fichier et retourne une chaîne de caractères avec l'intégralité du contenu.

• La fonction file(), quant à elle, prend en argument une adresse de fichier et retourne le contenu dans un tableau ligne à ligne.

100

Ecriture dans un fichier

• La fonction file_put_contents() prend en paramètre une adresse de fichier et une chaîne de caractères.

– La chaîne est alors écrite dans le fichier.

• Si le fichier existait déjà, son contenu est écrasé.

– Il existe une option FILE_APPEND pour ajouter du contenu à la fin.

101

Tableaux : fonctions et exemples pratiques

102

Compter / Supprimer

• Compter le nombre d’éléments d’un tableau

– count($tab);

• Retourne le nombre d'éléments du tableau $tab s'il existe, 1 si $tab n'est pas un tableau, 0 si $tab n'existe pas

– sizeof($tab);

• La fonction sizeof est un alias de count.

• Suppression d'un élément

– unset($tab["toto"]);

• Fonctionne aussi pour une variable

103

Trier

– Le tri peut se faire sur les clés et/ou les valeurs ; l'association clé/valeur peut être cassée

– asort()/arsort() : trie le tableau par ordre croissant/décroissant de valeurs

– ksort()/krsort() : trie le tableau par ordre croissant/décroissant de clés

– sort() : trie le tableau par ordre croissant de valeurs et réassigne des clés (0,1,…) ; on perd l'association clé/valeur

– uasort()/uksort()/usort() : identiques à leur homologue mais la fonction de comparaison est fournie

104

Tableaux et pointeurs

• A chaque tableau correspond un pointeur interne qui est une référence sur l'élément courant

• current($tab) désigne l'élément courant

• next($tab) déplace le pointeur vers l'élément suivant

• prev($tab) déplace le pointeur vers l'élément précédent

• end($tab) déplace le pointeur sur le dernier élément

• reset($tab) déplace le pointeur sur le premier élément

105

Tableaux et pointeurs

106

$tab = array("a"=>1, "d"=>5, "b"=>8, "c"=>4);

$val = current($tab); echo "$val<br>"; // affiche "1<br>"

$val = next($tab); echo "$val<br>"; // affiche "5<br>"

asort($tab); end($tab); prev($tab); $val = prev($tab);

echo "$val<br>"; // affiche "4<br>"

Extraction d’éléments d’un tableau

• list() permet d'extraire des valeurs d'un tableau

107

$tab = array(1, 8, 5); sort($tab);

list($v1, $v2) = $tab;

echo "$v1 $v2"; // affiche "1 5"

Extraction d’éléments d’un tableau

– key($tab) permet d'extraire la clé de l'élément pointé par le pointeur interne du tableau

108

$tab = array("a"=>1,"b"=>8); next($tab);

$clé = key($tab); $val = $tab[$clé];

echo "$clé: $val"; // affiche "b: 8"

Extraction d’éléments d’un tableau

– extract($tab) permet d'extraire d'un tableau toutes les valeurs, chaque valeur est recopiée dans une variable ayant pour nom la valeur de la clé.

– each($tab) retourne la paire clé/valeur courante du tableau et avance le pointeur de tableau ; cette paire est retournée dans un tableau de 4 éléments : 0=>clé, 1=>valeur, key=>clé et value=>valeur

109

$tab = array("a"=>1,"b"=>8); extract($tab);

echo "$b $a"; // affiche "8 1"

$tab = array("a"=>1, "d"=>5, "b"=>8, "c"=>4);

reset ($tab);

while (list ($k, $v) = each ($tab)) {

echo "$k => $v<br />\n"; }

// Quand le pointeur dépasse la fin de $tab, each retourne false

chaînes de caractères : fonctions et exemples pratiques

110

Chaînes de caractères

• Conversion de chaînes de caractères en valeur numérique

• la chaîne est de type flottant si elle contient '.', 'e' ou 'E' sinon elle est de type entier.

• la valeur est définie par la première partie de la chaîne (0 si c'est du texte).

111

$i = 1 + "4.5"; // $i vaut 5.5$i = 1 + "-1e3"; // $i vaut -999$i = 1 + "toto + 9"; // $i vaut 1$i = 1 + "9 + toto"; // $i vaut 10

Chaînes et valeur null

• La constante NULL est convertie en "", un tableau en la chaîne "Array"

112

$i = null; echo "-$i-"; // affiche "--"$tab[0] = 1; echo "$tab"; // affiche "Array"

Chaînes de caractères et affichage

• Accès aux caractères d'une chaîne

• Affichage de chaînes

• echo et print pour les affichages simples

• printf pour les variables formatées

• print_r et var_dump pour les variables complexes

113

$ch = 'Ceci est une chaîne.'; echo $ch{3}; // affiche "i"

$i = 2.98765;

printf("%.3f",$i);echo"<br/>"; // affiche 2,998

Fonctions de chaînes de caractères

• Substitutions de chaînes

• addslashes(str) ajoute un \ devant tous les caractères spéciaux de la chaîne passée en argument - utile pour les requêtes aux bases de données

• stripslashes(str) effectue l'opération inverse (enlève les \)

• str_replace(search, replace, str) remplace dans str toutes les occurrences de search par replace

114

// la commande suivante affiche "Bonjour Jean"

echo str_replace("Paul", "Jean", "Bonjour Paul");

Fonctions de chaînes de caractères

• Découpage de chaînes

• explode(sep, str) retourne un tableau de chaînes en scindant str à l'aide du séparateur sep

• implode(sep, tab) retourne une chaîne fabriquée par la concaténation des éléments du tableau et du séparateur sep entre chaque élément (join() fait la même chose)

• chop(str) ou rtrim(str), trim(str), ltrim(str) suppriment des caractères d'espacement dans str (" ", \t, \n, \r, \0)

115

Fonctions de chaînes de caractères

• Comparaison et longueur

– strcmp(str1, str2) : comparaison binaire (comme en C)

– strlen(str) retourne la longueur de str

• Pour plus d’informations se reporter à http://www.php.net/manual/fr/ref.strings.php

116

Quelques exemples pratiques sur les dates

117

Date et heure

• L’affichage de la date et l'heure courante peut se faire via la fonction date

– date("format", $timestamp) retourne une chaîne de caractères qui contient la date $timestamp au format indiqué en premier argument

– $timestamp est la date Unix (nombre de secondes depuis le 1er janvier 1970)

– Si $timestamp est omis, il s'agit de la date actuelle

118

echo "Nous sommes le " . date("j m Y") . " et il est " .date("H \h i") . " mn";

– La page suivante fournie l’ensemble options de formatage reconnues par la fonction date :

• http://php.net/manual/fr/function.date.php

• si le format est omis, date() retourne $timestamp

– mktime(h, m, s, M, J, A) retourne le timestamp associé à la date indiquée en paramètres

119

Date et heure

GESTION DES SESSIONS UTILISATEURS

120

Cookie

Jetons stockés sur le poste client contenant des informations relatives à un domaine.

Les informations sont stockés sous la forme :

clé = valeur

Uniquement des chaînes de caractères

121

Cookie

Les cookies ont une durée de vie réglable (par défaut détruit lors de la fermeture du navigateur).

Ils sont disponibles via la super globale $_COOKIE

Pour ajouter un cookie en PHP il est possible d’utiliser la fonction setcookie(). Elle doit être impérativement appelé avant tout code html.

122

Cookie

Cette fonction attend 2 paramètres obligatoires et 5 facultatifs :

name : le nom du cookie,

value : la valeur associés au cookie,

expire : le timestamp d’expiration,

path : le chemin relatif pour accéder à ce cookie,

domain : le domaine ou le cookie sera disponible (sous domaines)

secure : envois le cookie uniquement si la connexion est sécurisé (https)

httpOnly : envoi le cookie uniquement sur le protocole http et donc ne sera pas accessible en JavaScript.

123

Session

• Un moyen de sauvegarder des informations entre 2 requêtes.

• Chaque client reçoit un identifiant de session stocké de 2 manières différentes :

– dans un cookie avec pour clé PHPSESSID

• impossibilité de garder la session si le client inhibe les cookies.

– dans l’url avec la constante SID

• le client voit sont SESSIONID et peut le modifier.

124

• Lorsque le client effectue une requête, le serveur vérifie si une session a déjà été ouverte :

– Automatiquement : session.auto_start est à 1 dans php.ini

– Manuellement : avec les fonctions session_start() ou session_register().

125

Session

La session peut être détruite de plusieurs façons :

Par le serveur

au bout d’un certain temps d’inactivité (30mn par défaut, configurable),

en appelant la fonction session_destroy().

Il faut néanmoins vider la session avec la fonction unset().

126

Session

Par le client

lorsque l’on ferme son navigateur,

127

session_start();

$_SESSION['toto'] = 5;

echo '<a href="page.php">Page suivante</a>';

// echo $_SESSION['toto'] dans page.php

affichera "5"

Header

PHP permet de modifier les en-tête http qui sont renvoyés au client.

lancer un code d’erreur (404, 500 …),

faire une redirection,

128

header( "HTTP/1.1 404 Not Found " );

header( "Location: index.php" );