introduction au web - sophia - inria · tcp/ip 80 php html, img, script navigateur tcp/ip 8/11/2017...

38
Introduction au Web PHP Par Elena CABRIO Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi 8/11/2017 Introduction au Web – PHP – ELENA CABRIO 1

Upload: vunga

Post on 30-Jun-2018

214 views

Category:

Documents


1 download

TRANSCRIPT

Introduction au WebPHP

Par Elena CABRIO

Basé sur les cours de Jean-Pierre Lozi, Philippe Renevier et Andrea Tettamanzi

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 1

Principes : définitions

langage : PHP (html preprocessor)

un pré processeur de HTTP

typage dynamique

orienté objet

créé par

Rasmus

Lerdorf

en 1994

5e version et 7e version

http://www.php.net/

HTTPDHTTP

TCP/IP 80

PHPHTML, Img, Script

Navigateur

TCP/IP

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 2

Une exécution côté SERVEUR

Le script PHP est toujours

stocké et

exécuté sur le serveur web par l’interpréteur de PHP

Sur demande d’un document (.php, .inc)

Le serveur identifie que c’est un fichier php (extension)

Recherche les « balises » <?php … ?>

Lance l’interpréteur pour ces balises

Retourne le document généré (réponse HTTP)

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 3

Internet : - 3.b identification de la

localisation de la page

(DNS)

- …

- 3.f Internet aiguille la

réponse vers l’ordinateur

demandeur

3.d - Réception de la demande par le serveur

3.e - Identification du document à partir de l’URL

L’utilisatrice veut voir la pager

http://www-sop.inria.fr/members/Elena.Cabrio

1. Tape l’adresse, valide

2. Le navigateur fait une requête

3. Le navigateur attend la réponse

4. Affiche la « page »

5. L’utilisatrice lit la page

3.a : le navigateur, via

l’ordinateur, demande

un document

3.c Internet

« aiguille » la

machine jusqu’à

la l’endroit

identifié (= un

ordinateur)

3.f - Renvois de la réponse (document ou erreur)

3.f

Exécution du PHP sur

le serveur entre les

étape 3.e et 3.f, avec

peut-être d’autres

requêtes

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 4

Exécution du php

Langage interprété

Utilisable comme n’importe quel langage

Contextualisé Web

Serveur web et extension php

Exemple : xampp

Serveur apache

httpd.conf

php.ini

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 58/11/2017 Introduction au Web – PHP – ELENA CABRIO 5

Php et web

Un programme

dont le résultat est une page web

le résultat (flux de sortie = echo) étant renvoyé au client

dont Le résultat est donc la page web

Ce programme permet

d’avoir un contenu qui évolue sans que le code « source » ne soit modifié

de traiter des données

d’écrire des résultats côté serveur

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 6

exemple

(version côté obscur)<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>HTML avec PHP</title>

</head>

<body>

<h1>HTML + PHP</h1>

<p>Nous sommes le <?php

echo date ("j/m/Y");

?></p>

</body></html>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>HTML avec PHP</title>

</head>

<body>

<h1>HTML + PHP</h1>

<p>Nous sommes le 26/01/2017</p>

</body></html>

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 7

exemple

(version côté lumineux)<?php

// calcul préalable

$date = "<p>Nous sommes le";

$date = $date . date("j/m/Y") . "</p>";

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>HTML avec PHP</title>

</head>

<body>

<h1>HTML + PHP</h1>

<?php

echo $date;

?>

</body></html>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>HTML avec PHP</title>

</head>

<body>

<h1>HTML + PHP</h1>

<p>Nous sommes le 26/01/2017</p>

</body></html>

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 8

Syntaxe

Vue au fur et à mesure

Commentaires : // (sur une ligne) ou /* … */

Fin des lignes par ;

Début d’un bloc d’instruction avec {

Fin d’un bloc d’instruction avec }

Variables :

Forme : $nom

Pas de déclaration

Le type dépend du contenu

Appel de fonction (avec des variables ou des valeurs)

nomDeLaFonction(paramètre1, paramètre2, paramètre3);

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 9

Chaines de caractères $chaine = "une chaine de caractère";

strlen($chaine) pour connaître la taille

$chaine{$i} : le (i+1) ième caractère

. pour concaténer (ajouter deux chaines)

Remplacement des variables par leurs valeurs quand elles sont entre " … "

$msg = "<p>la variable \$chaine vaut : $chaine</p>";

$msg contient le texte «la variable $chaine vaut : une chaine de caractère»

Caractères spéciaux : pour les voirs tels quels il faut les précéder d’un \

\$ pour avoir un caractère ‘$’

\n : retour à la ligne ; \t : tabulation

Fonction print de php : pour afficher (générer du html) :

print($msg) ; // le contenu de $msg sera visible dans la page web

echo $msg ; // équivalent

echo "$msg" ; // équivalent

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 10

CONDITION : IF / ELSE La structure la plus courante est le if ... else.

if (expression) // Bloc { } si expression est vraie.

else // Bloc { } si expression est fausse (optionel).

// Ici le script continue.

Exemple

$marquePluriel = ""; // chaine vide initiale

if ($nbJour > 1)

{ $marquePluriel = "s"; } // s’il y a plus qu’un jour

$texte = "<p>Il y a $nbJour jour$marquePluriel</p>";

Si $NbJour vaut 1, $texte vaut "<p>Il y a 1 jour</p>"

Si $NbJour vaut 2, $texte vaut "<p>Il y a 2 jours</p>"

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 11

Logiques et comparaisons

($a && $b) //ET logique.

($a || $b ) // OU logique

($a xor $b) //Ou exclusif

(!$a) // NOT

($a == $b) //Vrai si $a est égal à $b.

($a != $b) //Vrai si $a est différent de $b.

($a < $b) //Vrai si $a est inférieur à $b.

($a > $b) //Vrai si $a est supérieur à $b.

($a <= $b) //Vrai si $a est inférieur ou égal à $b.

($a >= $b) //Vrai si $a est supérieur ou égal à $b

if ( ($a < $b) && ($a < $c) ) { /* …. */ }

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 112

Opérations Opérateurs arithmétiques :

$a + $b //Addition de $a et $b

$a - $b //Soustraction de $b `a $a

$a * $b //Multiplication de $a et $b

$a / $b //Division de $a par $b

$a % $b //$a modulo $b (reste de la division de $a par $b)

$i++; // incrémenter $i (qui vaut 5 si son ancienne valeur est 4)

$j = ++$i; // incrémenter $i puis affecter cette valeur à $j

$k = $i++; // affecter la valeur de $i à $k puis incrémenter $i

$k--; // décrémenter $k

Opérateur de concaténation des chaînes:

$c1 = "Bonjour " ;

$c2 = " le monde";

$c = $c1 . " tout " . $c2 ; //donne « Bonjour tout le monde » dans $c

$c .= " ! "; //donne « Bonjour tout le monde !» dans $c, équivalent à $c = $c . " ! ";

8/11/2017 Introduction au Web – PHP – ELENA CABRIO13

Fonctions internes

PHP dispose de nombreuses fonctions et structures standards.

http://www.php.net

Il y a aussi des fonctions qui requièrent des extensions spécifiques de PHP,

sans lesquelles vous obtiendrez l'erreur fatale undefined function.

Utilisez phpinfo( ) ou get_loaded_extensions() pour savoir quelles sont les

extensions qui sont compilées avec votre PHP.

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 14

Exemple de fonction php : datestring date ( string format [, int timestamp] )

retourne une date sous forme d'une chaîne, au format donné par la chaîne format. La date est

fournie par le paramètre timestamp (un entier), sous la forme d'un timestamp. Par défaut, la

date courante est utilisée.

<?php

// Aujourd'hui, le 12 April 2006, 10:16:18 am

$aujourdhui = date('F j, Y, g:i a'); // April 12, 2006, 10:16 am

$aujourdhui = date('m.d.y'); // 04.12.06

$aujourdhui = date('j, m, Y'); // 12, 04, 2006

$aujourdhui = date('Ymd'); // 20060412

$aujourdhui = date('\C\'\e\s\t\ \l\e\ jS \j\o\u\r\. '); // C'est le 12th jour.

$aujourdhui = date('D M j G:i:s T Y'); // Wen Apr 12 10:16:18 Paris, Madrid 2006

$aujourdhui = date('H:i:s'); // 10:16:18

// notation française

$aujourdhui = date('d/m/y'); // 12/04/06

$aujourdhui = date('d/m/Y‘); // 12/04/2006

?> 8/11/2017 Introduction au Web – PHP – ELENA CABRIO 15

Exemple de fonction php : strtotime

int strtotime ( string time [, int now] )

essaye de lire une date au format anglais US dans la chaîne time, et de la transformer en timestamp Unix (le nombre de secondes depuis le 1er Janvier 1970 à 00:00:00 GMT), relativement au timestamp now, ou à la date courante si ce dernier est omis.

Le résultat peut servir en second paramètre à date

<?php

$now = strtotime('now');

$Xmas = strtotime('25 december 2015');

$Xmas = strtotime('2015-12-25'); // cela ne change rien

$Xmas = strtotime('2015-12-25 11:50:00'); // idem avec l’heure

$nextWeek = strtotime('+1 week');

$nextMonday = strtotime('next Monday');

?> 8/11/2017 Introduction au Web – PHP – ELENA CABRIO 16

exercice : calcul de date

Notez qu’il y a 60*60*24 = 86400

secondes dans un jour

Les opérations de calculs sont

« classique » : +, -, *, /

Exemple : $diff = $date1 - $now ;

La fonction de php « floor » permet

d’obtenir la valeur entière la plus

proche (mais inférieur)

Exemple : $val = floor(9.999); // 9

N’OUBLIEZ PAS LES BALISES HTML POUR

AFFICHER VOS CALCULS

1. Dans le fichier date.php

affichiez la date du jour

2. Dans le fichier date.php

affichez le nombre de jour

restant avant le 21 juin

2018

3. Dans le fichier date.php

affichez le nombre de jour

écoulez depuis la rentrée

(le 7 septembre 2017)

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 17

<?php

$date = strtotime('21 june 2018');

$diff = $date - strtotime('now');

$resteJ = $diff / (60*60*24) ;

$resteJ = (int) floor( $resteJ );

$resteS = $diff - $resteJ*(60*60*24);

$tempsRestant = "<p>Il reste ".$resteJ." jours et ".$resteS."

secondes avant le 21 june 2018 </p>";

?>

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 18

Structures de contrôle

Éléments de Base de Php

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 19

Foreach (1/2) C'est un moyen simple de passer en revue un tableau

Deux syntaxes (avec ou sans clefs)

foreach ($tableau as $value) { /*

$value prend successivement toutes les valeurs contenues dans $tableau

toutes les instructions faites dans ce bloc sont exécutées pour

chaque valeur

*/}

À chaque itération la valeur de l'élément courant est assignée à $value et le pointeur interne à la liste (tableau) est avancé d'un élément

Tant qu’il reste des cases non parcourues dans le tableau, à la prochaine itération, on accédera à l'élément suivant.

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 20

Exemple de liste : glob

array glob ( string $pattern [, int $flags = 0 ] )

La fonction glob() recherche tous les fichiers don’t le chemin correspond à $pattern

$pattern est proche de celui du « ls »

"*.php" : tous les fichiers php dans le dossier dans lequel s’exécute le script

"./news/*.*" : tous les fichiers dans le sous-dossiers news

Les options (flags) possibles sont :

GLOB_MARK - Adds a slash to each directory returned

GLOB_NOSORT - Return files as they appear in the directory (no sorting)

GLOB_NOCHECK - Return the search pattern if no files matching it were found

GLOB_NOESCAPE - Backslashes do not quote metacharacters

GLOB_BRACE - Expands {a,b,c} to match 'a', 'b', or 'c'

GLOB_ONLYDIR - Return only directory entries which match the pattern

GLOB_ERR - Stop on read errors (like unreadable directories), by default errors are ignored.

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 21

Foreach (2/2) : exemple

Supposons que le script php soit exécuté dans le dossier « politique »

// listes des fichiers .news dans le dossier courant

$fichiers = glob("*.news");

$texte = "<p>Le dossier contient les fichiers : ";

foreach($fichiers as $f)

// $f prendra successivement toutes les valeurs (ici

// les noms des fichiers) contenues dans la

// liste/tableau $fichiers

{

$texte = $texte . "$f , ";

}

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 22

foreach($fichiers as $f)

{

$texte = $texte . "$f, ";

}

Avant la boucle : $texte vaut "<p>Le dossier contient les fichiers : "

1ère itération: $f vaut "01.news" ; il reste à parcourir 02,news 03,news 04.news 05,news$texte vaut "<p>Le dossier contient les fichiers : 01.news, "

2ième itération: $f vaut "02.news" ; il reste à parcourir 03,news 04.news 05,news$texte vaut "<p>Le dossier contient les fichiers : 01.news, 02.news, "

3ième itération: $f vaut "03.news" ; il reste à parcourir 04.news 05,news$texte vaut "<p>Le dossier contient les fichiers : 01.news, 02.news, 03.news, "

4ième itération: $f vaut "04.news" ; il reste à parcourir 05,news$texte vaut "<p>Le dossier contient les fichiers : 01.news, 02.news, 03.news, 04.news, "

5ième itération: $f vaut "05.news" ; il ne reste plus rien à parcourir$texte vaut "<p>Le dossier contient les fichiers : 01.news, 02.news, 03.news, 04.news, 05.news, "

Fin de la boucle :$texte vaut "<p>Le dossier contient les fichiers : 01.news, 02.news, 03.news, 04.news, 05.news, "

Déroulement de l’exemple

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 23

Chaines de caractère

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 24

Chaines de caractères $chaine = "une chaine de caractère";

strlen($chaine) pour connaître la taille

$chaine{$i} : le (i+1)e caractère

. pour concaténer (ajouter deux chaines)

array explode ( string $delimiter , string $string)

Retourne un tableau découpant $string en fonction des occurrences de

$delimiter

Exemple explode(" / " ,

"http://deptinfo.unice.fr/~stouati/L1|")

donnera :

1

deptinfo.unice.fr2

~stouati3

http:0

L1|48/11/2017 Introduction au Web – PHP – ELENA CABRIO 25

Chaines de caractères

$Remplacement des variables par leurs valeurs quand elles sont entre " … "

$msg = "<p>la variable \$chaine vaut : $chaine</p>";

$msg contient le texte «la variable $chaine vaut : une chaine de caractère»

Caractères spéciaux : pour les voir tels quels il faut les précéder d’un \

\$ pour avoir un caractère ‘$’

\n : retour à la ligne ; \t : tabulation

Fonction print de php : pour afficher (générer du html) :

print($msg) ; // le contenu de $msg sera visible dans la page web

echo $msg ; // équivalent

echo "$msg" ; // équivalent

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 26

Les variables dans les chaînes de caractèreEntourez le nom de la variable avec des accolades pour indiquer

explicitement son nom.

<?php

$aliment = ‘fromage';

// Correct, car "," n'est pas autorisé dans les noms de variables

echo "Du $aliment et du pain !";

// Pas correct, car 's' peut faire partie d'un nom de variable, et PHP

recherchera alors $aliments (=> Notice + remplacer par une chaine vide)

echo "Il a goûté plusieurs $aliments";

echo "Il a goûté plusieurs {$aliment}s"; // Correct

?>

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 27

Fonctions courantes

Sous chaine de caractère

substr

string substr ( string $string , int $start [, int $length ] )

Retourne le segment de $string défini par $start et $length.

Ne modifie pas $string

substr("fonctions courantes", 1, 3) "onc"

Supprime les espaces (ou d'autres caractères) en début et fin de chaîne

trim

stringtrim(string$string [,string $character_mask=" \t\n\r\0\x0B" ])

$title=“ Programming PHP \n”

$string=trim($title); \\$string=“Programming PHP”8/11/2017 Introduction au Web – PHP – ELENA CABRIO 28

Fonctions courantes

Retourne un segment de chaîne

Substr

string substr(string $string, int$start[ , int$length]

$name= "Fred Flintstone“

$fluff=substr($name, 6, 4); //$fluff = “lint”

Recherche dans une chaine

strpos

int strpos ( string $string , mixed $recherche)

Cherche la position numérique de la première occurrence

de $recherche dans $string.

strpos("fonctions courantes", "on") 18/11/2017 Introduction au Web – PHP – ELENA CABRIO 29

Fonctions courantes

Remplacement de sous-partie(s)

str_replace

mixed str_replace ( mixed $search , mixed $replace , mixed $subject

[, int &$count ] )

Pour remplacer les apparitions de $search dans $subject par $replace

on peut limiter ce remplacement à $count fois

Les paramètres peuvent être des tableaux… c.f. ci-dessous… pour

des recherches / remplacements successifs sur plusieurs mots

Retourne le résultat : un chaine de caractères (ou un tableau)

str_replace("on", "XXX", "fonctions courantes") "fXXXctiXXXs

courantes"

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 30

Conversion Vers une chaine de caractère

(string)

fonction strval( )

Conversion automatique (cas d’echo)

Un tableau sera converti en « Array » : utilisation de la fonction var_dump( ) ou print_r( )

<?php

$b=3.1;

$c=true;

var_dump($b,$c);?>

cet exemple va

afficher:

float=3.1

bool=true

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 31

Conversion

Vers un entier

fonction intval retourne la valeur numérique entière équivalente d'une variable

echointval(42); //42

echointval(4.2); //4

echointval('42'); //42

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 32

Association “indice” -> valeur

Tableaux

1

Mme. Martin2

E.T.3

M. Dupond0

Teal’C48/11/2017 Introduction au Web – PHP – ELENA CABRIO 33

Tableaux Une variable

=> plusieurs cases (avec chacune un indice différent) => une valeur par case (qui peut être un tableau)

PHP gère dynamiquement la taille des tableaux

indicés soit associatifs.

Tableaux indicés : un entier positif par case.

Compteur/pointeur interne au tableau

Création:

$tab[0] = " élément 1 "; $tab[1] = "élément 2 ";

$tab[2] = 120;

// Ou compteur/pointeur interne au tableau

$tab[] = "élément 1 "; // $tab[0] !

$tab[] = "élément 2 "; // $tab[1] !

$tab[] = 120; // $tab[2] !

// Ou fonction « array »

$tab = array("élément 1 ", "élément 1 ", 120);8/11/2017 Introduction au Web – PHP – ELENA CABRIO 34

Tableaux associatifs Indexation par clef = une chaine de caractères

Exemple

$mes["Vertigo"] = "Hitchcock";

$mes["Sacrifice"] = "Tarkovski";

$mes["Alien"] = "Scott";

// Ou fonction « array »

$mes = array(

"Vertigo" => "Hitchcock",

"Sacrifice" => "Tarkovski",

"Alien" => "Scott");

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 35

Tableaux multi-dimensionnels

Une case peut contenir un tableau dont une case (ou plusieurs) peut être un tableau, etc.

$tab = array( array("En haut gauche", "En haut

droite"), array("En bas gauche", "En bas droite"),

array("clef" => 1);

// $tab[0][0] == "En haut gauche";

// $tab[0][1] == "En haut droite";

// $tab[1][0] == "En bas gauche";

// $tab[1][1] == "En bas droite";

// $tab[2]["clef"] == 1

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 36

Connaitre le nombre d’élément

d’un tableau

Fonction count

Exemple

$tab = array ("élément 1 ", "élément 1 ", 120);

count($tab) vaut 3

$mes = array (

"Vertigo" => array ( "Alfred", "Hitchcock"),

"Sacrifice" => array ( "Andrei", "Tarkovski"),

"Alien" => array ( "Ridley", "Scott"));

count($mes) vaut 3

count($mes["Vertigo"]) vaut 2

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 37

unset

unset() détruit les variables spécifiées. (ne retourne pas de valeurs)

$arr = array(5 => 1, 12 => 2);

$arr[] = 56; // Ceci revient à $arr[13] = 56; à ce moment du

script

$arr["x"] = 42; // Ceci ajoute un nouvel élément avec l'index

"x"

unset($arr[5]); // Ceci efface un élément du tableau

unset($arr); // Ceci efface tout le tableau

8/11/2017 Introduction au Web – PHP – ELENA CABRIO 38