Introduction PHP php echo Hello world Georges GARDARIN

  • Slides: 46
Download presentation
Introduction à PHP <? php echo "Hello world"; ? > Georges GARDARIN et. al.

Introduction à PHP <? php echo "Hello world"; ? > Georges GARDARIN et. al. Synthèse pour les étudiants de M 1 Stats 30/01/2022 1

Plan l l l Introduction Types de données Programmation de base Programmation objet Accès

Plan l l l Introduction Types de données Programmation de base Programmation objet Accès aux bases de données Accès au Web ¡ ¡ ¡ 30/01/2022 c. URL XML AJAX 2

1. PHP – Introduction (1) l PHP: Hypertext Preprocessor l Code exécuté coté serveur

1. PHP – Introduction (1) l PHP: Hypertext Preprocessor l Code exécuté coté serveur l Langage interprété [compilable] Requête <html> code php Serveur PHP Client Page Web (xhtml…) 30/01/2022 3

PHP – Introduction (2) l l l l Portabilité et distribution C/S, 3/3, P

PHP – Introduction (2) l l l l Portabilité et distribution C/S, 3/3, P 2 P Accès aux bases de données facile Génération graphique sophistiquée Interopérabilité avec XML, parsing xml avec les standards SAX et DOM, Web services… Support des protocoles réseau (LDAP, IMAP, SNMP, POP 3…) Traitement des chaînes de caractères (regex, perl) Nombreuses bibliothèques (PEAR, PECL, . . . ) 30/01/2022 4

Programmer en PHP (3) l Syntaxe proche du C l Interpréteur souple l Types

Programmer en PHP (3) l Syntaxe proche du C l Interpréteur souple l Types de données classiques l Typage à première affectation l Conversion automatique de type l Tableaux dynamiques à sélecteur l Modèle objet intégré 30/01/2022 5

2. Types de données l Quatre types de données simples : ¡ Integer l

2. Types de données l Quatre types de données simples : ¡ Integer l ¡ double l ¡ chaîne de caractères de longueur variable 'string' ou "$string". Boolean l l nombre à virgule flottante compris entre -1. 78*10308 et +1. 78*10308. String l ¡ Entier compris entre -2 147 483 647 et 2 147 483 647. valeur booléenne true ou false. Les variables ne possèdent pas de types de données prédéfinis et changent de type selon leur contenu ¡ 30/01/2022 $a = 1; $a = 1. 3 ; $a = ‘ABC’ ; 6

Les chaînes de caractères l Entre guillemets simples ou doubles ¡ ¡ l l

Les chaînes de caractères l Entre guillemets simples ou doubles ¡ ¡ l l Caractères de contrôle d'espace Caractères d'échappement permettant l'exécution du contrôle ¡ ¡ l 'Ma chaine $var' : pas interprétée "Ma chaine $var' : interprétée t tabulation n nouvelle ligne r retour à la ligne v tabulation verticale Possibilité d'imposer le suivi d'un format 30/01/2022 7

Les expressions régulières l l l Patterns de chaines Permet les recherches de sous-chaînes

Les expressions régulières l l l Patterns de chaines Permet les recherches de sous-chaînes Permet les extractions et les remplacements Deux formes de chaîne : Unix (POSIX) et Perl (PCRE) Exemple (PCRE) : ¡ extraction des éléments d'un tableau HTML $regexp_code = '#(? s)<TD>([A-Z]+)</TD>#'; $regexp_chif = '#(? s)<TD>([-+. 0 -9]+|NUL 1)</TD>#'; ¡ preg_match_all($regexp_code, $content, $table_code) ; ¡ preg_match_all($regexp_chif, $content, $table_chif) ; ¡ ¡ 30/01/2022 8

Les tableaux l Tableaux classiques ¡ // initialisation ¡ $table=array(0, 1, 2, 3, 4,

Les tableaux l Tableaux classiques ¡ // initialisation ¡ $table=array(0, 1, 2, 3, 4, 5); ¡ // parcours simple ¡ print 'table a '. count($table). " élémentsn"; ¡ for($i=0; $i<count($table); $i++) l 30/01/2022 print "table[$i]=$table[$i]n"; 9

Tableaux associatifs l l l Aussi appelés dictionnaires Tableaux associant une clé à une

Tableaux associatifs l l l Aussi appelés dictionnaires Tableaux associant une clé à une valeur La clé peut être une chaîne de caractère ou un nombre l // Insertion d'une ligne ¡ l // déclaration d'un tableau ¡ l $dico["cle"] = valeur; exemple : $dico['Pierre'] = 20 ; $dico=array('Pierre'=>20, 'Paul'=>22, 'Marie'=>18); // Accès à un élément ¡ 30/01/2022 $variable = $dico["cle"]; exemple: $age = $dico['Pierre'] ; 10

3. Opérateurs l l Arithmétiques + Addition 5+2 - Soustraction 5 -2 * Multiplication

3. Opérateurs l l Arithmétiques + Addition 5+2 - Soustraction 5 -2 * Multiplication 5*2 / Division 5/2 % Modulo 5%2 De comparaisons ¡ ¡ 30/01/2022 Servent à tester une condition Attention, = est l’opérateur d’affectation, pas de test d’égalité ! == Egalité $v == 5 <, <= Infériorité $v < 5 >, >= Supériorité $v >= 7 != Différent $v != 7 % Modulo 5%2 11

Opérateurs logiques et sur bits && and et $c 1 && $c 2 $c

Opérateurs logiques et sur bits && and et $c 1 && $c 2 $c 1 and $c 2 & et $c 1 & $c 2 || or ou $c 1 || $c 2 $c 1 or $c 2 | ou $c 1 | $c 2 xor ou exclusif $c 1 xor $c 2 ^ ou exclusif $c 1 ^ $c 2 ! négation !$c 1 ~ négation ~$c 1 ? : Affectation conditionnelle (opérateur ternaire) $c 1 == 0 ? $c 2 : $c 3 >> << Décalage à droite Décalage à gauche $c 1 <<2 $c 2>>3 Il existe des ordres de préséance des opérateurs classiques Il est possible d’utiliser les parenthèse () pour forcer une préséance 30/01/2022 12

Structure de contrôle if (cond) { instructions 1; } elseif (cond) {instructions 2; }

Structure de contrôle if (cond) { instructions 1; } elseif (cond) {instructions 2; } … else(cond) {instructions N; } switch (expression) { case val 1: instruction; break; case val 2: instruction; break; … default: instruction; } 30/01/2022 for(init, cond, evolution) { instructions; } while (condition) { instructions; [break; ] } do {instructions} while (condition) ; 13 13

4. Inclusion de code et sortie l Require ("fichier") ¡ ¡ l Include ("fichier")

4. Inclusion de code et sortie l Require ("fichier") ¡ ¡ l Include ("fichier") ¡ l Idem require mais évalue et exécute le code à chaque rencontre de include – possibilité include_once() Exit ¡ l Recopie un fichier de code à sa place Exemple : require ("opendb. php") Permet de quitter une page PHP Die ('message') ¡ 30/01/2022 Die écrit le message et termine le programme 14

5. Les fonctions l Bloc d'instructions avec paramètres optionnels créé par l'intermédiaire de l'instruction

5. Les fonctions l Bloc d'instructions avec paramètres optionnels créé par l'intermédiaire de l'instruction function : ¡ function nom_fonction([$param_1 [= val_déf], . . . , $param_N [= val_déf]]) ¡ { Bloc d'instructions. . . ¡ [return valeurs. . . ; ] } l Appel de fonction de la forme : ¡ $resultat 30/01/2022 = nom_fonction([arg_1, . . . , arg_N]); 15

Portée des variables et exemple function Surface. Triangle($largeur, $hauteur) { $resultat = ($largeur *

Portée des variables et exemple function Surface. Triangle($largeur, $hauteur) { $resultat = ($largeur * $hauteur) / 2; return $resultat; } echo Surface. Triangle(20, 10). " cm<sup>2</sup>"; // retourne 100 cm 2 echo "($largeur * $hauteur) / 2 = ". $resultat; // instruction erronée : variables indéfinies 30/01/2022 16

Exemples : fonctions sur variables l gettype($var) ¡ l settype($var) ¡ l permet de

Exemples : fonctions sur variables l gettype($var) ¡ l settype($var) ¡ l permet de tester si une valeur a été affectée à la variable / ou ne l’a pas été unset($var) ¡ l change le type d’une variable, ce qui peut impliquer une conversion isset($var) / empty($var) ¡ l retourne le type de la variable argument détruit une variable is_int/is_double/is_string ¡ 30/01/2022 Permettent de tester le type d’une variable 17

Les bibliothèques de fonctions l Chaînes de caractères l Expressions régulières l Gestion de

Les bibliothèques de fonctions l Chaînes de caractères l Expressions régulières l Gestion de fichiers l Une grande variété l Aperçu ¡ http: //www. guidephp. com/bibliotheque-php. php 30/01/2022 18

6. Exemple de programme d'après Serge Tahé, université d'Angers l l l l l

6. Exemple de programme d'après Serge Tahé, université d'Angers l l l l l <? php // ceci est un commentaire // variable utilisée sans avoir été déclarée $nom="dupont"; // un affichage écran print "nom=$nomn"; // un tableau avec des éléments de type différent $tableau=array("un", "deux", 3, 4); // son nombre d'éléments $n=count($tableau); // une boucle for($i=0; $i<$n; $i++) print "tableau[$i]=$tableau[$i]n"; // initialisation de 2 variables avec le contenu d'un tableau list($chaine 1, $chaine 2)=array("chaine 1", "chaine 2"); // concaténation des 2 chaînes $chaine 3=$chaine 1. $chaine 2; // affichage résultat print "[$chaine 1, $chaine 2, $chaine 3]n"; 30/01/2022 19

Exemple (suite) l l l l l // utilisation fonction affiche($chaine 1); // le

Exemple (suite) l l l l l // utilisation fonction affiche($chaine 1); // le type d'une variable peut être connu affiche. Type($n); affiche. Type($chaine 1); affiche. Type($tableau); // le type d'une variable peut changer en cours d'exécution $n="a changé"; affiche. Type($n); // une fonction peut rendre un résultat $res 1=f 1(4); print "res 1=$res 1n"; // une fonction peut rendre un tableau de valeurs list($res 1, $res 2, $res 3)=f 2(); print "(res 1, res 2, res 3)=[$res 1, $res 2, $res 3]n"; // on aurait pu récupérer ces valeurs dans un tableau $t=f 2(); for($i=0; $i<count($t); $i++) print "t[$i]=$t[$i]n"; 30/01/2022 20

Exemple (fin) l l l l l l // des tests for($i=0; $i<count($t); $i++)

Exemple (fin) l l l l l l // des tests for($i=0; $i<count($t); $i++) // n'affiche que les chaînes if (get. Type($t[$i])=="string") print "t[$i]=$t[$i]n"; // d'autres tests for($i=0; $i<count($t); $i++) // n'affiche que les entiers >10 if (get. Type($t[$i])=="integer" and $t[$i]>10) print "t[$i]=$t[$i]n"; // une boucle while $t=array(8, 5, 0, -2, 3, 4); $i=0; $somme=0; while($i<count($t) and $t[$i]>0){ print "t[$i]=$t[$i]n"; $somme+=$t[$i]; //$somme=$somme+$t[$i] $i++; //$i=$i+1 }//while print "somme=$sommen"; // fin programme exit; ? > 30/01/2022 21

7. Programmation objet en PHP l Class Ma. Classe [extends Super. Class] ¡ ¡

7. Programmation objet en PHP l Class Ma. Classe [extends Super. Class] ¡ ¡ ¡ l Instanciation ¡ l function Ma. Classe(parametre 1, parametre 2) { this. attribut. Public = parametre 1; var attribut. Prive = parametre 2; this. methode. Publique = function() { } var methode. Privee = function() { } } var objet. De. Ma. Classe = new Ma. Classe("valeur 1", "valeur 2"); Appel des méthodes ¡ ¡ 30/01/2022 $obj = new Classe(); //Instanciation de classe $obj->methode. Instance(); //Application de méthode 22

Exemple de classe l class Livre extends Produit { ¡ private $auteur; ¡ private

Exemple de classe l class Livre extends Produit { ¡ private $auteur; ¡ private $editeur; ¡ private $nb_pages; ¡ function _construct($auteur, $editeur, $nb_pages) { l l l $this->auteur = $auteur; $this->editeur = $editeur; $this->nb_pages = $nb_pages; } function changer_nb_pages($nb){…} ¡ } l $livre = new Livre(…); l $livre->changer_nb_pages(150) ; ¡ 30/01/2022 23

8. PHP et les bases de données l Support de nombreuses bases de données

8. PHP et les bases de données l Support de nombreuses bases de données ¡ DB 2, Dbase, Oracle, Sql. Server, ODBC, Postgre. SQL, Unix DBM… Interface spécifique à chaque base l Couche d'abstraction de bases de données l ¡ l Exemple : PEAR: MDB 2 Principe d'interface similaire ¡ 30/01/2022 Exemple : My. SQL 24

PHP – My. SQL l Ouvrir une connexion au serveur : ¡ l Sélectionner

PHP – My. SQL l Ouvrir une connexion au serveur : ¡ l Sélectionner une base de données de travail : ¡ l mysql_query Lire le résultat d'une requête : ¡ l mysql_select_db Effectuer une requête : ¡ l mysql_connect mysql_result, mysql_fetch_array, . . . Fermer la connexion : ¡ 30/01/2022 mysql_close 25

<? php // Connexion et sélection de la base $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')

<? php // Connexion et sélection de la base $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') or die('Impossible de se connecter : '. mysql_error()); echo 'Connected successfully'; mysql_select_db('my_database') or die('Impossible de sélectionner la base de données'); // Exécution des requêtes SQL $query = 'SELECT * FROM my_table'; $result = mysql_query($query) or die('Échec de la requête : '. mysql_error()); // Affichage des résultats en HTML echo "<table>n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "t<tr>n"; foreach ($line as $col_value) { echo "tt<td>$col_value</td>n"; //. . . ? > 30/01/2022 26

PHP – SGBD : Abstraction l Exemple de bibliothèque d'abstraction : PEAR: : MDB

PHP – SGBD : Abstraction l Exemple de bibliothèque d'abstraction : PEAR: : MDB 2 <? php require_once('MDB 2. php'); $mdb 2 =& MDB 2: : connect('pgsql: //usr: pw@localhost/dbnam'); if (PEAR: : is. Error($mdb 2)) { die($mdb 2 ->get. Message()); } // La requête. . . $res =& $mdb 2 ->query('SELECT * FROM clients'); if (PEAR: : is. Error($res)) { die($res->get. Message()); } while (($row = $res->fetch. Row())) { foreach($row as $col) { echo $col; } } $mdb 2 ->disconnect(); ? > 30/01/2022 27

9. PHP – c. URL l Bibliothèque portable l Communication entre serveur applicatifs l

9. PHP – c. URL l Bibliothèque portable l Communication entre serveur applicatifs l Interaction transparente via les protocoles courants 30/01/2022 28

PHP – c. URL : protocoles l Support de nombreux protocoles ¡ ¡ HTTP:

PHP – c. URL : protocoles l Support de nombreux protocoles ¡ ¡ HTTP: authentification, Get, Post, gestion des cookies et des sessions FTP : authentification, liste, envoi et réception de fichiers LDAP : authentification, lecture Autres : Telnet, Gopher, Dict, File Chiffrage et certificat SSL l Connexions via un proxy l 30/01/2022 29

PHP – c. URL Fonctionnement <? php /** Ce code récupère le flux ATOM

PHP – c. URL Fonctionnement <? php /** Ce code récupère le flux ATOM de Google News et le retourne directement au navigateur **/ # Initialisation $ch = curl_init("http: //news. google. fr/". "nwshp? hl=fr&tab=wn&output=atom"); # Exécution curl_exec($ch); # Fermeture de la session c. URL curl_close($ch); # C'est tout ! ? > 30/01/2022 30

PHP – c. URL l c. URL est utilisable dans d'autres langages l c.

PHP – c. URL l c. URL est utilisable dans d'autres langages l c. URL fait bien plus ! l Exemple : ¡ récupération d'un flux ATOM dans un fichier temporaire et upload sur un serveur FTP distant 30/01/2022 31

<? php define('TMP_FILE', "tmp_atom. txt"); # Initialisation. . . vide ! $ch = curl_init();

<? php define('TMP_FILE', "tmp_atom. txt"); # Initialisation. . . vide ! $ch = curl_init(); # Configuration de l'URL et du retour curl_setopt($ch, CURLOPT_URL, "http: //news. google. fr/nwshp? hl=fr&tab=wn&output=atom"); # Création du fichier de destination et ouverture rw $fp = fopen(TMP_FILE, "w+"); # Lien : mettre le contenu ici curl_setopt($ch, CURLOPT_FILE, $fp); # Exécution curl_exec($ch); if(curl_errno($ch) != 0) } { echo "Erreur lors du téléchargementn"; die(); # Fermeture de la session c. URL curl_close($ch); 30/01/2022 32

# Seek au début du fichier de destination fseek($fp, 0); # Et c'est reparti

# Seek au début du fichier de destination fseek($fp, 0); # Et c'est reparti ! $ch_ftp = curl_init(); # L'emplacement FTP de destination curl_setopt($ch_ftp, CURLOPT_URL, "ftp: //ftp_login: password@ftp. exemple. fr/le. Flux. Atom"); # Indique à c. URL qu'on uploade curl_setopt($ch_ftp, CURLOPT_UPLOAD, 1); # Transfert en ASCII curl_setopt($ch_ftp, CURLOPT_TRANSFERTEXT, 1); # Passage du pointeur curl_setopt($ch_ftp, CURLOPT_INFILE, $fp); #. . et la taille du fichier curl_setopt($ch_ftp, CURLOPT_INFILESIZE, filesize(TMP_FILE)); # ET HOP ! curl_exec ($ch_ftp); if(curl_errno($ch_ftp) != 0) { echo "Erreur lors de l'uploadn"; die(); } curl_close ($ch_ftp); echo "Terminé avec succès !n" ? > 30/01/2022 33

10. PHP - XML l e. Xtensible Markup Language : langage de balisage extensible

10. PHP - XML l e. Xtensible Markup Language : langage de balisage extensible l Assurer l’intéropabilité entre les SIs <article> <title> Extensible Markup Language </title> <para> <acronym> XML </acronym> « langage de balisage extensible » </para> </article> 30/01/2022 34

PHP - XML l Parsing d’un document XML l Séparation présentation / contenu l

PHP - XML l Parsing d’un document XML l Séparation présentation / contenu l Analyse syntaxique l Librairie expat 30/01/2022 35

PHP - XML l Deux types d’approche : ¡ L’approche hiérarchique : DOM ¡

PHP - XML l Deux types d’approche : ¡ L’approche hiérarchique : DOM ¡ L’approche événementielle : SAX <debut> Bienvenue </debut> Start Element : debut Start CDATA section, value : Bienvenue Close Element : debut 30/01/2022 36

PHP - XML l Créer l’analyseur : xml_create_parser() l Association aux 7 gestionnaires :

PHP - XML l Créer l’analyseur : xml_create_parser() l Association aux 7 gestionnaires : ¡ xml_set_element_handler() ¡ xml_set_character_data_handler() ¡ xml_set_external_entity_ref_handler() ¡ xml_set_unparsed_entity_decl_handler() ¡ xml_set_processing_instruction_handler() ¡ xml_set_notation_decl_handler() ¡ xml_set_default_handler() 30/01/2022 37

PHP - XML l xml_set_element_handler() : – – – l xml_set_character_data_handler() : – –

PHP - XML l xml_set_element_handler() : – – – l xml_set_character_data_handler() : – – l function ouverture ($parser, $name, $attrs) function fermeture ($parser, $name) xml_set_element_handler($xml_parseur, "ouverture", "fermeture"); function texte ($parser, $data_text) xml_set_character_data_handler($xml_parseur, "texte"); xml_set_default_handler() : – – 30/01/2022 function defaut () xml_set_default_handler($xml_parseur, "defaut"); 38

<? php /** Ce code récupère le flux ATOM de Google News et récupère

<? php /** Ce code récupère le flux ATOM de Google News et récupère les titres des articles **/ # Fonctions de retour (callback) include('lib. sax. php'); $ch = curl_init("http: //news. google. fr/nwshp? hl=fr&tab=wn&output=atom"); # Nous voulons récupérer le contenu dans une variable curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); # Exécution, contenu dans la variable $atomik=curl_exec($ch); if(curl_errno($ch) != 0) fluxn"; die(); } { echo "Erreur lors de la récupération du curl_close($ch); 30/01/2022 39

# Création du parser $sax=xml_parser_create(); /** Définition des fonctions de retour (callback) **/ #

# Création du parser $sax=xml_parser_create(); /** Définition des fonctions de retour (callback) **/ # 1. Les tags xml_set_element_handler($sax, 'open. Tag', 'close. Tag'); # 2. Le contenu xml_set_default_handler($sax, 'parse. Content'); # Go go parsing xml_parse($sax, $atomik, true); // premier et dernier morceau echo xml_error_string(xml_get_error_code($sax)); ? > 30/01/2022 40

<? php /** Fonctions de callback **/ $print. Content=false; // est ce qu'on doit

<? php /** Fonctions de callback **/ $print. Content=false; // est ce qu'on doit afficher le contenu des balises ? function open. Tag($parser, $name, $attribs) { global $print. Content; // traitement en fonction du tag ouvert switch(strtolower($name)) { // ceci étant un exemple, on va écrire directement // et ne traiter qu'un échantillon de tags case 'title': echo '<h 2>'; $print. Content=true; break; case 'subtitle': //. . . résultat : http: //chipo. oxileo. net/~francois/sax. php } } 30/01/2022 41

function close. Tag($parser, $name) { global $print. Content; switch(strtolower($name)) { case 'title': echo '</h

function close. Tag($parser, $name) { global $print. Content; switch(strtolower($name)) { case 'title': echo '</h 2>'; $print. Content=false; break; case 'subtitle': //. . . } } function parse. Content($parser, $data) { global $print. Content; if($print. Content) echo $data; } ? > 30/01/2022 42

11. PHP - AJAX l AJAX est un acronyme signifiant Asynchronous Java. Script and

11. PHP - AJAX l AJAX est un acronyme signifiant Asynchronous Java. Script and XML l Permet d'appeler des données depuis un client Web sur un serveur en asynchrone l AJAX nécessite une architecture client/serveur Web l Composants conformes aux standards du W 3 C. 30/01/2022 43

PHP - AJAX l AJAX n'est pas une technologie mais l'utilisation conjointe d'un ensemble

PHP - AJAX l AJAX n'est pas une technologie mais l'utilisation conjointe d'un ensemble de technologies ¡ HTML (ou XHTML) pour la structure sémantique des informations ; CSS ou XSL pour la présentation des informations ; DOM et Javascript pour afficher et interagir dynamiquement avec l'information présentée ; l'objet XMLHttp. Request pour échanger et manipuler les données de manière asynchrone avec le serveur Web. XML pour le transfert de données 30/01/2022 44 ¡ ¡

PHP – AJAX : fonctionnement l Récupérer uniquement les données nécessaires via HTTP XMLHttp.

PHP – AJAX : fonctionnement l Récupérer uniquement les données nécessaires via HTTP XMLHttp. Request l Requêtes peuvent être « asynchrones » l Applications plus réactives, la quantité de données échangées entre le navigateur et le serveur HTTP étant fortement réduite l Chargement de la première page peut être pénalisé si l'application utilise une bibliothèque AJAX volumineuse 30/01/2022 45

12. Conclusion Langage pour développer des pages Web dynamiques l Très complet, nombreuses bibliothèques,

12. Conclusion Langage pour développer des pages Web dynamiques l Très complet, nombreuses bibliothèques, facile … l Possibilités de développements multi-serveurs, web services, pair à pair, etc. l Références et compléments : l ¡ ¡ ¡ 30/01/2022 http: //www. laltruiste. com/ http: //php. developpez. com/cours/ http: //www. expreg. com/ereg. php http: //www. manuelphp. com/ http: //g-rossolini. developpez. com/tutoriels/php/cours/ http: //www. php-mysql-tutorial. com/ 46