Introduction au Web - Sophia - Inria · TCP/IP 80 PHP HTML, Img, Script Navigateur TCP/IP 8/11/2017...
Transcript of Introduction au Web - Sophia - Inria · TCP/IP 80 PHP HTML, Img, Script Navigateur TCP/IP 8/11/2017...
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è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