Qu'est-ce que PHP ? Annie Danzart
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Sites web dynamiques avec PHP Qu'est-ce que PHP ? Annie Danzart Annie.Danzart@enst.fr http://www.infres.enst.fr/~danzart/php/ http://www.infres.enst.fr/~danzart/php/exemples/ 1
Plan • Historique • Fonctionnement • Création de Formulaires • Script php • Manipulation de fichiers • Variables, opérateurs • Manipulation d’Images • Tableaux • Utilisation de Cookies • Fonctions • Les Sessions • Conditionnelles, boucles • Variables d’environnement • Les Objets • Envoi de Mail • Fichiers inclus • Téléchargement de fichiers 2
Qu'est-ce que PHP ? • 1994 : Rasmus Lerdorf, Personnal Home Pages Pre Hypertext Processor • Langage de scripting traité par le serveur, orienté web • Module mod_php d'Apache • Gratuit, libre de droits (license GNU GPL) • Nombreuses extensions (sgbd, ldap, gif, pdf, smtp, …) • Syntaxe proche de celle de C, Java, Perl • Comparable à ASP, asp2php • Extensible • Des milliers de sites de par le monde • Versions 3, 4, 5, 6 ? 3
Comment ça marche ? affichage sans serveur file:///infres.enst.fr/~danzart/exemple.html Poste client firefox Javascript 3 Le navigateur affiche les pages html 1 2 Serveur de fichiers Il est capable d’interpréter des scripts perso.enst.fr javascript ~danzart/public_html/exemple.html 4
Comment ça marche ? utilisation d’un serveur http://www.infres.enst.fr/~danzart/exemple.html Poste client Serveur Apache firefox www.infres.enst.fr 1 httpd 4 2 Serveur de fichiers 3 perso.enst.fr Le serveur reçoit la requête et la traite en envoyant au client la page demandée ~danzart/public_html/exemple.html 5
Comment ça marche ? interprétation d’un script http://www.infres.enst.fr/~danzart/exemple.php Poste client Serveur Apache firefox www.infres.enst.fr 1 4 httpd 5 mod_php5 2 3 Serveur de fichiers Le serveur passe le fichier perso.enst.fr au module php avant de le retourner au client ~danzart/public_html/exemple.php 6
Comment ça marche ? Les bases de données http://www.infres.enst.fr/~danzart/exemple2.php Poste client Serveur Apache firefox www.infres.enst.fr 1 47 httpd 8 mod_php5 5 6 2 3 Serveur de fichiers Serveur Mysql perso.enst.fr mysql.infres.enst.fr mysqld bases ~danzart/public_html/exemple2.php 7
Les scripts, les variables – Page html, extension du fichier - Formulation des scripts – Environnement, résultat - !Variables, types des variables, constantes Page php ü Une page html ü Des scripts php. ü L’ensemble des scripts d’une page utilise le même contexte ü Chaque script peut générer du code html qui s’intègre à sa place üL’extension de la page doit être php, ou php3, phtml, php4, php5 sinon le serveur ne sait pas qu’il doit interpréter des scripts 8
Les scripts, les variables – Page html, extension du fichier - Formulation des scripts – Environnement, résultat - Variables, types des variables, constantes Ecriture la plus standard Encore très utilisée. … A la Javascript … Compatible avec ASP Ecriture raccourcie, pas toujours correctement interprétée 9
Les scripts, les variables – Page html, extension du fichier - Formulation des scripts – Environnement, résultat - Variables, types des variables, constantes ! Bienvenue! ! ! Exemple : http://www.infres.enst.fr/~danzart/ ! Bonjour ! Remarque : la fonction date : ! http://www.infres.enst.fr/~danzart/php/ Il est phpplus.php%23dates ! ! ! 10
Les scripts, les variables – Page html, extension du fichier - Formulation des scripts – Environnement, résultat - Variables, types de variables, constantes üTypes de base: entiers, réels, chaînes de caractères üTableaux, tableaux associatifs üObjets üLes noms de variables commencent par le caractère $ üphp est sensible à la casse üUn nom peut commencer par une lettre ou un _ üIl peut comporter des caractères, des chiffres et _ üLes variables ne sont pas typées, n’ont pas besoin d’être déclarées üElles ont une valeur par défaut qui dépend du contexte d’utilisation 11
Les scripts, les variables – Page html, extension du fichier - Formulation des scripts – Environnement, résultat - Constantes, variables, types de variables ! Bienvenue! ! ! Exemple: http://www.infres.enst.fr/ ! ! - insertion de balises html ! - échappement de caractères 12
Les variables – Affectation d’une valeur - Tests sur les variables – Opérateurs arithmétiques, logiques - Référence, déréférencement $chaine = "0"; // chaîne ! "0" (ASCII 48)! Simple et double quote $nombre = 0;! Chaîne dynamique $nombre++; // nombre 1 ! (entier)! $val = 'Rusti';! $nombre+=1; // entier (2)! echo "Hello $val"; // Hello $nombre = $nombre + 1.3; ! Rusti! // réel (3.3)! echo 'Hello $val'; ! $nombre = 5 + "3 petits // Hello $val! cochons"; ! ! // entier (8 !) effet de bord! Exemple: $nombre = (int) "3 petits http://www.infres.enst.fr/~danzart/php/ cochons"; ! exemples/variables_test.php // 3 : conversion en entier! ! 13 !
Les variables – Affectation d’une valeur - Tests sur les variables – Opérateurs arithmétiques, logiques - Référence, déréférencement isset($a): teste si la variable est définie. (0=non, 1=oui) ! unset($a): supprime la variable et désalloue la mémoire utilisée ! gettype($a):retourne le type de la variable ➞string, integer, double, array, object! ➞string si la variable n'est pas définie is_double, is_string, is_int, is_float,is_object :! testent le type de la variable! 14
Les variables – Affectation d’une valeur - Tests sur les variables – Opérateurs arithmétiques, logiques - Référence, déréférencement Arithmétiques! Concaténation! $a + $b - $c !! $chaine="votre nom est ".$val;! $a * $b / $c !! ! $a % $b !! Logiques! $a++ !Incrément de 1 not, !, &&, ⎥⎥, AND, XOR, OR! $b-- !Décrément de 1 ! rque : précédence de or sur ⎥⎥! ! $a = foo() ⎥⎥ bar() or die();! Assignation de valeur! =, +=, -=, *=, /=, %=, .=! Binaires bitwise! &, ⎥, ^, ~, >>,
Les variables – Affectation d’une valeur - Tests sur les variables – Opérateurs arithmétiques, logiques - Référence, déréférencement ! !Bienvenue! !! Création de variables ! dynamiques dont on ne
Les tableaux – Tableaux, tableaux dynamiques - Fonctions sur les tableaux – Parcours - Tableaux associatifs $fruits[0]= "pomme";! A priori, les indices commencent à 0. $fruits[1]= "banane";! Pas besoin de déclarer la dimension ni le type ! des valeurs. $fruits[] = "orange"; ! Si on ne donne pas d’indice, l’indice pris en // équivaut a! compte sera celui qui suit la valeur la plus haute (0 si rien n’a encore été mis). $fruits[2]= "orange"! L’initialisation peut se faire « en bloc », en ! précisant ou non les indices. $fruits= array(0=> "pomme", 1=>"banane",2=> "orange" );! Les tableaux dynamiques sont très utiles lors ! de l’utilisation de champs de type $fruits= array( "pomme", « checkbox » dans un formulaire. "banane", "orange" );! Exemple : http://www.infres.enst.fr/~danzart/php/ ! exemples/tableaux_test.php ! 17
Les tableaux – Tableaux, tableaux dynamiques - Fonctions sur les tableaux – Parcours - Tableaux associatifs sizeof($t) = !count($t) ! ➞ Taille d’un tableau is_array($t) !! ➞ Est-ce un tableau ? reset($t) end($t) !current($t) !➞ Positionnement dans un tableau : next($t) !prev($t)! représenté par une liste de doublets ! (indice,valeur) ! sort, rsort, ksort, krsort, ➞ Tri ascendant, descendant sur la valeur, sur la clé, avec une fonction utilisateur usort! shuffle($t)! ➞ Mélange aléatoire max($t) !min($t)! ➞ Calcul des valeurs extrêmes ! ➞ Applique une fonction à toutes les valeurs arraywalk($t,"nomfonction")! d’un tableau ! ! 18
Les tableaux – Tableaux, tableaux dynamiques - Fonctions sur les tableaux – Parcours - Tableaux associatifs $t = array("I","N","F","3","4","7");! L’ajout de "\n" dans l’affichage sort($t);! introduit un saut à la ligne dans le for ($i=0;$i
Les tableaux – Tableaux, tableaux dynamiques - Fonctions sur les tableaux – Parcours - Tableaux associatifs $mois["Janvier"]= 1;! Les indices du tableau sont alors $mois["Février"]= 2;! des chaînes de caractères qui $mois[] = ! pourront être traitées en tant que array("Janvier"=>1,"Février"=>2, telles. "Mars"=>3);! ! L’emploi de la fonction each while (list($cle,$val) = each($mois))! s’avère importante pour parcourir echo " No de $cle : $val ";! les tableaux associatifs. ! On peut aussi utiliser la boucle foreach ($mois as $cle => $val)! foreach. echo " No de $cle : $val ";! ! Exemple: key($t):index de l'élément courant du tableau http://www.infres.enst.fr/~danzart/ uasort($t,"f_comp"): tri à l’aide d’une fonction php/exemples/ en gardant les indices associés tableaux_associatifs_test.php ! 20
Les instructions – Instructions conditionnelles - Booléens - Boucles – foreach - Ruptures de séquence if ($a > $b) {! $jour=date("l");! echo "a supérieur à b";! $mois=date("F");! } elseif ($a == $b) {! switch ($mois) {! echo "a égal à b";! case "January" : … ;break; } else {! case "February": … ;break; ! echo "a inférieur à b";! . . . .! }! case "November": … ;break; case "December": … ;break;} ! printf(date(" Y ")); ! if ($a > $b):! echo "a supérieur à b";! ! elseif ($a == $b) :! switch ($mois)! echo "a égal à b";! case "January" : … ;break;! else :! . . . .! echo "a inférieur à b";! case "December": … ;break;! endif! endswitch! ! 21
Les instructions – Instructions conditionnelles - Booléens - Boucles – foreach - Ruptures de séquence Opérateurs : de comparaison entre expressions : ==, !=, , =! ! Logiques : not, !, &&, ⎥⎥, AND, XOR, OR! ! Valeurs logiques par défaut: Entier 0 è false !≠0 è true! Réel 0.0 è false! ≠0.0 è true! Chaîne de caractères "" è false! ≠ "" è true! Tableau ou objet Null è false! ≠ Null è true! 22
Les instructions – Instructions conditionnelles - Booléens - Boucles – foreach - Ruptures de séquence ! endwhile;! ?> ?>! 23
Les instructions – Instructions conditionnelles - Booléens - Boucles – foreach - Ruptures de séquence ! }! ! ?>! est équivalent à : est équivalent à : ! ?>! 24
Les instructions – Instructions conditionnelles - Booléens - Boucles – foreach - Ruptures de séquence continue :! arrêter l'itération passer à la suivante ! break [n] :! arrêter l'itération courante sortir de la boucle courante (ou des n boucles imbriquées) ! exit() :! interruption inconditionnelle du script! ! A utiliser avec modération !!! 25
Les fonctions – Déclaration, valeur de retour - Variables locales/globales/statiques – Transmission des arguments - Transmission par référence ! 26
Les fonctions – Déclaration, valeur de retour - Variables locales/globales/statiques – Transmission des arguments - Transmission par référence Variables locales: N’existent que dans le corps de la fonction Variables globales: Exemple: http://www.infres.enst.fr/~danzart/ php/exemples/fonctions_variables_test.php Précédées du mot clé global! Établissent un lien direct avec des variables déclarées à l’extérieur de la fonction Variables statiques: Précédées du mot-clé static! 27
Les fonctions – Déclaration, valeur de retour - Variables locales/globales/statiques – Transmission des arguments - Transmission par référence Arguments : La transmission des variables se fait par valeur Exemple: http://www.infres.enst.fr/ ~danzart/php/exemples/ fonctions_arguments_test.php Transmission par référence, 2 possibilités : Soit le nom de la variable est précédé d’un & au moment de l’appel! Soit le nom de la variable est précédé d’un & au moment de la déclaration de la fonction (standard) Depuis php5, les arguments par défaut peuvent être transmis par référence 28
Les objets – Déclaration, attributs, méthodes, constructeur, instanciation – Héritage, redéfinition de méthodes class sortie {! instanciation et référenciation! var $titre="Bonjour";! $a = new sortie("Hello");! // constructeur! $a->debut();! function sortie($init="Coucou")! echo " il est ".date { $this->titre=$init; }! ("H:i")."";! ! $a->fin();! function debut()! {echo "! $this->titre";! Exemple: http://www.infres.enst.fr/~danzart/php/ echo "";}! exemples/classes_test.php function fin()! {echo "";}! } 29
Les objets – Déclaration, attributs, méthodes, constructeur, instanciation – Héritage, redéfinition de méthodes class sur_s extends sortie {! ! function sur_s($titre="coucou")! instanciation et référenciation { ! //constructeur! $a = new sur_s("Hello"); ! parent::sortie($titre);}! $a->debut();! ! $a->prg("il est ".date("H:i"));! function prg($texte)! $a->fin();! {! echo "! $texte";! echo "";}! Exemple: http://www.infres.enst.fr/~danzart/php/ ! exemples/classes_heritage_test.php function debut()! {! parent::debut();! echo "debut de page";! }! ! } 30
Les fichiers inclus ! include(nomfichier ) :! le fichier inclus débute en html pur ! inclut systématiquement le fichier à l'endroit ! indiqué Il faut toujours donner un nom et une extension qui comportent une indication sur : require(nomfichier ) :! l'inclusion (inc) : permet de savoir que ne l'inclut que si c'est justifié (cas d'une instruction conditionnelle) c'est un fichier à inclure le type de fichier (php) : évite que ce include_once(nomfichier ), fichier soit lisible intégralement require_once(nomfichier ):! Ne fera l’inclusion qu’une seule fois (cas Par exemple : bibli_inc.php! d’appels multiples de bibliothèques de fonctions Exemple: http://www.infres.enst.fr/~danzart/php/ exemples/inclusion_test.php 31
Les formulaires – Déclaration, balises, méthode - Récupération des valeurs transmises – Cas particulier du type image !- Les checkbox! ! La balise form délimite le formulaire Questionnaire! Son attribut method détermine le mode de Prénom ? ! L’attribut action précise le programme qui Votre nom ? ! Votre couleur favorite ?! Balises: ! form, input (type, name, blanc! value), select (name), option jaune! (value), …! orange! vert! ! Les balises d'un formulaire Cliquez sur pour valider.! exemples/formulaire_test.html ! 32
Les formulaires – Déclaration, balises, méthode - Récupération des valeurs transmises – Cas particulier du type image !- Les checkbox! ! ! Formulaire2 ! L’image remplace le bouton de soumission du ! formulaire. ! Les coordonnées du point où l'utilisateur aura Questionnaire! cliqué seront : $im1_x et $im1_y! Votre prénom ? ! ! Exemple : http://www.infres.enst.fr/~danzart/php/ Cliquez sur pour valider.! ! ! 33
Les formulaires – Déclaration, balises, méthode - Récupération des valeurs transmises – Cas particulier du type image !- Les checkbox! ! ! ! Le nom du champ de type checkbox ! dans un tableau dynamique. Questionnaire : votre choix! Pommes! ! Poires! ($fruits) permettra de savoir combien de Cliquez sur pour valider.! valeurs sont dans le tableau. ! ! ! ! Exemple : http://www.infres.enst.fr/~danzart/php/ exemples/checkbox_test.php Source du script 34
Les fichiers – Ouverture/fermeture - Lecture/écriture – Traitement de chaînes !- Fichiers locaux! ! $cible=fopen($nom_cible,"w+");! /* ouverture en lecture */! /* lecture de lignes faisant au $fichier=fopen($nom_f,"r");! plus 255 caractères */! ! /* lecture d'une ligne faisant au while ($ligne=fgets($source,255))! plus 255 caractères */! {! $ligne=fgets($fichier,255);! // copie de la source sur la cible! ! fputs($cible,$ligne);! /* fermeture du fichier */! }! fclose($fichier);! fclose($source);! fclose($cible);! ?>! ?>! ! 35
Les fichiers – Ouverture/fermeture - Lecture/écriture – Traitement de chaînes !- Fichiers locaux! Le fichier traité a la structure suivante : // premier élément ! nom prenom;dept/bureau/poste! $nom = strtok($ligne,$sep);! !
Les fichiers – Ouverture/fermeture - Lecture/écriture – Traitement de chaînes !- Fichiers locaux! /* affichage des entrées d'un répertoire */! $repertoire="rep";! On peut utiliser la liste de ces entrées pour $d = dir($repertoire);! créer des liens vers ces fichiers ou répertoires echo "chemin : $d->path";! ! while ($entry = $d->read())! echo "
Environnement – Les cookies - Les sessions – Les variables d’environnement! Création d’un cookie, Durée de validité - Il est prudent d'utiliser un nom qui ne soit pas aussi celui d’une autre variable (d’un int setcookie (string name, string formulaire par exemple) value , int expire , string path , string domain , int secure )! - La date calculée dépend de celle du client ! ! - Les cookies ne seront accessibles qu'au Le code PHP suivant doit impérativement avoir été envoyé avant l'envoi de tout code html, c'est à dire chargement de la prochaine page, ou au en début du fichier). rechargement de la page courante. ! - Il est possible de stocker un tableau dans un
Environnement – Les cookies - Les sessions – Les variables d’environnement! Fonctions de gestion de session Exemple ! ! l'identificateur ! Les variables de session sont ensuite rque: ce mécanisme fonctionne aussi avec des accessibles grâce au tableau associatif tableaux $_SESSION[]. Exemple : http://www.infres.enst.fr/~danzart/php/ ! exemples/session1_test.php 39
Environnement – Les cookies - Les sessions – Les variables d’environnement - phpinfo()! ! ->> données stockées dans des variables permettant $_GET[], $_POST[], $_COOKIE[], ! au programme d'avoir des informations sur son $_SESSION[]! environnement. Mais aussi: ->> informations sur le type de serveur, son $REMOTE_ADDR : adresse du client qui a fait la administrateur, la date à laquelle le script a été requête appelé, l'adresse IP et le type de navigateur du client, … $REMOTE_REFERER : nom de la page qui a référencé celle qui s'affiche ->> créées par le serveur à chaque fois que le script PHP est appelé, le serveur les lui fournit en $USER_AGENT : nom du navigateur utilisé ainsi paramètres cachés lors de l'exécution de que sa version l'interpréteur. $LAST_MODIFIED : dernière date de modification ->> deux catégories : $_SERVER, $_REQUEST, …! celles qui dépendent du client celles qui dépendent du serveur! ! 40
Images – Formats acceptés: png, gif, jpg - Fonctions de gd – Tracés, sauvegardes - Images dynamiques Analyse d'une image ! Récupération de la couleur en (x,y) ! ! ! switch ($c[2]){! ! case 1 : print("gif");break;! Couleur la plus proche dans une image ! case 2 : print("jpeg");break;! ! default : printf("non reconnu");! ! }! Couleur de transparence dans une image ! !
Images – Formats acceptés: png, gif, jpg - Fonctions de gd – Tracés, sauvegardes - Images dynamiques Incrustation d'un texte en un point ! imagestring($im,$font,$x,$y,! $nom="livre.png";! $texte,$coul);! printf("");! Tracés sur une image $im=imagecreatefrompng($nom);! //quart d'ellipse! ! imagearc($im,$x,$y,$l,$h,0,90,$coul);! $couleur=imagecolorclosest($im, ! //ligne! 0,0,0);! imageline($image,$x1,$y1,$x2,$y2,! imagecolorset($im,$couleur,! $coul);! 255,0,0);! //polygone imagepolygone . . . .! ($im,array($x1,$y1,$x2,$y2,! imagepng($im,"nouveau.png");! $x3,$y3),3,$coul);! ! // attention aux droits sur les //polygone plein! fichiers ainsi créés! imagefilledpolygone($im,array($x1,$y1,! ! $x2,$y2,$x3,$y3),3,$coul);! ! //rectangle! ! imagepolygone($im,$x1,$y1,$x2,$y2, ! $coul);! 42
Images – Formats acceptés: png, gif, jpg - Fonctions de gd – Tracés, sauvegardes - Images dynamiques Génération d'une image ! ! ! ! ! ! ! Dans ce cas, le fichier ne doit contenir que le script php de génération d'image. Il sera ensuite utilisé exactement comme un nom de fichier image dans une page html. 43
Envoi de mails Attention aux envois de mails automatiques en nombre important qui encombrent les boîtes aux lettres !!!!
php Tutoriel: http://www.infres.enst.fr/~danzart/php/ Merci de votre attention !!! Les exemples du cours: http://www.infres.enst.fr/~danzart/php/exemples/ 45
Vous pouvez aussi lire