Aide Memoire PHP

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 14

AIDE MEMOIRE PHP

1. Introduction
PHP (Personal Home Page) ou (HyperText Preprocessor): Langage de script incorporé dans du HTML,
s'exécutant coté serveur, soit comme CGI, soit comme un module (+ rapide).
Langage interprété, Expressions régulières riches, Conversions automatiques, Déclarations optionnelles et non
typées, Fin de ligne (;) obligatoires, Fonctions natives pour accéder aux SGBD (MySQL, Oracle, PostgreSQL,
ODBC, ...). Connexions persistantes (à fermer !);
Variables préfixées par le symbole: $
Syntaxe fonctionnelle: fopen("/home/toto/file.txt","r");
PHP est un logiciel libre.
Possibilité de télécharger 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> <html><head><title>Example</title>
</head> </head>
<body> <body>
<?php echo "HelloWorld!"; <script language="php">
?> echo "HelloWorld! \n";
</body></html> </script>
</body></html>
2. Documentation
Téléchargement http://www.php.net/
http://fr2.php.net/manual/fr/index.php http://www.php.net/manual/fr/
Doc en français http://dev.nexen.net/docs/php/annotee/manuel_toc.php
FAQ http://www.php.net/FAQ.php

3. Développement

3.1 Généralités
Commentaires par: /* ... */ ou // ... ou # jusqu'à fin de la ligne
A ne pas confondre avec les commentaires HTML <!-- Commentaire html -->
Edition du fichier source toto.php puis interprétation au niveau du serveur http.
Exécution sur la ligne de commande du serveur: php -toto.php
Débogage manuel, par exemple:
$DEBUG=1; //débogage 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");.Préférer include qui
est conditionné par l'exécution de la ligne le contenant et l"exécution ne s'arrête pas si le fichier n'est pas
trouvé. En PHP4, include_once() et require_once() permettent d'éviter les redéfinitions. Une extension
PHP est une bibliothèque dynamique (php_xx.dll ou php_xx.so) pouvant être chargée à la volée ou incorporée
à la compilation de PHP. Par exemple:
dl('php_gd.so') or die('impossible de charger gd!');

GHOUALI SAMIR, UNIV MASCARA


1
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 déclaration. Les variables sont définies dans un contexte d'exécution, fonction
(locales) ou script (globales). Les variables globales (script) ne sont accessibles dans une fonction que si on les
déclare globales dans la fonction: global $i; Les variables statiques sont des variables locales à une
fonction mais qui sont initialisées une seule fois lors du premier appel à la fonction. Elles doivent être déclarées:
static $compte=0; Les variables super globales sont des variables globales qui sont accessibles dans les
fonctions sans qu'on ait besoin de les déclarer global.
! Noms de variables sensibles à la casse (majuscule/minuscules) mais le nom des fonctions est
indifférent.

4.1 Variables prédéfinies


Les variables prédéfinies dépendent de la configuration de PHP: pour les connaître, le plus simple est de faire
appel à la fonction phpinfo().

$PHP_SELF nom du fichier PHP en cours d'exécution; également accessible via $_SERVER["PHP_SELF"].
Un certain nombre de variables prédéfinies sont des tableaux super globaux:
par exemple, $_SERVER["REQUEST_METHOD"] indique la méthode utilisée (GET ou POST ou ...);
$_REQUEST variables de tous les tableaux précédents avec la priorité définie par la directive de configuration
variables_order qui vaut habituellement EGPCS (GET, POST, Cookie, Environment, Server);

Nom Description
$GLOBALS Contient toutes les variables disponibles dans l'environnement d'exécution global.
$_SERVER Contient les variables fournies par le serveur web (Apache)
$_GET Contient les variables fournies en paramètre au script via la méthode GET du protocole HTTP.
$_POST Contient les variables fournies par un formulaire via la méthode POST du protocole HTTP.
$_COOKIE 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 méthode
$_FILES
POST du protocole HTTP.
Contient les variables fournies par l'environnement. Ce peut être des variables du Shell sous
$_ENV
lequel s'exécute PHP, les variables CGI... (necessite EGPCS dans php.ini) voir aussi getenv()
$_REQUEST Contient les variables fournies au script par n'importe quel mécanisme (GET ou POST ).
$_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']); ?>

Après saisie et validation, l'URL suivante sera utilisée:


essai.php?nom=toto&boisson[]=Coca&boisson[]=Pepsi&bouton=ok
L'affichage suivant aura lieu:
Array([0] => Coca [1]=> Pepsi)

4.3 Ecriture des littéraux


Chaîne ’$a et ’ls’’ sans interprétation. Chaîne "$a et 'ls'" avec interprétation
Echappement \$,\\, \", \t, \n, \r sans interprétation
Numérique 123, 123.456, 2e10, \777, \xFF
Attention: $cp=06400; $cp="06400"; $codepostal=(int)$cp;
Contexte booléen '' ou 0 ou 0.0 ou "0" ou NULL ou tableau vide représentent FALSE;

GHOUALI SAMIR, UNIV MASCARA


2
Conversion contextuelle automatique chaînenumérique.

4.4 Constantes
Macro définie grâce à la fonction define("PI",3.1415);
Attention echo "La valeur de pi=PI"; ici PI n'est pas reconnu comme constante
if faudrait écrire: echo "Valeur de pi=".PI;

Constantes "magiques" prédéfinies:


TRUE valeur TRUE (différent de 0)
FALSE valeur FALSE : 0 ou "" ou "0" ou tableau vide ou objet vide ou chaine vide.
__FILE__ nom du fichier exécuté ou $_SERVER["SCRIPT_FILENAME"]
__LINE__ numéro de ligne courante __DIR__ Dossier du fichier script courant
$php_errormsg: Le dernier message d'erreur.
$http_response_header: Entête de réponse http.
$argc, $argv : nombre et tableaux des arguments passés au script.

4.5 Tableaux
Il n'y a que des tableaux associatifs avec une clé entière (0 … n-1) par défaut. Les tableaux ont un pointeur
courant automatiquement incrémenté lors d'une affectation. La clé doit être unique sinon il y a écrasement.
Définition $tab=array(1,2,6); $tvide=array();
Définition $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 à zéro reset($tab); Remet le pointeur au début.
Fin de tableau end($tab): va pointer sur le dernier élément.
Parcours array each($tab): retourne un asso à 4 éléments 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.
Accès $tab[6]=$asso["toto"];
Valeur courante current($tab): faux si vide, à la fin ou valeur FALSE.
Valeur et déplacement mixed next($tab);
mixed prev($tab); retourne la valeur courante puis déplacement, faux si place vide ou fin ou début 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: array_intersect(), array_merge(), array_diff(), is_array($tab)

5. Expressions
Quasiment tout est une expression en PHP.

5.1 Opérateurs
Quasiment utilisés que pour les nombres sauf la concaténation de chaîne (.) et l'affectation (chaînes et
tableaux). $$s valeur de la variable dont le nom est dans la variable s.
$x++; $x--; ++$x; $y--; // Post, pré Incrémentation, décrémentation
$i==$j ? valSiVrai : ValSiFaux expression conditionnelle
Arithmétique +, -, *, /, %
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 opérateurs, utiliser les parentèses.
Lancer une commande système: system('dir')
Concaténation de chaine $s."toto"; $s.="toto";
L'affectation de chaîne longue est possible (PHP4) :
$s=<<<FIN

GHOUALI SAMIR, UNIV MASCARA


3
blabla ..
FIN; // en début de ligne et avec un ;

6. Structures de contrôle
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; }
Répétitives:
while(cond) { instruction };
while (expression): commandes ... endwhile;
do {instruction} while(cond);
for(initialisation; condition; itération) {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 prédéfinies! Passage des paramètres scalaires ou tableaux par valeur
(PHP4 par références si précédé de & dans l'appel et la déclaration).
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 déclarer les variables globales
dans la fonction par global $gi, $gj; Les arguments peuvent avoir une valeur par défaut (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


Définition
function fct($arg0 ="toto", $arg1)
{ instructions;
return array(1,4);
}
pointeur $pf='fct'; list($i, $j) = $pf(1, 2);

8. Fonctions prédéfinies
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 récursivement;
void exit() termine le script
$l=system("dir"); exécute une commande système
void die("message") affiche le message puis termine le script
void eval("instructions PHP") il faut échapper les caractères spéciaux:
eval('$' . f($i).'= "toto";'; Ne pas oublier le point virgule ( ; )

GHOUALI SAMIR, UNIV MASCARA


4
8.2 Entrées/Sorties: système de fichiers
De nombreuses fonctions de gestion du système de fichier. $s est supposé être une chaine.
echo string, string... ; affiche plusieurs arguments chaînes
print(string); affiche un arg. (classé dans les fonctions chaînes)
$desc=fopen("fic.txt","r+"); ouverture en lecture et écriture. Modes r : Read, w
$d=fopen("c:\\data\\info.txt","r"); syntaxe : création ou raz, w+ , a : append, a+
Windows avec l'antislash.
filezise($fichier) taille du fichier.
$d=fopen("ftp://user:password@example.com/ ouverture de session ftp
","w");
fclose($desc) fermeture du fichier.
bool feof($desc) teste la fin de fichier.
filetype($f) Type de fichier
$ligne=fgets($desc, 4096) lecture de la ligne (maxi 4096 octets).
fread($f) fwrite($f) Lecture écriture dans le fichier
$ligne=readline("entier SVP"); ne fonctionne pas sur le Web!
fscanf($f) Lecture avec format
fseek() Positionnement dans le ficher
$car=fgetc($desc); lecture d'un caractère à partir du fichier
fflush($file) Mise à jour disque.
fputs($desc,"chaine"); écriture d'une chaîne dans le fichier;
file_exist($file) Teste l'existence du fichier
$s=file_get_contents($file, …) Copie le contenu du fichier dans $s
file_put_contents($file, $s) Copie la chaine $s dans le fichier
fgetcsv($file)
fileatime($f) filectime($f) filemtime($f) Donne les dates associées au fichier
filegroup() fileinode() fileowner() Gestion des permissions
fileperms()

Sous répertoires:
$file=readdir($dh) lecture de l'entrée de répertoire courante.
is_dir($dir) teste si $dir est un dossier.
$dh=opendir("/tmp") ouvre et obtient un pointeur sur le répertoire.
rewinddir($dir) Retourne à la première entrée.
closedir($dir) ferme le répertoire.
scandir($dir,sort) renvoie un tableau trié des fichiers du répertoire.
chdir($dir) Change de dossier.
getcwd() Donne le répertoire courant.
chroot($dir) Change de répertoire racine.
dirname($s) renvoie le nom du dossier contenant le fichier ou répertoire $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)

GHOUALI SAMIR, UNIV MASCARA


5
8.3 Types et variables
boolean isset($v) vrai si $i est défini
unset($v) supprime la définition. empty($v)
string gettype($v) retourne le type (string si non défini)
Résultat 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 récursivement 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) dépile le sommet
int array_unshift($_fo,$prem) ajoute au début
mixed array_shift($_fo) retire le premier
array array_values($asso) respectivement array_keys
void shuffle($tab) mélange les valeurs

8.5 Tri de tableau


void sort($tab) tri croissant (décroissant avec rsort) selon les valeurs
void ksort($asso) tri croissant selon les clés (krsort)
void asort($asso) tri croissant selon les valeurs(arsort)
void usort($tab, moncmp) tri croissant selon la fonction de comparaison définie par l'utilisateur. (k=key,
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 chaînes


De très 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-chaîne à 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 1ère occurrence de c
array split(';',$s,10) retourne un tableau des 10 (maxi) premiers champs séparés par des ;
string join(';',$tab) retourne la chaîne constituée des valeurs séparées par ;
string trim($s) retire les blancs de début et de fin de chaîne. blancs: \n, \r, \t, \v, \0, espace
string chop($s) supprime les blancs de fin de chaîne
string ltrim($s) supprime les blancs de début (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>
ucfirst() upper first character : Premier caractère de la chaine en majuscule
ucwords() upper first character for all words
strrev() string reverse; $asc = ord($char); code ASCII $char = chr($asc);

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()

GHOUALI SAMIR, UNIV MASCARA


6
8.7 Expressions régulières
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

9. Classes
Collection (tableau) de variables et de fonctions; héritage simple possible par extends; tout est public;
l'affectation se fait par recopie; pas de surcharge (utiliser un paramètre 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 données


Les fonctions PHP d'accès aux bases de données sont nombreuses. Il existe des fonctions spécialisées pour
des SGBD tels que MySQL, Oracle ou PostgreSQL, mais aussi des fonctions ODBC qui sont plus
indépendantes 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 déjà avec le même nom et passwd, la réutilise; ne ferme pas la connexion à la fin du script.
int mysql_select_db('mabase',$co) or die('Base de données inaccessible!'); retourne
vrai si sélectionné (use)
int mysql_query('select|insert|...',$co) or die('Requête impossible'); retourne faux si
impossible; retourne un entier résultat ($res) si requête SELECT; retour inutile si requête action.
int mysql_num_fields($res) retourne le nombres de colonnes du résultat 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 affectées par la dernière requête SQL
DELETE, INSERT, REPLACE, UPDATE
int mysql_db_query('base2', 'select...', $co) sélectionne une BdD et lance une requête.
string mysql_error($co) retourne la chaîne d'erreur MySQL
int mysql_close($co) ferme la connexion (INDISPENSABLE)
int mysql_insert_id () Renvoie l’identifiant engendré pendant le dernier ordre INSERT pour l’attribut
bénéficiant de l’option AUTO_INCREMENT.

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 données inaccessible!");
$r=mysql_query('SELECT nom, prenom FROM matable',
$co) or die('Requête erronée'); $nc=mysql_num_fields($r);
$nl=mysql_num_rows($r); while($raw=mysql_fetch_assoc($r))
{ echo "NOM:",$raw['nom'],";Prénom:",$raw['prenom'],"<BR />";
} mysql_close($co);

GHOUALI SAMIR, UNIV MASCARA


7
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: créer, supprimer, modifier (alter) des tables, interroger,
ajouter, supprimer, modifier des lignes, importer des fichiers textes contenant les données...

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

13. Image (gd) Nécessite 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. Caractères spéciaux


Certains caractères (anti-slash, guillemet et apostrophe) saisis dans des champs de formulaires (<input
name="champ">) sont automatiquement échappés par un antislash par PHP (magic_quotes).
La variable PHP correspondante global $champ; doit donc être traitée par $champ=stripslashes($champ)
pour supprimer tous les antislash générés.
Lors de l'affichage d'une chaîne contenant des caractères html spéciaux (& " < ' >) dans un champ,
certains caractères et ceux qui suivent ne sont pas affichés et sont perdus (cela ne sera pas posté). Pour
afficher proprement une chaîne contenant ces caractères, il faut au préalable la traiter avec
htmlspecialchars($champ, ENT_QUOTES)).
Par conséquent, pour un champ interactif, on écrira :
echo'<input name="champ" value="'.htmlspecial
chars(stripslashes($champ),ENT_QUOTES)).'">';
Lors de l'envoi d'une requête à un SGBD, il faut parfois échapper les caractères spéciaux tels que: ', \, ",
NULL. La fonction addslashes($chaine) effectue ce travail.
De même 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 définit 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[], ...(Sécurité+);
variables_order="EGPCS" ordre de résolution des conflits de noms de variables ENV, GET, POST,
COOKIE, SERVEUR;
magic_quotes_gpc=ON permet d'anti-slasher les caractères anti-slash, guillemet et apostrophe dans les
variables GPC (Get, Post, Cookie).

16. Authentification HTTP


La procédure d'authentification HTTP est associée à un nom de domaine (realm ou AuthName) et à un
répertoire. Elle peut être déclenchée: soit par Apache, indépendamment de PHP, soit en utilisant PHP.

16.1 Authentification Apache


L'authentification est valable pour toute une arborescence. Un fichier .htaccess spécifie les règles
d'authentification valables pour ce répertoire et tous ses descendants.
AuthType Basic
AuthUserFile "/nfs1/AuthApache/.htpasswd"
AuthName "LeDomainePrivé"
<limit GET POST>Require valid-user</limit>

GHOUALI SAMIR, UNIV MASCARA


8
Le fichier .htpasswd contient la liste des utilisateurs et leurs mots de passe cryptés. Il est obtenu grâce à
l'utilitaire htpasswd fourni par Apache. Par exemple: htpasswd -c .htpasswd user; crée un fichier avec
l'utilisateur user. Lors de tout accès à un fichier descendant de AuthApache, Apache va envoyer un entête au
navigateur client qui va afficher une fenêtre d'authentification. Par la suite, l'utilisateur reste authentifié pour
LeDomainePrivé jusqu'à la fin du navigateur ou si une nouvelle authentification PHP est lancée.

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, générant ainsi l'apparition d'une fenêtre de demande d'utilisateur et de mot
de passe. Une fois que les champs ont été remplis, l'URL sera de nouveau appelée, 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 supportée. Si l'authentification est réalisée 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 privée
} ?>
La fonction booléenne verifierAuth() utilisera tout moyen nécessaire à la vérification du nom et du mot de
passe (Base de données, ...). Remarquons que les variables $_SERVER['PHP_AUTH_...'] sont utilisables
même si l'authentification n'a pas été effectuée par le module PHP.
Les variables d'authentification PHP sont valables pour tous les fichiers descendants du répertoire. Par contre,
tout fichier html ou PHP ne testant pas l'authentification est accessible, contrairement à l'authentification par
.htaccess (Apache) qui sécurise tout le répertoire.

16.3 Dés-authentification PHP


Le navigateur écrase le cache d'authentification client d'un domaine quand il reçoit une nouvelle demande
d'authentification. Cela permet de déconnecter un utilisateur, pour le forcer à entrer un nouveau nom et son mot
de passe. Si l'utilisateur annule l'authentification, il est alors dés-authentifié! Penser à recharger la page.
Certains programmeurs changent dynamiquement le nom de domaine pour donner un délai d'expiration, ou
alors, fournissent un bouton de réauthentification.

16.4 Autres authentifications


L'authentification HTTP est de moins utilisée 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
différents navigateurs varie en ce qui concerne le cache d'authentification.

17. Téléchargement
Du site web vers le client: download ou déchargement; Du client vers le site web : upload ou chargement;

17.1 Déchargement
Réaliser un lien référençant le fichier à décharger, par exemple:
<a href="Public/toto.pdf"> Cliquer ici</a>. Si le type du fichier est affichable par le navigateur, il
sera affiché (donc déchargé), sinon il sera proposé à l'utilisateur soit de sauver le fichier, soit de lancer
l'application associée. Remarquons que tout lien peut être enregistré en utilisant le bouton droit de la souris sur
le lien.

17.2 Chargement
Réaliser un formulaire de chargement envoyant une requête POST. L'action effectuée (script) après soumission
doit vérifier 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é déplacé 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">

GHOUALI SAMIR, UNIV MASCARA


9
</FORM>
Dans le script traitement.php on a accès à différentes variables (différentes 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 vérifient pas
le MAX_FILE_SIZE.

18. Les sessions


HTTP n'étant pas un protocole d'application orienté connexion, chaque nouvelle requête semble être la
première. Depuis PHP4, les sessions PHP permettent de conserver de l'information du côté serveur sur la suite
de requêtes émises par le même client (navigateur). Les variables enregistrées dans le tableau $_SESSION
doivent être de type string. Pour les variables de type tableau, elles doivent être sérialisées. La communication
des identifiants de sessions est réalisée par cookie ou par URL de manière transparente pour le programmeur.
Par défaut, la durée de vie du cookie est égale à la durée de vie du navigateur.
bool session_start() démarre une session; doit être réalisé en tout début de script avant tout en-tête!
bool session_register("x", "y", ... ) démarre 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é sauvée;
bool session_unregister("x") supprime la variable de session x;
bool session_destroy() supprime toutes les données de la session; le cookie de session sera supprimé dès la
prochaine page.
string serialize(mixed) retourne une chaîne composée des différents champs de l'objet ou du tableau;
mixed unserialize(string) retourne la valeur de la variable d'origine;

19. Les Cookies


Les cookies sont stockés du côté client par le navigateur et contiennent des variables. Quand celui-ci envoie
une requête à une URI d'un domaine et d'un chemin dont il possède un cookie, toutes les variables du cookie
sont envoyées au serveur. Un cookie a une durée de vie (expire) par défaut égale à la durée de vie de la
session.
int setcookie("x","Hello!",int expire, string path, string domain, int secure) doit être exécutée 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 requête;
$_COOKIE["x"] accès à 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 exécutée avant toute chose et permet de nombreuses choses dont: la
redirection vers une autre URL en plaçant des éléments dans l'entête du fichier HTML:
header("Location: http://www.php.net/"); /* Redirige le client */
exit(); /* rien après */
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'accès aux données.
$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");

GHOUALI SAMIR, UNIV MASCARA


10
$q->setFetchMode(PDO::FETCH_ASSOC);
while($r = $q->fetch())
{ echo $r['No'].' '.$r['nom'].' '.$r['prenom'].'<br>'; }
$lecteurs = $q->fetchAll(PDO::FETCH_ASSOC);
foreach($lecteurs as $r)
{ echo $r['No'].' '.$r['nom'].' '.$r['prenom'].'<br>'; }
$q->columnCount(); $q->rowCount();

Exemple:
<?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>Prénom</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)");
}
// Vérifier 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");
} // Vérifier si l'upload est valide
if (!is_uploaded_file($_FILES['data']['tmp_name'])) {
die("ERROR: Fichier non valide");
} // Défini le nom et le répertoire de destination
$uploadDir = "./uploads/";
// copie du fichier dans le répertoire
move_uploaded_file($_FILES['data']['tmp_name'], $uploadDir .
$_FILES['data']['name']) or die("Impossible de copier le fichier");
// Affiche un message de succès
echo "Fichier transféré avec succès dans:" . $uploadDir .$_FILES['data']['name'];
}
?>
</body></html>

GHOUALI SAMIR, UNIV MASCARA


11
Liste des variables du serveur
Ces variables sont référencées dans le tableau superglobal $_SERVER. $_SERVER['PHP_SELF']
Nom Description
Tableau des arguments passés au script dans le cas où celui-ci est lancé en
argv
ligne de commande depuis un Shell.
argc Nombre de paramètres passés au script (dans le cas ligne de commande).
DOCUMENT_ROOT Racine à partir de laquelle est exécuté le script.
PHP_SELF Nom du fichier du script en cours par rapport au DOCUMENT_ROOT.
Méthode de la requête invoquée pour accéder à la page. Avec le protocole
REQUEST_METHOD
HTTP/1.0, les méthodes possibles sont : GET, POST, HEAD, PUT.
REQUEST_URI URI (Uniform Resource Identifier) qui a été fournie pour accéder à la page.
Question posée au script (si elle existe). Ce sont les paramètres passés au
QUERY_STRING
script.
SCRIPT_FILENAME Chemin absolu jusqu'au script courant.
Nom du script courant. Utilisé dans le champ method des formulaires pour que
SCRIPT_NAME
le script s'appelle lui-même.
Chemin de la page dans le système de fichier réel du serveur. Est différent du
PATH_TRANSLATED
chemin virtuel traduit pour l'extérieur.
GATEWAY_INTERFACE Numéro de révision de l'interface CGI du serveur.
Nom du serveur qui exécute le script. Ce peut-être un hôte virtuel. Tel que défini
SERVER_NAME
par la directive VIRTUAL_HOST d'Apache.
Chaîne de caractères d'identification du serveur. Contenu du champ Server de
SERVER_SOFTWARE
l'entête HTTP. Par exemple : Apache/1.3.9 (Unix) Debian/GNU.
Nom et révision du protocole utilisé pour transférer au client la page issue du
SERVER_PROTOCOL
script. En général : HTTP/1.0 ou HTTP/1.1.
Identifiant de l'administrateur du serveur tel que défini par la directive
SERVER_ADMIN
SERVER_ADMIN d'Apache.
SERVER_PORT Numéro de port utilisé sur le serveur. Traditionnellement, vaut 80.
Chaîne de caractères contenant le numéro de version du serveur ainsi que le
SERVER_SIGNATURE
nom d'hôte virtuel.
Contenu du champ Accept de l'entête HTTP. C'est la liste des types MIME. Par
HTTP_ACCEPT
exemple : text/html, application/xml, image/gif.
Contenu du champ Accept-Charset de l'entête HTTP. C'est le type d'encodage
HTTP_ACCEPT_CHARSET
des caractères utilisé.
Contenu du champ Accept-Encoding de l'entête HTTP. C'est le type
HTTP_ACCEPT_ENCODING d'encodage des données utilisé. C'est en général de la compression. Par
exemple : gzip.
Contenu du champ Accept-Language de l'entête HTTP. C'est la langue utilisée.
HTTP_ACCEPT_LANGUAGE
Par exemple : fr.
Contenu du champ Accept-Connection de l'entête HTTP. C'est le type de la
HTTP_CONNECTION connexion établie entre le client et le serveur (persistante ou non), par exemple :
Keep-Alive ou close.
HTTP_HOST Contenu du champ Host de l'entête HTTP en cas de virtual hosting.
HTTP_REFERER Adresse de la page qui a conduit le client à la page courante.
Contenu du champ User-Agent de l'entête HTTP. C'est le nom et la version du
navigateur utilisé par le client pour consulter la page en cours. Ainsi que le
HTTP_USER_AGENT
système d'exploitation et autres informations. Par exemple : Mozilla/5.0
Galeon/1.0.2 (X11;Linux i686; U;) Gecko/20011224.
REMOTE_ADDR Adresse IP du client qui demande la page.
Le numéro de port utilisé sur la machine cliente pour établir la communication
REMOTE_PORT
avec le serveur.

GHOUALI SAMIR, UNIV MASCARA


12
Liste des fonctions PHP pour MySQL
$nb=mysql_affected_rows($res) — Retourne le nombre de lignes affectées
mysql_client_encoding — Retourne le nom du jeu de caractères utilisé
mysql_close($co) — Ferme la connexion MySQL
$co=mysql_connect($host, $user, $pass) — connexion à un serveur
mysql_create_db($b) — Crée une base de données MySQL
mysql_data_seek — Déplace le pointeur interne de résultat MySQL
mysql_db_name — Lit les noms des bases de données
$res=mysql_db_query($sql) — Envoie une requête MySQL au serveur
mysql_drop_db($base) — Efface une base de données MySQL
mysql_errno() — Retourne le numéro d'erreur de la dernière commande
mysql_error() — Retourne le texte associé avec l'erreur générée
mysql_escape_string — Protège les caractères spéciaux SQL
$line=mysql_fetch_array($res) — Retourne une ligne de résultat MySQL sous la forme d'un tableau
associatif, d'un tableau indexé, ou les deux
$line=mysql_fetch_assoc($res) — Lit une ligne de résultat MySQL dans un tableau associatif
mysql_fetch_field — Retourne les données enregistrées dans une colonne MySQL sous forme d'objet
mysql_fetch_lengths — Retourne la taille de chaque colonne d'une ligne de résultat MySQL
mysql_fetch_object — Retourne une ligne de résultat sous forme d'objet
$tab=mysql_fetch_row($res) — Retourne une ligne de résultat dans un tableau
mysql_field_flags — Retourne des détails sur une colonne MySQL
mysql_field_len — Retourne la taille d'un champ de résultat MySQL
mysql_field_name — Retourne le nom d'une colonne dans un résultat MySQL
mysql_field_seek — Déplace le pointeur de résultat 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 spécifique
mysql_free_result($res) — Libère le résultat de la mémoire
mysql_get_client_info — Lit les informations sur le client MySQL
mysql_get_host_info — Lit les informations sur l'hôte 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 dernière requête MySQL
mysql_insert_id — Retourne l'identifiant généré par la dernière requête
mysql_list_dbs — Liste les bases de données 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 données MySQL
mysql_num_fields — Retourne le nombre de champs d'un résultat MySQL
mysql_num_rows($res) — Retourne le nombre de lignes d'un résultat
mysql_pconnect($host, $user, $pass) — Ouvre une connexion persistante à un serveur MySQL
mysql_ping — Vérifie la connexion au serveur MySQL et s'y reconnecte
mysql_query($sql) — Envoie une requête à un serveur MySQL
mysql_real_escape_string — Protège les caractères spéciaux de SQL
mysql_result — Retourne un champ d'un résultat MySQL
mysql_select_db($base) — Sélectionne une base de données MySQL
mysql_set_charset — Définit le jeu de caractères 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 — Exécute une requête SQL sans mobiliser les résultats MySQL

GHOUALI SAMIR, UNIV MASCARA


13
PHP: Les fonctions mathématiques
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 résultat 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 résultat 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. Résultat en radians: atan(5); affiche 0.46364760900081.
double atan2(double Y, double X ) Arc tangente du rapport Y/X. Le résultat 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 l’exponentielle de X – 1, soit ex –1.
double floor (double X) Retourne la partie entière de X, soit l’entier immédiatement inférieur à 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 népérien (de base e) du nombre X.
double log10(double X) Logarithme décimal (de base 10) de X.
double log1p(double X) Logarithme népérien 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.
double sin (double X) Sinus de X exprimé en radians.
double sinh (double X) Sinus hyperbolique de X.
double sqrt(double X) Racine carrée 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 l’entier immédiatement supérieur à X.
double round(double X, integer N) Arrondit X avec N décimales.
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 l’hypoténuse d’un triangle rectangle dont
les côtés de l’angle droit sont X et Y, donc la valeur de la racine carrée de (X2 + Y2 ).
Conversions:
double rad2deg (double X) Convertit X de radians en degrés.
string base_convert(string N, integer B1, integer B2) Convertit le nombre N contenu dans une chaîne de la
base B1 dans la base B2.
integer bindec(string X) Convertit un nombre binaire X contenu dans une chaîne 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 hexadécimal.
string decoct(integer X) Convertit X de la base 10 en octal.
double deg2rad (double X) Convertit X de degrés en radians.
integer hexdec(string CH) Convertit la chaîne hexadécimale CH en décimal.
integer octdec (string CH) Convertit un nombre octal contenu dans la chaîne CH en base 10.
boolean is_finite(double X) Retourne TRUE si la valeur X est finie, c’est-à-dire dans l’intervalle des valeurs
admises pour un double, et FALSE dans le cas contraire.
boolean is_infinite( double X) Retourne TRUE si la valeur X est supérieure à la valeur maximale admise pour
un double, et FALSE dans le cas contraire.
boolean is_nan(double X) Retourne TRUE si la valeur X n’est pas un nombre, et FALSE dans le cas contraire.
Nombres aléatoires:
void srand(integer N) Initialise le générateur de nombres aléatoires de la fonction rand().
void mt_srand( integer N) Initialise le générateur de nombres aléatoires pour la fonction mt_rand().
integer getrandmax(void) Indique la valeur maximale retournée 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) Génère un résultat compris entre Min et Max ou entre 0 et la
constante RAND_MAX si vous omettez les paramètres.
integer rand(integer Min, integer Max) Retourne un nombre aléatoire $r tel que Min <= $r <= Max.
double lcg_value (void) Retourne un nombre aléatoire compris entre 0 et 1.

GHOUALI SAMIR, UNIV MASCARA


14

Vous aimerez peut-être aussi

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy