Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G.
Download ReportTranscript Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G.
Techniques Internet de Base 2006-2007
Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA [email protected]
PHP
Le langage PHP
PHP
(venant de l'acronyme récursif
PHP: Hypertext Preprocessor
), est un langage de scripts libre principalement utilisé pour être exécuté par un serveur HTTP PHP est un langage procédural disposant en version 5 de fonctionnalités de modèle objet complètes Le langage PHP est un langage de programmation web côté serveur le serveur (la machine qui héberge le site web en question) qui va interpréter le code PHP et générer du code qui pourra être interprété par un logiciel différence principale entre JavaScript et PHP
PHP - Fonctionnement
Le client demande une page PHP Le serveur HTTP charge le fichier PHP du disque dur Le serveur transmet le fichier au module d'interprétation PHP L'interpréteur PHP génère le code HTML à partir du code PHP L'interpréteur transmet le code HTML au serveur HTTP Le serveur HTTP envoie la reponse HTML au client
PHP - Fonctionnement
SGBD langage de scripts scripts Serveur serveur Web (Apache, IIS…) moteur de scripts pages HTML Client : Navigateur
Utilisation de PHP
Serveur WEB On parle souvent de LAMP : Linux + Apache + MySQL + PHP Plus que la moitié des serveur web utilisent la plateforme LAMP En local Petits scripts Programmation (à partir de la version 5)
Environnement de travail
Première solution : Installer Linux Installer Apache Installer MySQL Installer le module PHP Configurer Apache, MySQL, PHP Deuxième solution : Installer la plateforme LAMP EasyPHP 1.8
WAMP5 1.7
Troisième solution : Obtenir un espace web (par exemple : free.fr)
En pratique
Installer le package EasyPHP : http://www.easyphp.org/telechargements.php3
Configurer le répertoire root Par défaut : C:\Program Files\EasyPHP\www Lancer EasyPHP Sauvegarder les fichiers dans le répertoire root (ou dans ses sous répertoires) Tester les résultat dans le navigateur : http://127.0.0.1/monrepertoire/monfichier.php
Fichiers PHP
Les fichiers sont enregistrés avec l'extension .
php
.
php3
, .
php4
, ...) (ou Les fichiers .php peuvent alterner du code HTML ou PHP sans restrictions Le code PHP doit être délimité par les balises = ... ?> Premier exemple : first.php
phpinfo(); ?>
Contenu des fichiers .php
Cas typiques de contenu : fonctions PHP à usage général code HTML code HTML alterné à du code PHP code PHP qui génère le code HTML Le code PHP est invisible au client il est important de toujours bien délimiter le code Les erreurs apparaissent aux client il est important de prévoir et gérer les erreurs Exemple :
fonctionquinexistepas(); ?>
Suppression des messages d'erreur
Pour éviter l'affichage des messages d'erreur de PHP dans le navigateur on peut faire précéder l'appel d'une fonction susceptible de générer une erreur du caractère @ Pendant la phase de développement des scripts, cette méthode doit être désactivée pour permettre au programmeur d'être alerté sur les causes et la localisation des erreurs Exemple :
@fonctionquinexistepas(); ?>
Instructions
Les instruction se terminent toujours par un point-virgule (;)
Les instructions de contrôle
Les mêmes qu'en langage C if (condition) { ...instructions...
} else { ...instructions...
} switch ($var) { case valeur1 : ...instructions...
break; case valeur2 : ...instructions...
break; ...
default : ...instructions...
}
Les boucles
Les mêmes qu'en langage C while (condition) { ...instructions...
} for (init; condition; mise-à-jour) { } ...instructions...
Plus la boucle foreach
Inclusion de fichiers externes
Il est possible d'incorporer le code PHP ou HTML écrit dans d'autres fichiers Plusieurs possibilités include("nom_du_fichier.ext"); require("nom_du_fichier.ext"); include_once("nom_du_fichier.ext"); require_once("nom_du_fichier.ext"); Lorsque l'interpréteur PHP trouve une de ces lignes, il la remplace par le code contenu dans le fichier nom_du_fichier.ext
La différence entre include et require concerne la façon dont l'interpréteur gère les erreurs les fonction avec suffix " _once " sont exécutées une seule fois, même si elles figurent dans une boucle
Fichiers externes
Ils ont généralement l'extension
.inc
ou
.inc.php
(on préfère utiliser la deuxième pour protéger son contenu) Ils peuvent être utiliser pour : affichage conditionnel fonctions et procédures d'usage général modularisation du code (majeure clarté)
Les commentaires
Trois façons d'écrire des commentaires // ceci est un commentaire sur une ligne /* ceci est un commentaire qui va occuper plusieurs lignes */ #ceci est un commentaire en style UNIX #qui occupe une seule ligne
Les variables
Nom des variables précédés par le caractère dollar ($) Pas de déclaration Initialisation non obligatoire Les noms des variables sont sensibles à la casse Exemples : $mavar $_maNouvelleVar $mavar2
Affectation
Deux façon de donner une valeur à une variable : Par valeur $variable = expression; Par référence : $mavar1 = &$mavar2; Exemple : $mavar1="St-Etienne"; $mavar2="Grenoble"; $mavar2=&$mavar1; $mavar1="Lyon"; $mavar2 est un alias de $mavar1 (les deux variables contiennent la même valeur, c.a.d., "Lyon") Attention : l'opérateur * du C n'a pas de signification en PHP
Variables prédéfinies
Elles sont de la forme : $NOMGENERAL["nomvariable"] Exemples : $GLOBALS : contient le nom et la valeur de toutes les variables globales du script $_COOKIE : contient le nom et la valeur des cookies enregistrés sur le poste client $_FILES : contient le nom des fichiers téléchargés à partir du poste client $_GET : contient le nom et la valeur des données envoyés par un formulaire avec la méthode GET $_POST : contient le nom et la valeur des données envoyés par un formulaire avec la méthode POST $_SESSION : contient le nom et la valeur des variables de session
Opérateurs
Mêmes opérateurs que en C =, +, -, /, *, % +=, -=, *=, /=, %= --, ++ Opérateur de concaténation : . (point) .= (concaténation et afféctation) Exemple : $var1="Paris"; $var2="France"; $var1=$var1." est la capitale de la "; $var1.=$var2;
Les constantes
Définition d'une constante : define("nom",valeur,casse); "nom" : nom de la constante; valeur : valeur de la constante; casse : sensibilité à la casse ( TRUE, FALSE ) Pour vérifier si une constante nommée existe : defined("nom"); /* renvoie TRUE si la constante "nom" est définie */ Exemples : define("PI",3.14159,TRUE); define("auteur","Ruggero Pensa",FALSE);
Les types
Dans PHP il n'existe pas de déclaration explicite du type d'une variable lors de sa création Parfois on doit connaître le type des variables Les types prédéfinis sont : integer float double string boolean array object resource null Le type est automatiquement déterminé par son initialisation ou par l'affectation d'une valeur
Type booléen
En PHP (comme en JavaScript) il existe un type booléen Les deux valeur possibles sont 1 et 0 ( FALSE ) ( TRUE ) Exemples : $var=TRUE; $var2=FALSE; $var3=($a < $b);
Opérateurs booléens
Mêmes opérateurs (mais certains opérateurs possèdent des alias) : ==, != (ou <> ) même pour les chaînes <=, <, >, >= même pour les chaînes || (ou OR ), && (ou AND ), !
, XOR Plus deux opérateurs spéciaux : === (trois égal) : teste l'identité des valeurs et des types de deux expressions !== : teste la non identité de deux expressions
Evaluation booléenne des expressions
Expressions évaluées à FALSE : mot clé FALSE valeur valeur 0 ( integer ) 0.0
chaîne "0" ( ( double ) string ) variable de type NULL variable non initialisée tableau vide expression logique fausse Expressions évaluées à TRUE tous les autres cas
Les chaînes de caractères
Comme en Javascript, l'affectation directe est possible Délimités par des apostrophes ou des guillemets $a="une chaîne"; $b='une autre chaîne'; $c=$a; Si une chaîne contient une variable, celle-ci est évaluée et sa valeur incorporée à la chaîne uniquement avec les guillemets Exemple : $a='PHP'; $b='MySQL'; $c= "PHP et $b"; (la chaine contient "PHP et MySQL") $d='PHP et $b'; (la chaine contient "PHO et $b") Caractères spéciaux : \', \", \$, \\, \n, \t
Les tableaux
Les éléments d'un même tableau peuvent être de types différents Tableaux classiques : $tab[0]=2004; $tab[1]=34.234; $tab[2]="PHP"; $tab[35]=$tab[2]. "et MySQL"; $tab[]=TRUE; /* indice mis à jour automatiquelent à 36 */ $ind=40; $tab[$ind]="dernier élément"; le tableau tab contient 6 éléments (et non pas 41) Les chaînes de caractères peuvent être utilisés comme des tableaux de caractères
Tableaux associatifs
La syntaxe est similaire, mais on remplace l'indice numérique par une chaîne de caractères quelconque $tab["nom"]="Pensa"; $tab["prenom"]="Ruggero"; $tab["age"]=28;
Le type NULL
Le type NULL (ou null ) est celui qui est attribué à une variable qui n'a pas de contenu ou qui a été explicitement initialisée avec la valeur NULL Aussitôt qu'une valeur légale est donnée à la variable, elle prend le type correspondant
Déterminer le type d'une variable
Dans certain cas, il est important de pouvoir connaître le type d'une variable que l'on est en train de manipuler On peut utiliser la fonction gettype : gettype($mavar); (renvoie une chaîne de caractères contenant le type de la variable) ...ou un certain nombre de fonction qui renvoient TRUE variable est du type demandé : is_integer($var) ou is_int($var); si la is_double($var) is_string($var) is_bool($var) is_array($var) is_null($var) is_scalar($var) is_numeric($var) …
Conversion de type
Exemples : $var1="3.52 kilomètres"; $var2=(double) $var1; $var3=(integer) $var2; $var2 $var3 contient la valeur réelle 3.52
contient la valeur entière 3 et $var1="4.24 secondes"; settype($var1,"double"); $var1 4.24
contient maintenant la valeur réelle
Contrôler l'état d'une variable
Lors de l'envoi de données d'un formulaire vers le serveur, le script qui reçoit les informations doit pouvoir détecter l'existence d'une réponse dans les champs du formulaire On peut utiliser les deux fonctions : isset($var) variable $var NULL retourne la valeur FALSE si la n'est pas initialisé ou a la valeur empty($var) retourne la valeur TRUE si la variable $var n'est pas initialisée, a la valeur 0 NULL ou la chaîne "0" valeur FALSE ) (sinon elle retourne la ou
Fonctions mathématiques
On a un certain nombre de fonctions mathématiques : abs, cos, sin, exp, floor, log, log10, log, min, max, rand, sqrt, tan...
Voir la liste complète sur www.php.net
La sortie (output)
La conséquence d'une élaboration du code PHP est le plus souvent l'affichage d'un texte dépendant des résultats de l'élaboration Pour afficher une chaîne de caractères on dispose de différents possibilités : "fonction" echo fonction print (comme echo ) fonction printf (comme en langage C) fonction vprintf (comme printf l'argument est un tableau) mais
La "fonction" echo
Pour afficher plusieurs éléments on peut utiliser l'opérateur de concaténation Exemple : echo "Bonjour Mr. ". $nom. "nous sommes le ". date('d-m-y'); la virgule Exemple : echo "Bonjour Mr. ", $nom, "nous sommes le ", date('d-m-y'); Dans les deux cas, on affiche la concaténation d'une chaîne de caractères, d'une variable et du résultat d'une fonction La fonction print est similaire à echo : print ("Bonjour Mr $nom nous sommes le ". date('d m-y')); print ("Bonjour Mr $nom nous sommrs le "). date('d m'y')):
Affichage formaté
La fonction printf permet d'afficher des chaînes de caractères selon un format prédéfini Exemple : $ch="25.52 mètres"; printf("La longueur est de %f m", $ch); La chaîne affichée est : La longueur est de 25.52 m" Caractères de formatage : %b, %c, %d, %f (binaire, caractère, entier, réel) %s (affiche la chaine telle quelle)
Affichage des entités HTML
L'instruction suivante : $ch="L'élément HTML du bouton est
Pour transformer tous les caractères spéciaux en entités HTML on peut utiliser la fonction htmlentities($chaine) Exemple : $ch="L'élément HTML du bouton est
Fonctions pour les chaînes
$l=strlen($ch); : renvoie la longueur de la chaine $ch $ch1=strtolower($ch); caractères en minuscules retourne la chaîne $ch avec tous les $ch1=strtoupper($ch); caractères en majuscules $ch1=ucwords($ch); initiales en majuscules retourne la chaîne retourne la chaîne $ch $ch avec tous les avec tous les $ch1=ucfirst($ch); retourne la chaîne $ch la première lettre en majuscule $ch1=ltrim($ch); renvoie la chaîne espaces situées en début de chaîne $ch avec uniquement nettoyée des $ch1=rtrim($ch); renvoie la chaîne $ch espaces situées en fin de chaîne $ch1=trim($ch); renvoie la chaîne situées en début et fin de chaîne $ch nettoyée des nettoyée des espaces nl2br() : pour remplacer le \n par
Sous chaînes
Une chaîne peut être considéré comme un tableau de caractères Exemple : $machaine[3] contient le quatrième caractère Fonctions de recherche : strstr($ch1, $ch2) contenue dans la première occurrence de (sensible à la casse). Si renvoie FALSE ; $ch1 : recherche si la chaîne $ch2 et retourne tous les caractères allant de $ch2 $ch2 jusqu'à la fin de $ch1 est n'est pas trouvé, la fonction stristr($ch1, $ch2) casse : même chose mais insensible à la str_replace($ch1, $ch2, $ch) $ch dans laquelle toutes les occurrences de $ch1 remplacées par $ch2 : retourne la chaîne sont
Autres fonctions
Pour une liste complète : www.php.net
Les tableaux
Pour créer un tableau on peut utiliser la fonction array() Exemples : $music=array("C", "D", "E", "F", "G", "A", "B"); $tab=array("St-Etienne", 42, "Rhône-Alpes"); $tab=array("nom"=>"Pensa", "prenom"=>"Ruggero", "departement"=>69);
Tableaux indicés
Syntaxe identique à celle du langage C Initialisations possibles : Initialiser les éléments un par un : $tab[0]="a"; $tab[1]=124; $tab[32]=4.234
fonction array() $tab=array("one", 2, 3.0); Utilisation : comme en langage C $toto=$tab[32]+100; $toto=$tab[$ind]*32;
Tableaux associatifs
Initialisation : $tab=array("cléA"=>valeurA, "cléB"=>valeurB, ..., "cléZ"=>valeurZ); $tab=array("cléZ"=>valeurZ, "cléB"=>valeurB, ..., "cléA"=>valeurA); Les deux tableaux sont identiques Utilisation : $toto=$tab["cléB"] + 230; $toto=$tab[$chaine1] * 34;
Les tableaux multidimensionnels
Il suffit de créer un tableau de tableaux Exemple : $tabmulti=array( array("0-0", "0-1", "0-2"), array("1-0", "1-1", "1-2")); Utilisation : $toto="cellule no. ". $tab[1][2];
Compter le nombre d'éléments
On utilise la fonction count($tab) Exemples : for ($i=0;$i Fonction explode($separateur, $chaine) : retourne un tableau contenant un ensemle de souchaines de $chaine dont chacune devient un élément du tableau. Le critère de coupure de la chaîne est le caractère $separateur Exemple $adresse="[email protected]"; $tabadr=explode("@", $adresse); echo "L'utilisateur est : {$tabsite[0]} et son serveur mail est {$tabsite[1]} "; Résultat affiché : L'utilisateur est : ruggero.pensa et son serveur mail est univ-st-etienne.fr L'instruction itérative foreach() rapide est simple des tableaux permet une lecture Sa syntaxe est : foreach ($tab as $valeur) { ... instructions ... } // pour les tableaux indicés On récupère par itérations successives tous les éléments du tableau $tab dans la variable $valeur , mais sans les indices correspondants foreach ($tab as $clé=>$valeur) { ... instructions ... } // pour les tableaux associatifs On récupère par itérations successives toutes les clés et tous les éléments correspondants du tableau $tab dans les variables $clé et $valeur
//******************************************************* //Lecture de tableau indicé sans récupération des indices //******************************************************* $tab=array("Paris","London","Brüssel"); echo "Tableau à partir d'une chaîne
Lecture d'un tableau avec foreach()
Exemple de lecture
Lecture des valeurs des éléments
"; foreach($tab as $ville) { echo "$ville
"; } echo"
"; //******************************************************* //Lecture de tableau indicé avec récupération des indices //******************************************************* echo "Lecture des indices et des valeurs des éléments
"; foreach($tab as $indice=>$ville) { echo "L'élément d'indice $indice a la valeur $ville
"; } echo"
";
Exemple de lecture - 2
//******************************************************** //Lecture de tableau associatif avec récupération des clés //******************************************************** $tab2=array("France"=>"Paris","Great Britain"=>"London","België"=>"Brüssel"); echo "
Lecture des clés et des valeurs des éléments
"; foreach($tab2 as $cle=>$ville) { echo "L'élément de clé $cle a la valeur $ville"; } echo"
"; ?>
Lecture d'un tableau multidimensionnel
$clients = array( "client 1"=>array("nom 1"=>"Leparc","ville 1"=>"Paris","age 1"=>"35"), "client 2"=>array("nom 2"=>"Duroc","ville 2"=>"Vincennes","age 2"=>"22"), "client 3"=>array("nom 3"=>"Denoël","ville 3"=>"St Cloud","age 3"=>"47")); //Ajout d'un élément $clients["client 7"] = array("nom 7"=>"Duval","ville { { 7"=>"Marseille","age 7"=>"76"); echo "
Client | Nom | Ville | Age | "; foreach($clients as $cle=>$tab) echo "
---|---|---|---|
$cle | "; foreach($tab as $key=>$valeur) echo "$key : $valeur | "; } echo "
Ajouter et enlever des éléments
Pour ajouter N éléments à la fin du tableau : array_push($tab, valeur1, valeur2, ... valeurN); Pour ajouter N éléments au début du tableau : array_unshift($tab, valeur1, valeur2, ..., valeurN); Pour supprimer le dernier élément du tableau : array_pop($tab); la fonction retourne l'élément supprimé (ou NULL) Pour supprimer le premier élément du tableau : array_shift($tab); la fonction retourne l'élément supprimé Pour supprimer un élément d'indice ou de clé quelconque : unset($tab[indice]); unset($tab["clé"]);
Opérations sur plusieurs tablaux
Pour fusionner des tableaux : $tab=array_merge($tab1,$tab2,...,$tabN); Les éléments égaux sont conservés. Pour supprimer les éléments similaires on utilise : $tab=array_unique($tab); Intersection de deux tableaux : $tab=array_intersect($tab1,$tab2); Différence de deux tableaux : $tab=array_diff($tab1,$tab2);
Ordre des éléments d'un tableau
Trier selon l'ordre ASCII sort($tab); // ordre croissant rsort($tab); //ordre décroissant array_reverse($tab); /* inverse l'ordre des valeurs des éléments */ Trier selon l'ordre natuerel natsort($tab); /* ordre croissant sensible à la casse */ natcasesort($tab); /* ordre croissant insensible à la casse */ Mélanger les valeurs de façon aléatoire : shuffle($tab);
Trier des tableaux associatifs
Trier des valeurs : asort($tab); // ordre ASCII croissant arsort($tab); //ordre ASCII décroissant Trier les clés : ksort($tab); //ordre ASCII croissant krsort($tab); //ordre ASCII décroissant
Autres fonctions
Comme toujours : www.php.net
Définition de fonctions
La syntaxe de définition d'une fonction est similaire à la syntaxe JavaScript : function ma_fonction($param1, $param2,...) { //code de définition de la fonction return $var; } Appel de fonction : $mavar=ma_fonction(valeur1, valeur2,..); ma_fonction(valeur1,valeur2,...); /* si la fonction ne retourne pas de valeur */
Retourner plusieurs valeurs
Pour retourner plusieurs valeurs il suffit d'utiliser un tableau : function ma_fonction(...) { //code de la fonction $tab[0]=expression; $tab[1]=expression; return $tab; }
Paramètres par défaut
Dans l'appel de fonction il est possible d'omettre un certain nombre de paramètres. L'opération est autorisé si ces paramètres ont des valeurs par défault Syntaxe : function prix_total($prix,$tva=19.6) { return $prix+$prix*$tva/100.0; } … $p1=prix_total(190); $p2=prix_total(190,5.5); Attention : paramètres par défaut tous à la fin!!!
Portée des variables
Le règles existantes en langage C concernant la portée des variables sont valables en PHP Pour accéder à une variable globale depuis une fonction, il faut utiliser le tableau prédéfini $GLOBALS : Exemple : $var_glob="Bonjour"; function ma_fonction() { echo $GLOBALS['var_glob']. "les gars!"; } ...
ma_function(); Attention : l'utilisation de variables globales dans des fonctions est à éviter!
Passer des arguments par référence
Le passage des argument par référence permet de garder les modifications apportées à ces paramètres après la fin de l'exécution de la fonction Les paramètres passés par référence sont précédés par le symbole & : $a="a"; $b="b"; function ma_fonction($param1, &$param2) { // code de la fonction $param1="c"; $param2="d"; } ma_function($a,$b); echo $a. "et". $b; //affiche "a et d"
Exemple : nombres complexes 1
function modarg($reel,$imag) { //$mod= hypot($reel,$imag); //ou encore si vous n'avez pas la fonction hypot(): $mod =sqrt($reel*$reel + $imag*$imag); $arg = atan2($imag,$reel); return array("module"=>$mod,"argument"=>$arg); }
Exemple : nombres complexes 2
//Appels de la fonction $a= 5; $b= 8; $complex= modarg($a,$b); echo "Nombre complexe $a + $b i:
module = ", $complex["module"] ,"
argument = ",$complex["argument"]," radians
"; ?>
Exemple : passage par référence 1
//Définition de la fonction function prod(&$tab,$coeff) { foreach($tab as $cle=>$val) { if(is_numeric($val)) {$tab[$cle]*=$coeff;} else { echo "Tableau non numérique
"; return FALSE; } } return $tab; }
Exemple : passage par référence 2
//Tableau numérique $tabnum = range(1,7); echo "Tableau avant l'appel ",print_r( $tabnum),"
"; //Passage du tableau à la fonction $result= prod($tabnum,3.5); echo "Tableau résultat ",print_r( $result),"
"; echo "Tableau après l'appel ",print_r( $tabnum),"
"; //tableau alphabétique $tabalpha= range("A","F"); $resultal=prod($tabalpha,3);//retourne FALSE echo "Tableau après l'appel ",print_r( $tabalpha),"
"; ?>