Está en la página 1de 16

AIDE MEMOIRE PHP

Par Rabah HACHEMANI, MA-A,


Clients HTTP

INTTIC Oran (2011)


Serveur HTTP

Requte

Rponse

1. Introduction
PHP : Langage de script incorpor dans du HTML, s'excutant cot serveur, soit comme CGI, soit comme un module (+ rapide). Langage interprt, Expressions rgulires riches, Conversions automatiques, Dclarations optionnelles et non types, Fin de ligne (;) obligatoires, Fonctions natives pour accder aux SGBD (MySQL, Oracle, PostgreSQL, ODBC, ...). Connexions persistantes ( fermer !); Variables prfixes par le symbole: $ Syntaxe fonctionnelle: fopen("/home/toto/file.txt","r"); PHP est un logiciel libre. Possibilit de tlcharger des fichiers depuis le client (upload). Extensions (librairies dynamiques) : gd (graphique), analyseur XML, ... Gestion des identificateurs de sessions par cookie ou par URL longue(PHP4) 1.1 Exemple : Fichier hello.php <html><head><title>Example</title> </head> <body> <?php echo "HelloWorld!"; ?> </body></html> <html><head><title>Example</title> </head> <body> <script language="php"> echo "HelloWorld! \n"; </script> </body></html>

2. Documentation
Tlchargement http://www.php.net/ http://fr2.php.net/manual/fr/index.php http://www.php.net/manual/fr/ Doc en franais http://dev.nexen.net/docs/php/annotee/manuel_toc.php FAQ http://www.php.net/FAQ.php

3. Dveloppement
3.1 Gnralits Commentaires par: /* ... */ ou // ... ou # .... A ne pas confondre avec les commentaires HTML <!--comment --> Edition du fichier source toto.php puis interprtation par le serveur http. Excution sur la ligne de commande du serveur: php -toto.php Dbogage manuel, par exemple: $DEBUG=1; //dbogage activ dans le script function debug($msg){if($_GLOBALS['DEBUG']) echo $msg,<br>"\n";} debug("ligne".__LINE__ ." x= ".$x); //appel 3.2 Programmation modulaire Possibilit d'inclusion de fichier par require("fic.php"); ou include("fic.php");.Prfrer include qui est conditionn par l'excution de la ligne le contenant et l"excution ne s'arrte pas si le fichier n'est pas trouv. En PHP4, include_once() et require_once() permettent d'viter les redfinitions. Une extension PHP est une bibliothque dynamique (php_xx.dll ou php_xx.so) pouvant tre charge la vole ou incorpore la compilation de PHP. Par exemple: dl('php_gd.so') or die('impossible de charger gd!'); GD est une extension de gestion des images gif, png.

4. Types, constantes et variables


Les types sont: boolean, integer, float, string, array, object, resource, NULL. Coercition de type implicite ou explicite par (type)exp. Pas de dclaration. Les variables sont dfinies dans un contexte d'excution, fonction (locales) ou script (globales). Les variables globales (script) ne sont accessibles dans une fonction que si on les dclare globales dans la fonction: global $i; Les variables statiques sont des variables locales une fonction mais qui sont initialises une seule fois lors du premier appel la fonction. Elles doivent tre dclares: static $compte=0; Les variables super globales sont des variables globales qui sont accessibles dans les fonctions sans qu'on ait besoin de les dclarer global. ! Noms de variables sensibles la casse (majuscule/minuscules) mais le nom des fonctions est indiffrent. 4.1 Variables prdfinies Les variables prdfinies dpendent de la configuration de PHP: pour les connatre, le plus simple est de faire appel la fonction phpinfo(). $PHP_SELF nom du fichier PHP en cours d'excution; galement accessible via $_SERVER["PHP_SELF"]. Un certain nombre de variables prdfinies sont des tableaux super globaux: par exemple, $_SERVER["REQUEST_METHOD"] indique la mthode utilise (GET ou POST ou ...); $_REQUEST variables de tous les tableaux prcdents avec la priorit dfinie par la directive de configuration variables_order qui vaut habituellement EGPCS (GET, POST, Cookie, Environment, Server); Nom $GLOBALS $_SERVER $_GET $_POST $_COOKIE $_FILES $_ENV Description Contient toutes les variables disponibles dans l'environnement d'excution global. Contient les variables fournies par le serveur web. Contient les variables fournies en paramtre au script via la mthode GET du protocole HTTP. Contient les variables fournies par un formulaire via la mthode POST du protocole HTTP. Contient les variables fournies par les cookies via le protocole HTTP. Contient les variables fournies suite un chargement de fichier par un formulaire via la mthode POST du protocole HTTP. Contient les variables fournies par l'environnement. Ce peut tre des variables du Shell sous lequel s'excute PHP, les variables CGI...

$_REQUEST Contient les variables fournies au script par n'importe quel mcanisme. $_SESSION Contient les variables de la session en cours dans le script. 4.2 Variables de formulaire Les variables de formulaire HTML sont accessibles via les tableaux super globaux $_GET, $_POST ou $_REQUEST. Par exemple: <form name='F' method='GET' action='<?php echo $_SERVER['PHP_SELF'];?>'> <input type='text' name='nom'> <select multiple name="boisson[]"><option value="Coca">CocaCola</option> <option value="Pepsi">PepsiCola</option></select> <input type='submit' name='bouton' value='ok'/></form> <?php print_r($_GET['boisson']); ?> Aprs saisie et validation, l'URL suivante sera utilise: essai.php?nom=toto&boisson[]=Coca&boisson[]=Pepsi& bouton=ok L'affichage suivant aura lieu: Array([0] => Coca [1]=> Pepsi) 4.3 Ecriture des littraux Chane $a et ls sans interprtation. Chane "$a et 'ls'" avec interprtation Echappement \$,\\, \", \t, \n, \r sans interprtation Numrique 123, 123.456, 2e10, \777, \xFF Attention: $cp=06400; $cp="06400"; $codepostal=(int)$cp; Contexte boolen '' ou 0 ou 0.0 ou "0" ou NULL ou tableau vide reprsentent FALSE; Conversion contextuelle automatique chanenumrique.

4.4 Constantes Macro dfinie grce la fonction define("PI",3.1415); echo K; Attention echo "Valeur de pi=".PI; echo "La valeur de pi=PI"; Constantes "magiques" prdfinies: TRUE valeur TRUE (diffrent de 0) FALSE valeur FALSE : 0 ou "" ou "0" ou tableau vide ou objet vide. __FILE__ nom du fichier excut ou $_SERVER["SCRIPT_FILENAME"] __LINE__ numro de ligne courante __DIR__ Dossier du fichier script courant $php_errormsg: Le dernier message d'erreur. $http_response_header: Entte de rponse http. $argc, $argv : nombre et tableaux des arguments passs au script. 4.5 Tableaux Il n'y a que des tableaux associatifs avec une cl entire (0 n-1) par dfaut. Les tableaux ont un pointeur courant automatiquement incrment lors d'une affectation. La cl doit tre unique sinon il y a crasement. Dfinition $tab=array(1,2,6); $tvide=array(); Dfinition $asso=array("toto"=>1,"titi"=>8); Affectation multiple list($i,$j)=($j,$i) ou list($i,$j)=$tab Ajout $tvide[]="case 0"; $tvide[]="case 1"; Remise zro reset($tab); Remet le pointeur au dbut. Fin de tableau end($tab): va pointer sur le dernier lment. Parcours array each($tab): retourne un asso 4 lments ou faux si fin de tableau: $r[0] = $r["key"] = cl courante; $r[1] = $r["value"] = valeur courante. Exemple: reset($tab); while(list($key,$value)=each($tab)) {echo"$key => $value";} // Affiche la cl puis la valeur. Accs $tab[6]=$asso["toto"]; Valeur courante current($tab): faux si vide, la fin ou valeur FALSE. Valeur et dplacement mixed next($tab); mixed prev($tab); retourne la valeur courante puis dplacement, faux si place vide ou fin ou dbut de tableau. Taille int count($tab); ou sizeof() Cl courante mixed key($tab) Existence bool in_array("toto", $tab) A 2 dimensions $et=array(array(0,0), array(0,1)); $et[i][j] Autres fonctions des quantits ! array_intersect(), array_merge(), array_diff(), is_array($tab) (Voir paragraphe 8.4)

5. Expressions
Quasiment tout est une expression en PHP. 5.1 Oprateurs Quasiment utiliss que pour les nombres sauf la concatnation de chane (.) et l'affectation (chanes et tableaux). $$s valeur de la variable dont le nom est dans variable s. $x++; $x--; ++$x; $y--; // Post, pr Incrmentation, dcrmentation $i==$j ? valSiVrai : ValSiFaux expression conditionnelle Arithmtique +, -, *, /, % Affectation =, +=, -=, *=, /=, %= ($i+=$j quivalent $i=$i+$j) Binaires &, |, ~, <<, >> (Bit bit: ET, OU, NOT, Shift gauche, droite) Logiques &&, ||, ^, ! (AND, OR, XOR, NOT) Comparaison <, <=, ==, !=, <>, >=, >, ===, !== Attention la priorit des oprateurs, utiliser les parentses. Lancer une commande systme: system('dir') Concatnation de chaine $s."toto"; $s.="toto"; L'affectation de chane longue est possible (PHP4) : $s=<<<FIN blabla .. FIN; // en dbut de ligne et avec un ;

6. Structures de contrle
Alternative avec if: if(expr) { inst1 } else { inst2 } if(cond) instructions endif; Choix avec if: if(e1) {inst1} elseif(e2) {inst2} else {inst3} Choix avec switch: switch($i) {case val0 : inst0; break; case val1 : inst1; break; default : instructiond; } Rptitives: while(cond) { instruction }; while (expression): commandes ... endwhile; do {instruction} while(cond); for(exp-init; exp-cond; exp-itr) {instructions} for (i=0; i<10; i++) {echo i," "); Ruptures possibles: break; continue; Parcours de tableau : foreach($tab as $case) {instructions utilisant $case} Parcours de tableau associatif: foreach($tab as $cle => $val) {instructions utilisant $cle ou $val}

7. Fonctions
Un nombre impressionnant de fonctions prdfinies! Passage des paramtres scalaires ou tableaux par valeur (PHP4 par rfrences si prcd de & dans l'appel et la dclaration). Les variables globales ne sont pas accessibles directement. Il faut utiliser la notation: $_GLOBALS['glob']. $_GLOBALS est le tableau associatif des variables globales. On peut aussi dclarer les variables globales dans la fonction par global $gi, $gj; Les arguments peuvent avoir une valeur par dfaut (optionnels) et tre en nombre variable. Les valeurs de retour peuvent tre scalaire ou tableaux. On peut supprimer l'affichage des erreurs produites par l'appel une fonction fn par : @fn($i) 7.1 Fonctions utilisateurs Dfinition function fct($arg0 ="toto", $arg1) { instructions; return array(1,4); } pointeur $pf='fct'; list($i, $j) = $pf(1, 2);

8. Fonctions prdfinies
8.1 Fonctions diverses echo exp1, exp2, ...; affiche les expressions; print(exp) affiche une expression; idem que echo(exp) print_r($var) affiche la variable scalaire ou tableau ou objet rcursivement; void exit() termine le script $l=system("dir"); excute une commande systme void die("message") affiche le message puis termine le script void eval("instructions PHP") il faut chapper les caractres spciaux: eval('$' . f($i).'= "toto";'; Ne pas oublier le point virgule ( ; ) 8.2 Entres/Sorties: systme de fichiers De nombreuses fonctions de gestion du systme de fichier. $s est suppos tre une chaine. echo string, string... ; affiche plusieurs arguments chanes print(string); affiche un arg. (class dans les fonctions chanes) $desc=fopen("fic.txt","r+"); ouverture en lecture et criture. Modes r : Read, w : cration ou raz, w+ , a : append, a+

$d=fopen("c:\\data\\info.txt","r"); syntaxe Windows avec l'antislash. filezise($fichier) $d=fopen("ftp://user:password@example.com/ ","w"); fclose($desc) bool feof($desc) filetype($f) $ligne=fgets($desc, 4096) fread($f) fwrite($f) $ligne=readline("entier SVP"); fscanf($f) fseek() $car=fgetc($desc); fflush($file) fputs($desc,"chaine"); file_exist($file) $s=file_get_contents($file, ) file_put_contents($file, $s) fgetcsv($file) fileatime($f) filectime($f) filemtime($f) filegroup() fileinode() fileowner() fileperms() Sous rpertoires: $file=readdir($dh) is_dir($dir) $dh=opendir("/tmp") rewinddir($dir) closedir($dir) scandir($dir,sort) chdir($dir) getcwd() chroot($dir) dirname($s)

taille du fichier. ouverture de session ftp fermeture du fichier. test la fin de fichier. Type de fichier lecture de la ligne (maxi 4096 octets). Lecture criture dans le fichier ne fonctionne pas sur le Web! Lecture avec format Positionnement dans le ficher lecture d'un caractre partir du fichier Mise jour disque. criture d'une chane dans le fichier; Teste l'existence du fichier Copie le contenu du fichier dans $s Copie la chaine $s dans le fichier Donne les dates associes au fichier Gestion des permissions

lecture de l'entre de rpertoire courante. teste si $dir est un dossier. ouvre et obtient un pointeur sur le rpertoire. Retourne la premire entre. ferme le rpertoire. renvoie un tableau tri des fichiers du rpertoire. Change de dossier. Donne le rpertoire courant. Change de rpertoire racine. renvoie le nom du dossier contenant le fichier ou rpertoire $s.

<?php $dir = "/tmp/php5"; // Ouvre le dossier et liste tous les fichiers if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "fichier : $file : type : " . filetype($dir . $file) . "\n"; } closedir($dh); } } ?> <?php $path = "/home/httpd/html/index.php"; $file = basename ($path); // $file is set to "index.php" $file = basename ($path,".php"); // $file is set to "index" ?> Autres fonctions: disk_free_space($dir), disk_total_space($dir) 8.3 Types et variables boolean isset($v) vrai si $i est dfini unset($v) supprime la dfinition. empty($v) string gettype($v) retourne le type (string si non dfini) Rsultat possibles:boolean, integer, float, string, array, object, resource, NULL void settype($v,"integer") coercition. Is_bool($v), is_int($v), is_integer($v), is_long($v), is_float($v), is_double($v), is_real($v), is_scalar($v), is_numeric($v), is_string($v), is_array($v), is_object($v), is_resource($v), is_null($v).

ctype_digit("123456.506") ? "Is a number" : "Is not a number"; var_dump($var1, var2, ...) affiche rcursivement la valeur et le type. print_r($v) affiche la valeur de la variable. get_resource_type($res) floatval($v) intval($v) strval($v) get_defined_var() number_format($n, dec, point, millier) echo($s) affiche la chaine. 8.4 Fonctions sur tableaux int array_push($pile,$elem) empile la fin et retourne la taille mixed array_pop($pile) dpile le sommet int array_unshift($_fo,$prem) ajoute au dbut mixed array_shift($_fo) retire le premier array array_values($asso) respectivement array_keys void shuffle($tab) mlange les valeurs 8.5 Tri de tableau void sort($tab) tri croissant (dcroissant avec rsort) selon les valeurs void ksort($asso) tri croissant selon les cls (krsort) void asort($asso) tri croissant selon les valeurs(arsort) void usort($tab, moncmp) tri croissant selon la fonction de comparaison dfinie par l'utilisateur. r=reverse, a=associatif, u=user) uksort(), uasort() tri utilisateur pour les tableaux associatifs key($asso) current($asso) next($asso) prev($asso) 8.6 Fonctions sur chanes De trs nombreuses fonctions dont voici les principales: ($s est une chaine) int strlen($s) Donne la taille de la chaine int strcmp($s1, $s2) comparaison -1, 0, 1 string substr($s, 2, 10) sous-chane partir de 2, de taille 10 $p=strpos($s,subs) donne la position de la 1ere occurrence. string strstr($s,$c) retourne tout s partir de la 1re occurrence de c array split(';',$s,10) retourne un tableau des 10 (maxi) premiers champs spars par des ; string join(';',$tab) retourne la chane constitue des valeurs spares par ; string trim($s) retire les blancs de dbut et de fin de chane. blancs: \n, \r, \t, \v, \0, espace string chop($s) supprime les blancs de fin de chane string ltrim($s) supprime les blancs de dbut (rtrim: de fin) string strtolower($s) met en minuscules (resp. strtoupper) echo(!isset($str) || trim($str)=="")?"Empty":"Not empty"; if(empty($str)) echo "Chaine vide"; string nl2br($s) remplace les \n par des <br> Autres fonctions: explode($car,$s) implode($car, $tableau) strpos($s, $ss, $decalage) str_replace($model, $remplacement, $s) $code=ord($c) $c=chr(13) str_replace() str_pad() str_word_count() strrev() substr_replace() substr_count() strcmp() print() printf() vprintf() sprintf() vsprintf() sscanf() fprintf() vfprintf() fscanf() 8.7 Expressions rgulires Recherche de correspondances : int ereg( '^[^.]*\.(.*)$',$s,$tab) met dans tab la partie droite d'un point dans s partir de l'indice 1. Retourne TRUE si trouv au moins une occurrence. Remplacement de chaine: string ereg_replace("([a-z]+)", "[\\1]",$s); encadre les mots minuscules de $s. split(reg,$s), eregi(), eregi_replace(), spliti(): insensible la casse

(k=key,

9. Classes
Collection (tableau) de variables et de fonctions; hritage simple possible par extends; tout est public; l'affectation se fait par recopie; pas de surcharge (utiliser un paramtre tableau).

Class Point{var $x,$y; function Point($px=0,$py=0) { //constructeur $this -> x = $px; $this -> y = $py; } function getxy(){ return array($this -> x, $this -> y); } } $p1 = &new Point(); // (0,0) $p2=&new Point(3,4); list($a,$b)=$p2 -> getxy();

10. Bases de donnes


Les fonctions PHP d'accs aux bases de donnes sont nombreuses. Il existe des fonctions spcialises pour des SGBD tels que MySQL, Oracle ou PostgreSQL, mais aussi des fonctions ODBC qui sont plus indpendantes du SGBD cible. 10.1 Fonctions pour MySQL $co = mysql_connect('hostname:port','username','passwd') or die('Connexion au serveur impossible!'); retourne un descripteur de connexion $co. La connexion se termine la fin du script. $co = mysql_pconnect('hostname','username','passwd') connexion persistante: si une connexion persistante existe dj avec le mme nom et passwd, la rutilise; ne ferme pas la connexion la fin du script. int mysql_select_db('mabase',$co) or die('Base de donnes inaccessible!'); retourne vrai si slectionn (use) int mysql_query('select|insert|...',$co) or die('Requte impossible'); retourne faux si impossible; retourne un entier rsultat ($res) si requte SELECT; retour inutile si requte action. int mysql_num_fields($res) retourne le nombres de colonnes du rsultat d'un SELECT string mysql_field_name($res,$i) retourne le nom de la colonne i string mysql_field_type($res,$i) retourne le type. (mysql_field_len,flags existent galement) int mysql_num_rows($res) retourne le nombre de lignes array mysql_fetch_assoc($res) retourne une ligne sous forme de tableau associatif (asso). Indic par les noms de colonnes array mysql_fetch_row($res) retourne une ligne sous forme de tableau indic de 0 mysql_num__elds -1 int mysql_affected_rows($co) retourne le nombre de lignes affectes par la dernire requte SQL DELETE, INSERT, REPLACE, UPDATE int mysql_db_query('base2', 'select...', $co) slectionne une BdD et lance une requte. string mysql_error($co) retourne la chane d'erreur MySQL int mysql_close($co) ferme la connexion (INDISPENSABLE) 10.2 Un exemple $co=mysql_connect('sql.free.fr','login','asswd') or die('Connexion au serveur impossible!'); mysql_select_db('mabase',$co)or die("Base de donnes inaccessible!"); $r=mysql_query('SELECT nom, prenom FROM matable', $co) or die('Requte errone'); $nc=mysql_num_fields($r); $nl=mysql_num_rows($r); while($raw=mysql_fetch_assoc($r)) { echo "NOM:",$raw['nom'],";Prnom:",$raw['prenom'],"<BR />"; } mysql_close($co);

11. phpMyAdmin
PhpMyAdmin est un outil d'administration d'une BD MySQL crit en PHP. Cet outil est accessible via le web et permet donc d'administrer distance une BD. On peut: crer, supprimer, modifier (alter) des tables, interroger, ajouter, supprimer, modifier des lignes, importer des fichiers textes contenant les donnes...

12. Rseau
socket $sock=fsockopen($hostname, $port, $timeout) ouvrir une socket; il ne reste plus qu' lire dedans ... et la fermer!

13. Image (gd) Ncessite d'avoir compil avec le module GD!


<?php header("Content-type:image/png"); $larg=100; $haut=200; $img=imagecreate($larg,$haut);

$red=imagecolorallocate($img,255,0,0); $vert=imagecolorallocate($img,0,255,0); imagefilledrectangle($img,0,0,$larg-1,$haut/2,$red); imageline($img,0,0,$larg-1,$haut-1,$vert); imagepng($img);//stdout imagedestroy($im); ?>

14. Caractres spciaux


Certains caractres (anti-slash, guillemet et apostrophe) saisis dans des champs de formulaires (<input name="champ">) sont automatiquement chapps par un antislash par PHP (magic_quotes). La variable PHP correspondante global $champ; doit donc tre traite par $champ=stripslashes($champ) pour supprimer tous les antislash gnrs. Lors de l'affichage d'une chane contenant des caractres html spciaux (& " < ' >) dans un champ, certains caractres et ceux qui suivent ne sont pas affichs et sont perdus (cela ne sera pas post). Pour afficher proprement une chane contenant ces caractres, il faut au pralable la traiter avec htmlspecialchars($champ, ENT_QUOTES)). Par consquent, pour un champ interactif, on crira : echo'<input name="champ" value="'.htmlspecial chars(stripslashes($champ),ENT_QUOTES)).'">'; Lors de l'envoi d'une requte un SGBD, il faut parfois chapper les caractres spciaux tels que: ', \, ", NULL. La fonction addslashes($chaine) effectue ce travail. De mme en JavaScript, la fonction addslashes() permettra d'chapper du code.

15. Configuration de PHP


Pour visualiser la configuration PHP, il suffit d'appeler la fonction phpinfo() pour voir: la version de PHP; La localisation du fichier de configuration de PHP: php.ini; Les librairies incluses et leur configuration (mysql, gd, ...). Le fichier php.ini dfinit notamment des variables fondamentales: register_globals=ON si ON alors les variables d'environnement, GET, POST, COOKIE, SERVEUR sont globales et les variables sont accessibles via $_POST[], ...(Scurit+); variables_order="EGPCS" ordre de rsolution des conflits de noms de variables ENV, GET, POST, COOKIE, SERVEUR; magic_quotes_gpc=ON permet d'anti-slasher les caractres anti-slash, guillemet et apostrophe dans les variables GPC (Get, Post, Cookie).

16. Authentification HTTP


La procdure d'authentification HTTP est associe un nom de domaine (realm ou AuthName) et un rpertoire. Elle peut tre dclenche: soit par Apache, indpendamment de PHP, soit en utilisant PHP. 16.1 Authentification Apache L'authentification est valable pour toute une arborescence. Un fichier .htaccess spcifie les rgles d'authentification valables pour ce rpertoire et tous ses descendants. AuthType Basic AuthUserFile "/nfs1/AuthApache/.htpasswd" AuthName "LeDomainePriv" <limit GET POST>Require valid-user</limit> Le fichier .htpasswd contient la liste des utilisateurs et leurs mots de passe crypts. Il est obtenu grce l'utilitaire htpasswd fourni par Apache. Par exemple: htpasswd -c .htpasswd user; cre un fichier avec l'utilisateur user. Lors de tout accs un fichier descendant de AuthApache, Apache va envoyer un entte au navigateur client qui va afficher une fentre d'authentification. Par la suite, l'utilisateur reste authentifi pour LeDomainePriv jusqu' la fin du navigateur ou si une nouvelle authentification PHP est lance. 16.2 Authentification PHP PHP doit tre un module d'Apache. On utilise alors la fonction header pour demander une authentification ("WWW-authenticate") au client, gnrant ainsi l'apparition d'une fentre de demande d'utilisateur et de mot de passe. Une fois que les champs ont t remplis, l'URL sera de nouveau appele, avec les variables $_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'] et $_SERVER['PHP_AUTH_TYPE'] contenant respectivement le nom d'utilisateur, le mot de passe et le type d'authentification. Actuellement, seule l'authentification de type "Basic" est supporte. Si l'authentification est ralise via Apache (.htaccess), la

variable $_SERVER['REMOTE_USER'] est gale $_SERVER['PHP_AUTH_USER']. Exemple d'authentification HTTP par PHP: <?php if(!isset($_SERVER['PHP_AUTH_USER'])||!verifierAuth()) header("WWW-Authenticate: Basic realm=\"LeDomainePriv\""); header("HTTP/1.0 401 Unauthorized"); echo "Texte envoyer si le client annule \n"; exit; else echo "Bonjour",$_SERVER['PHP_AUTH_USER']; // suite de la page prive } ?> La fonction boolenne verifierAuth() utilisera tout moyen ncessaire la vrification du nom et du mot de passe (Base de donnes, ...). Remarquons que les variables $_SERVER['PHP_AUTH_...'] sont utilisables mme si l'authentification n'a pas t effectue par le module PHP. Les variables d'authentification PHP sont valables pour tous les fichiers descendants du rpertoire. Par contre, tout fichier html ou PHP ne testant pas l'authentification est accessible, contrairement l'authentification par .htaccess (Apache) qui scurise tout le rpertoire. 16.3 Ds-authentification PHP Le navigateur crase le cache d'authentification client d'un domaine quand il reoit une nouvelle demande d'authentification. Cela permet de dconnecter un utilisateur, pour le forcer entrer un nouveau nom et son mot de passe. Si l'utilisateur annule l'authentification, il est alors ds-authentifi! Penser recharger la page. Certains programmeurs changent dynamiquement le nom de domaine pour donner un dlai d'expiration, ou alors, fournissent un bouton de rauthentification. 16.4 Autres authentifications L'authentification HTTP est de moins utilise au profit d'un formulaire d'authentification HTML et de la sauvegarde des informations d'authentification dans un cookie ou une session. En effet, le fonctionnement des diffrents navigateurs varie en ce qui concerne le cache d'authentification.

17. Tlchargement
Du site web vers le client: download ou dchargement; Du client vers le site web : upload ou chargement; 17.1 Dchargement Raliser un lien rfrenant le fichier dcharger, par exemple: <a href="Public/toto.pdf"> Cliquer ici</a>. Si le type du fichier est affichable par le navigateur, il sera affich (donc dcharg), sinon il sera propos l'utilisateur soit de sauver le fichier, soit de lancer l'application associe. Remarquons que tout lien peut tre enregistr en utilisant le bouton droit de la souris sur le lien. 17.2 Chargement Raliser un formulaire de chargement envoyant une requte POST. L'action effectue (script) aprs soumission doit vrifier que le fichier charg est du bon type et de la bonne taille puis l'afficher depuis la zone temporaire (tmp/) ou il est charg. Le fichier temporaire sera automatiquement effac de la zone la fin du script, s'il n'a pas t dplac ou renomm. Par exemple, le formulaire sera : <FORM ENCTYPE="multipart/form-data" ACTION="traitement.php" METHOD="POST"> <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" value= "1000"> Envoyez ce fichier: <INPUT NAME="fichier" TYPE="file" SIZE=15> <INPUT TYPE="submit" VALUE="Envoyer le fichier"> </FORM> Dans le script traitement.php on a accs diffrentes variables (diffrentes selon les versions de PHP) : $_FILES['fichier']['name'] le nom du fichier original Chez le client; $_FILES['fichier']['type'] le type mime du fichier "image/gif, text/plain, ..."; $_FILES['fichier']['size'] la taille du fichier charg; $_FILES['fichier']['tmp_name'] le nom du fichier temporaire sur le serveur; _$_FILES['fichier']['error'] le code d'erreur (PHP 4.2.0). Remarquons que tous les navigateurs ne vrifient pas le MAX_FILE_SIZE.

18. Les sessions


HTTP n'tant pas un protocole orient connexion, chaque nouvelle requte semble tre la premire. Depuis PHP4, les sessions PHP permettent de conserver de l'information du ct serveur sur la suite de requtes mises par le mme client (navigateur). Les variables enregistres dans le tableau $_SESSION doivent tre de

type string. Pour les variables de type tableau, elles doivent tre srialises. La communication des identifiants de sessions est ralise par cookie ou par URL de manire transparente pour le programmeur. Par dfaut, la dure de vie du cookie est gale la dure de vie du navigateur. bool session_start() dmarre une session; doit tre ralis en tout dbut de script avant tout en-tte! bool session_register("x", "y", ... ) dmarre une session si pas encore faite et y enregistre $x et $y; string session_id() retourne l'identifiant de session $_SESSION["z" ]="contenu"; ajoute une variable de session; echo $_SESSION["x" ]; affiche le contenu d'une variable de session; bool session_is_registered("mavar") teste si $mavar a t sauve; bool session_unregister("x") supprime la variable de session x; bool session_destroy() supprime toutes les donnes de la session; le cookie de session sera supprim ds la prochaine page. string serialize(mixed) retourne une chane compose des diffrents champs de l'objet ou du tableau; mixed unserialize(string) retourne la valeur de la variable d'origine;

19. Les Cookies


Les cookies sont stocks du ct client par le navigateur et contiennent des variables. Quand celui-ci envoie une requte une URI d'un domaine et d'un chemin dont il possde un cookie, toutes les variables du cookie sont envoyes au serveur. Un cookie a une dure de vie (expire) par dfaut gale la dure de vie de la session. int setcookie("x","Hello!",int expire, string path, string domain, int secure) doit tre excute avant toute chose et permet de positionner la variable x avec la valeur "Hello!"; attention le cookie ne sera renvoy au serveur qu' la prochaine requte; $_COOKIE["x"] accs une variable de cookie; setcookie("x","",time()-1000) efface la variable x du cookie; setcookie("y", $value, time()+3600); expire dans une heure;

20. Redirection
La fonction PHP header doit tre excute avant toute chose et permet de nombreuses choses dont: la redirection vers une autre URL en plaant des lments dans l'entte du fichier HTML: header("Location: http://www.php.net/"); /* Redirige le client */ exit(); /* rien aprs */ L'erreur header("Status: 404 Not Found"); L'expiration header("Expires:Mon, 26 Jul 2003 05:00:00 GMT"); La date de mise jour: header("Last-Modified: ".gmdate("D,dM Y H:i:s")." GMT"); La non mise en cache: header("Cache-Control: no-cache, must-revalidate"); Le type mime: header("Content-type:application/pdf"); Le nom du fichier : header("Content-Disposition: attachment; filename=toto.pdf");

21. PDO (PHP Data Object extension, PHP5)


PDO est une interface commune pour l'accs aux donnes. $con=new PDO($co,$user, $pass); /* $cc=Chaine de connexion: mysql:host=localhost; dbname=cars sqlite:/path/to/cars.db pgsql:host=localhost dbname=cars */ $q = $con->query("SELECT * FROM lecteurs ORDER BY nom"); $q->setFetchMode(PDO::FETCH_ASSOC); while($r = $q->fetch()) { echo $ligne['No'].' '.$ligne['nom'].' '.$ligne['prenom'].'<br>'; } $lecteurs = $q->fetchAll(PDO::FETCH_ASSOC); foreach($lecteurs as $r) { echo $ligne['No'].' '.$ligne['nom'].' '.$ligne['prenom'].'<br>'; } $q->columnCount(); $q->rowCount(); Exemple:

10

<?php $co = mysql_connect('bib.ito.dz', 'login', 'password'); mysql_select_db('LaBase',$co); $res = mysql_query('SELECT * FROM lecteurs'); $nb = mysql_num_rows($res); echo 'Il y a '.$nb.' enregistrement(s) dans la table lecteurs.<br>'; echo 'Voici la liste:<br>'; echo '<table><tr><td>No</td><td>Nom</td><td>Prnom</td></tr>'; while($ligne=mysql_fetch_assoc($res);) {echo"<tr><td>$ligne['No']</td><td>$ligne['nom']</td><td>$ligne['prenom'] </td></tr>"; } echo '</table>'; mysql_close($co); ?>

Upload de fichiers classique


<html><head><title>Upload de fichier</title></head> <body> <?php // affiche le formulaire pour uploader un fichier if (!$_POST['submit']) { ?> <form enctype="multipart/form-data" action="<?php=$_SERVER['PHP_SELF']?>" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="8000000"> Choisir le fichier: <input type="file" name="data"> <input type="submit" name="submit" value="Upload File"> </form> <?php } else { // check uploaded file size if ($_FILES['data']['size'] == 0) { die("ERROR: fichier upload vide (0 octet)"); } // Vrifier si type de fichier autoris. $allowedFileTypes = array("image/gif", "image/jpeg", "image/pjpeg"); if (!in_array($_FILES['data']['type'], $allowedFileTypes)) { die("ERROR: Type de fichier non permis"); } // Vrifier si l'upload est valide if (!is_uploaded_file($_FILES['data']['tmp_name'])) { die("ERROR: Fichier non valide"); } // Dfini le nom et le rpertoire de destination $uploadDir = "./uploads/"; // copie du fichier dans le rpertoire move_uploaded_file($_FILES['data']['tmp_name'], $uploadDir . $_FILES['data']['name']) or die("Impossible de copier le fichier"); // Affiche un message de succs echo "Fichier transfr avec succs dans:" . $uploadDir .$_FILES['data']['name']; } ?> </body></html>

Upload avec utilisation de la classe HTML quickform


<html><head><title>Upload avec quickform<title></head> <body> <?php // include HTML_Quickform class include "HTML/QuickForm.php"; // initialize form object $form = new HTML_QuickForm("uploadFile"); // add file upload element $file =& $form->addElement("file", "filedata", "Select image file:"); // add submit button $form->addElement("submit", null, "Upload Image"); // add file input validation rules

11

$form->addRule("filedata", "Please select a file for upload", "uploadedfile"); $form->addRule("filedata", "Please upload only images","mimetype", array("image/gif", "image/jpeg", "image/pjpeg")); // validate file input if ($form->validate()) { // if valid upload // move file to upload area // print success message $uploadDir = "./uploads/"; if ($file->isUploadedFile()) { $info = $file->getValue(); $file->moveUploadedFile($uploadDir); echo "Fichier copi vers $uploadDir ".$info['name']; } else { echo "Fichier non valide "; } exit; } // render and display form $form->display(); ?>

</body> </html>

12

Liste des variables du serveur


Ces variables sont rfrences dans le tableau superglobal $_SERVER. $_SERVER['PHP_SELF'] Nom Description argv argc DOCUMENT_ROOT PHP_SELF REQUEST_METHOD REQUEST_URI QUERY_STRING SCRIPT_FILENAME SCRIPT_NAME PATH_TRANSLATED GATEWAY_INTERFACE SERVER_NAME SERVER_SOFTWARE SERVER_PROTOCOL SERVER_ADMIN SERVER_PORT SERVER_SIGNATURE HTTP_ACCEPT HTTP_ACCEPT_CHARSET Tableau des arguments passs au script dans le cas o celui-ci est lanc en ligne de commande depuis un Shell. Nombre de paramtres passs au script (dans le cas ligne de commande). Racine partir de laquelle est excut le script. Nom du fichier du script en cours par rapport au DOCUMENT_ROOT. Mthode de la requte invoque pour accder la page. Avec le protocole HTTP/1.0, les mthodes possibles sont : GET, POST, HEAD, PUT. URI (Uniform Resource Identifier) qui a t fournie pour accder la page. Question pose au script (si elle existe). Ce sont les paramtres passs au script. Chemin absolu jusqu'au script courant. Nom du script courant. Utilis dans le champ method des formulaires pour que le script s'appelle lui-mme. Chemin de la page dans le systme de fichier rel du serveur. Est diffrent du chemin virtuel traduit pour l'extrieur. Numro de rvision de l'interface CGI du serveur. Nom du serveur qui excute le script. Ce peut-tre un hte virtuel. Tel que dfini par la directive VIRTUAL_HOST d'Apache. Chane de caractres d'identification du serveur. Contenu du champ Server de l'entte HTTP. Par exemple : Apache/1.3.9 (Unix) Debian/GNU. Nom et rvision du protocole utilis pour transfrer au client la page issue du script. En gnral : HTTP/1.0 ou HTTP/1.1. Identifiant de l'administrateur du serveur tel que dfini par la directive SERVER_ADMIN d'Apache. Numro de port utilis sur le serveur. Traditionnellement, vaut 80. Chane de caractres contenant le numro de version du serveur ainsi que le nom d'hte virtuel. Contenu du champ Accept de l'entte HTTP. C'est la liste des types MIME. Par exemple : text/html, application/xml, image/gif. Contenu du champ Accept-Charset de l'entte HTTP. C'est le type d'encodage des caractres utilis.

Contenu du champ Accept-Encoding de l'entte HTTP. C'est le type HTTP_ACCEPT_ENCODING d'encodage des donnes utilis. C'est en gnral de la compression. Par exemple : gzip. HTTP_ACCEPT_LANGUAGE HTTP_CONNECTION HTTP_HOST HTTP_REFERER HTTP_USER_AGENT REMOTE_ADDR REMOTE_PORT Contenu du champ Accept-Language de l'entte HTTP. C'est la langue utilise. Par exemple : fr. Contenu du champ Accept-Connection de l'entte HTTP. C'est le type de la connexion tablie entre le client et le serveur (persistante ou non), par exemple : Keep-Alive ou close. Contenu du champ Host de l'entte HTTP en cas de virtual hosting. Adresse de la page qui a conduit le client la page courante. Contenu du champ User-Agent de l'entte HTTP. C'est le nom et la version du navigateur utilis par le client pour consulter la page en cours. Ainsi que le systme d'exploitation et autres informations. Par exemple : Mozilla/5.0 Galeon/1.0.2 (X11;Linux i686; U;) Gecko/20011224. Adresse IP du client qui demande la page. Le numro de port utilis sur la machine cliente pour tablir la communication avec le serveur.

13

Liste des fonctions PHP pour MySQL


$nb=mysql_affected_rows($res) Retourne le nombre de lignes affectes mysql_client_encoding Retourne le nom du jeu de caractres utilis mysql_close($co) Ferme la connexion MySQL $co=mysql_connect($host, $user, $pass) connexion un serveur mysql_create_db($b) Cre une base de donnes MySQL mysql_data_seek Dplace le pointeur interne de rsultat MySQL mysql_db_name Lit les noms des bases de donnes $res=mysql_db_query($sql) Envoie une requte MySQL au serveur mysql_drop_db($base) Efface une base de donnes MySQL mysql_errno() Retourne le numro d'erreur de la dernire commande mysql_error() Retourne le texte associ avec l'erreur gnre mysql_escape_string Protge les caractres spciaux SQL $line=mysql_fetch_array($res) Retourne une ligne de rsultat MySQL sous la forme d'un tableau associatif, d'un tableau index, ou les deux $line=mysql_fetch_assoc($res) Lit une ligne de rsultat MySQL dans un tableau associatif mysql_fetch_field Retourne les donnes enregistres dans une colonne MySQL sous forme d'objet mysql_fetch_lengths Retourne la taille de chaque colonne d'une ligne de rsultat MySQL mysql_fetch_object Retourne une ligne de rsultat sous forme d'objet $tab=mysql_fetch_row($res) Retourne une ligne de rsultat dans un tableau mysql_field_flags Retourne des dtails sur une colonne MySQL mysql_field_len Retourne la taille d'un champ de rsultat MySQL mysql_field_name Retourne le nom d'une colonne dans un rsultat MySQL mysql_field_seek Dplace le pointeur de rsultat vers une position mysql_field_table Retourne le nom de la table MySQL o se trouve une colonne mysql_field_type Retourne le type d'une colonne MySQL spcifique mysql_free_result($res) Libre le rsultat de la mmoire mysql_get_client_info Lit les informations sur le client MySQL mysql_get_host_info Lit les informations sur l'hte MySQL mysql_get_proto_info Lit les informations sur le protocole MySQL mysql_get_server_info Lit les informations sur le serveur MySQL mysql_info Lit des informations propos de la dernire requte MySQL mysql_insert_id Retourne l'identifiant gnr par la dernire requte mysql_list_dbs Liste les bases de donnes disponibles mysql_list_fields Liste les champs d'une table MySQL mysql_list_processes Liste les processus MySQL mysql_list_tables Liste les tables d'une base de donnes MySQL mysql_num_fields Retourne le nombre de champs d'un rsultat MySQL mysql_num_rows($res) Retourne le nombre de lignes d'un rsultat mysql_pconnect($host, $user, $pass) Ouvre une connexion persistante un serveur MySQL mysql_ping Vrifie la connexion au serveur MySQL et s'y reconnecte mysql_query($sql) Envoie une requte un serveur MySQL mysql_real_escape_string Protge les caractres spciaux de SQL mysql_result Retourne un champ d'un rsultat MySQL mysql_select_db($base) Slectionne une base de donnes MySQL mysql_set_charset Dfinit le jeu de caractres du client MySQL mysql_stat Retourne le statut courant du serveur MySQL mysql_tablename Lit le nom de la table qui contient un champ mysql_thread_id Retourne l'identifiant du thread MySQL courant mysql_unbuffered_query Excute une requte SQL sans mobiliser les rsultats MySQL

14

PHP: Les fonctions mathmatiques


integer abs(integer X) Valeur absolue de X, double abs (double X) Valeur absolue de X : echo abs(543); //affiche 543. double acos(double X) Arc cosinus de X, qui doit tre compris entre 1 et + 1. Le rsultat est en radians : echo acos(0.5); // affiche 1.0471975511966. double acosh(double X) Arc cosinus hyperbolique de X. Ne fonctionne pas sous Windows. double asin (double X) Arc sinus de X, qui doit tre compris entre 1 et + 1. Le rsultat est en radians: echo asin(0.5); // affiche 0.5235987755983. double asinh(double X) Arc sinus hyperbolique de X. Ne fonctionne pas sous Windows. double atan(double X) Arc tangente de X. Le rsultat est en radians : echo atan(5); //affiche 0.46364760900081. double atan2(double Y, double X ) Arc tangente du rapport Y/X. Le rsultat est en radians. (Y <> 0). double atanh(double X) Arc tangente hyperbolique de X. double exp(double X) Exponentielle de X, soit ex. double expm1 (double X) Retourne lexponentielle de X 1, soit ex 1. double floor (double X) Retourne la partie entire de X, soit lentier immdiatement infrieur X. double fmod (double X, double Y) Retourne le reste de la division de Y par X pour le type double. double log(double X, double B) Logarithme nprien (de base e) du nombre X. double log10(double X) Logarithme dcimal (de base 10) de X. double log1p(double X) Logarithme nprien de (1 + X). double/integer max(double/integer X, double/integer Y) Retourne la valeur maximale de X et de Y. double/integer min(double/integer X, double/integer Y) Retourne la valeur minimale de X et de Y. double pi (void) Retourne la valeur de pi. double/integer pow(double/integer X,double/integer Y) Calcule X la puissance Y. Les paramtres peuvent tre entiers ou dcimaux. double sin (double X) Sinus de X exprim en radians. double sinh (double X) Sinus hyperbolique de X. double sqrt(double X) Racine carre de X (qui doit tre positif). double tan(double X) Tangente de X qui doit tre en radians. double tanh(double X) Tangente hyperbolique de X. double ceil(double X) Retourne lentier immdiatement suprieur X. double round(double X, integer N) Arrondit X avec N dcimales. double cos(double X) Cosinus de X qui doit tre exprim en radians. double cosh(double X) Cosinus hyperbolique de X. double hypot(double X, double Y) Retourne la valeur de lhypotnuse dun triangle rectangle dont les cts de langle droit sont X et Y, donc la valeur de la racine carre de (X2 + Y2 ). Conversions: double rad2deg (double X) Convertit X de radians en degrs. string base_convert(string N, integer B1, integer B2) Convertit le nombre N contenu dans une chane de la base B1 dans la base B2. integer bindec(string X) Convertit un nombre binaire X contenu dans une chane en base 10. string decbin(integer X) Convertit X de la base 10 en binaire. string dechex(integer X) Convertit X de la base 10 en hexadcimal. string decoct(integer X) Convertit X de la base 10 en octal. double deg2rad (double X) Convertit X de degrs en radians. integer hexdec(string CH) Convertit la chane hexadcimale CH en dcimal. integer octdec (string CH) Convertit un nombre octal contenu dans la chane CH en base 10. boolean is_finite(double X) Retourne TRUE si la valeur X est finie, cest--dire dans lintervalle des valeurs admises pour un double, et FALSE dans le cas contraire. boolean is_infinite( double X) Retourne TRUE si la valeur X est suprieure la valeur maximale admise pour un double, et FALSE dans le cas contraire. boolean is_nan(double X) Retourne TRUE si la valeur X nest pas un nombre, et FALSE dans le cas contraire. Nombres alatoires: void srand(integer N) Initialise le gnrateur de nombres alatoires de la fonction rand(). Le paramtre N est un entier quelconque. void mt_srand( integer N) Initialise le gnrateur de nombres alatoires pour la fonction mt_rand(). Le paramtre N est un entier quelconque. integer getrandmax(void) Indique la valeur maximale retourne par la fonction rand(). integer mt_getrandmax(void) Retourne la plus grande valeur que peut retourner mt_rand(). integer mt_rand( integer Min, integer Max) Gnre un rsultat compris entre Min et Max ou entre 0 et la constante RAND_MAX si vous omettez les paramtres. integer rand(integer Min, integer Max) Retourne un nombre alatoire $r tel que Min <= $r <= Max. double lcg_value (void) Retourne un nombre alatoire compris entre 0 et 1.

15

Les principaux codes derreur que peut retourner un serveur web


Code 100-199 200-299 200 204 300-399 300 301 302 303 400-499 400 401 Signification Les informations sont retournes. La requte a t traite avec succs. Aucun incident signaler. Le "document" retourn est vide. Demande de redirection. Le serveur a besoin de plus dinformations. Le document demand a t dplac dfinitivement. Le document demand a t dplac temporairement (les requtes suivantes ne ncessiteront pas forcment de redirection). Le document doit tre demand une autre adresse. La requte est incomplte. La requte nest pas valide. Lauthentification a chou. Si ce nest pas le rsultat attendu, sous Apache, vrifiez que les fichiers .htaccess et .htpasswd (le nom peut tre diffrent) contiennent bien le nom et mot de passe que vous saisissez. Accs interdit. La page demande au serveur na pu tre trouve. La mthode utilise est refuse par le serveur. Authentification proxy exige. Authentification proxy exige. Dlai dattente de la requte du client dpass. Le serveur a besoin de la longueur de la requte. La requte est trop longue. Indique une erreur du serveur HTTP. 500 Erreur interne du serveur. Assurez-vous de ne pas avoir cr une boucle comme, par exemple, une srie infinie de redirections (ce qui peut arriver lors des traitements automatiques des erreurs). Dlai dattente dpass.

403 404 405 406 407 408 411 413 500-599 500

504

16

También podría gustarte