Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
$_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();
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!
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.
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;
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");
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); ?>
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
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
14
15
403 404 405 406 407 408 411 413 500-599 500
504
16