Vous êtes sur la page 1sur 7

Aide mémoire PHP

Michel Meynard
9 janvier 2006

1 Introduction debug("ligne ". __LINE__ ." x = ".$x); // appel

 PHP : langage de script incorporé dans du HTML, fonc-


tionnant coté serveur, soit comme CGI, soit comme un
3.2 Programmation modulaire
module (+rapide).
require("fic.php") ;
Possibilité d'inclusion de chier par
 Langage interprété, non pré-compil, donc référence avant
ou include("fic.php") ;. Préférer include qui est condi-
impossible (sauf PHP4)
tionné par l'exécution de la ligne le contenant. En PHP4,
 Expressions régulières riches, conversions automatiques
include_once() et require_once() permetent d'éviter les
 Déclarations optionnelles et non typées
redénitions. Une extension PHP est une bibliothèque dy-
 Fin de ligne ( ;) obligatoires
namique (php3_xx.dll ou php3_xx.so) pouvant être char-
 Fonctions natives pour accéder aux SGBD (MySQL,
gée à la volée ou incorporée à la compilation de php.
Oracle, PostgresSQL, ODBC, ...). Connexions persis-
Par exemple : dl('php3_gd.so') or die('impossible
tantes ( A FERMER) ; de charger gd !') ; // gd est une extension de gestion
 Variables préxées par le symbole : $
des images gif, png.
 Syntaxe fonctionnelle : fopen("/home/toto/file.txt",
"r") ;
 PHP est un logiciel libre
 Possibilité de télécharger des chiers depuis le client
4 Types, constantes et variables
 Extensions (librairies dynamiques) : gd (graphique), ana- Les types sont : boolean, integer, oat (ottant), string, ar-
lyseur XML, ... ray, object, resource, NULL. Coercition de type implicite
 Gestion des id de sessions par cookie ou par URL longue ou explicite par (type) exp. Pas de déclaration. Les va-
(PHP4) riables sont dénies dans un contexte d'exécution, fonction
(locales) ou script (globales). Les variables globales (script)

1.1 Exemple : chier hello.php ne sont accessibles dans une fonction que si on les déclare
globales dans la fonction : global $i ;. Les variables sta-
<html><head><title>Example</title></head><body> tiques sont des variables locales à une fonction mais qui sont
<?php echo "Hello World !"; ?> initialisées une seule fois lors du premier appel à la fonction.
</body></html> Elles doivent être déclarées : static $compte=0 ;. Les va-
riables superglobales sont des variables globales qui sont

2 Documentation accessibles dans les fonctions sans qu'on ait besoin de les
déclarer global.
2.1 Sites
téléchargement http ://www.php.net/ 4.1 Variables prédénies
Doc. en Français http://dev.nexen.net/docs/php/ Les variables prédénies dépendent de la conguration de

annotee/manuel_toc.php php : pour les connaître, le plus simple est de faire appel à

FAQ http ://www.php.net/FAQ.php phpinfo().


aide sur PHP http ://www.phphelp.com/ $PHP_SELF nom du chier php en cours d'exécution ;
également accessible via $_SERVER["PHP_SELF"].
cours en Français http://www.linux-france.org/
article/devl/php3/tut/php3.tut.html Un certain nombre de variables prédénies sont des ta-
bleaux superglobaux :

$GLOBALS tableau associatif des variables globales ;


3 Développement
$_ENV variables d'environnement du serveur ;
3.1 Généralités $_GET variables obtenues par la méthode HTTP GET ;
Commentaires par : /* ... */ ou // ... ou # .... Edi- $_POST variables obtenues par la méthode HTTP
tion du source toto.php puis interprétation par le serveur POST ;
http. Exécution sur la ligne de commande du serveur : php
$_COOKIE variables de cookie envoyées par le client au
-q test.php. Débogage manuel, par exemple : serveur ;

$DEBUG=1; // débogage activé dans le script $_SERVER tableau associatif des variables du serveur ;
function debug($msg){if ($GLOBALS['DEBUG']) par exemple, $_SERVER["REQUEST_METHOD"] indique
echo $msg, <br>"\n";} la méthode utilisée (GET ou POST OU ...) ;

1
$_FILES variables utilisées lors du chargement (upload) ajout $tvide[]="case 0" ;$tvide[]="case 1" ;
de chiers ;
raz reset($tab) ;
$_REQUEST variables de tous les tableaux précédents
n de tableau end($tab) : va pointer sur le dernier élé-
avec la priorité dénie par la directive de conguration
ment
variables_order qui vaut habituellement EGPCS ;
parcours array each($tab) : retourne une asso à 4 élé-
ments ou faux si n de tableau : $r[0] = $r["key"] =
4.2 Variables de formulaire clé courante ; $r[1] = $r["value"] = valeur courante.

Les variables de formulaire HTML sont accessibles via les Exemple : reset($tab) ; while (list ($c, $v) =
tableaux superglobaux $_GET ou $_POST. Par exemple : each ($tab)){echo "$c => $v" ;}
accès $tab[6]=$asso["toto"] ;
<form name='F' method='get' action='
<?php echo $_SERVER['PHP_SELF']; ?>'> valeur courante mixed current($tab) : faux si vide ou
<input type='text' name='nom'> en n ou valeur FALSE.

<select multiple name="biere[]"> valeur et déplacement mixed next($tab) ; mixed


<option value="blonde">blonde</option> prev($tab) ; retourne la valeur courant puis dé-
<option value="brune">brune</option> lacement, faux si place vide ou n ou début de
</select> tableau
<input type='submit' name='bouton' value='ok'/> taille int count($tab) ; ou sizeof()
</form>
<?php print_r($_GET['biere']); ?> clé courante mixed key($tab)
existence bool in_array ("toto",$tab)
Après saisie et validation, l'url suivante est requise :
2 dimensions $et=array(array(0,0),array(0,1)) ;
essai.php?nom=toto&biere[]=blonde& autres fons des quantités ! intersection
biere[]=brune&bouton=ok (array_intersect), fusion (array_merge), dié-
rence (array_diff) ...
L'achage suivant aura lieu :

Array ( [0] => blonde [1] => brune )


5 Expressions
4.3 Littéraux Quasiment tout est une expression en PHP.

chaîne '$a et `ls`' sans interprètation


chaîne "$a et `ls`" avec interprètation 5.1 Opérateurs
échappement \$,\\,\",\t,\n,\r sans interprètation Quasiment utilisés que pour les nombres sauf la concaté-
numérique 123, 123.456, 2e10, \777,\xFF nation de chaîne (.) et l'aectation (chaînes et tableaux).

contexte booléen  ou 0 ou "0" représentent FALSE ; $$s valeur de la variable dont le nom est dans s
conversion contextuelle automatique chaîne-numérique ++, - - inc et déc : ++$x ;$y- - ;
$i==$j ? 1 : 2 expression conditionnelle
4.4 Constantes arithmét. +,-,*,/,%
Macro dénie grâce à la fonction define("K",10) ;echo aectation =,.=,+=,-=,*=,/=,%=
K; binaires &,|,~,<<,>>
Constantes prédénies :
logiques &&,||,!
__FILE__ nom du chier exécuté
logique peu prioritaire and,or
__LINE__ numéro de ligne courante
comparaison <,<=,==,!=,>=,>
TRUE valeur TRUE (diérent de 0)
FALSE valeur FALSE : 0 ou "" ou "0" ou tab vide ou
commande syst. `ls`
objet vide concaténation $s . "toto"
L'aect. de chaîne longue est possible (PHP4) :

4.5 Tableaux $s=<<<FIN


Que des tableaux associatifs avec une clé entière (0..n-1) bla bla..
par défaut. Les tableaux ont un pointeur courant automa- etc
tiquement incrémenté lors d'une aectation. FIN; // en début de ligne et avec un ``;''
dénition $tab = array (1, 2, 6) ; $tvide =
array() ; 6 Structures de contrôle
dénition $asso = array ("toto" => 1, "titi" =>
8) ; alternative if (expr) {instons1} else {instons2}
aectation multiple list($i,$j)=($j,$i) ou choix if (e1) {ins1} elseif (e2) {ins2} else
list($i,$j)=$tab {ins3}

2
choix PHP4 switch ($i) {case e0 : instons0 ; fclose($desc) fermeture
break ; case e1 : instons1 ; break ; default : bool feof($desc) test la n
instons ; } $ligne=fgets($desc, 4096) lecture de la ligne (maxi
répétitives while (e) {instons}, do { instons } 4096 octets)
while (e), for (exp-init ; exp-cond ; exp-itér) $ligne=readline("un entier SVP") ; ne fonctionne pas
{ instons }, ruptures possibles : break ;, continue ; sur le Web !

parcours de tableau foreach($tab as $case) { $car=fgetc($desc) ; lecture d'un car ;


instons utilisant $case} fputs($desc,"chaine") ; écriture d'une chaîne ;
parcours de tableau foreach($tab as $cle =>
$val) { instons utilisant $cle ou $val } 8.3 Types et variables
boolean isset($i) vrai si i est déni
7 Fonctions unset($i) supprime la dénition
string gettype($i) retourne le type (string si non déni)
Un nombre impressionnant de fonctions prédénies ! Pas-
sage des paramètres scalaires ou tableaux par valeur (PHP4
void settype($i,"integer") coercition
par référence si précédé de & dans l'appel et la déclaration). int is_int($i) is_double(), is_string(), is_array()
Les variables globales ne sont pas accessibles directement. var_dump(exp1, exp2, ...) ache récursivement la va-
Il faut utiliser la notation : $GLOBALS['glob']. $GLOBALS leur et le type des expressions ;
est l'asso. des variables globales. On peut aussi déclarer les
variables globales dans la fon par global $i,$j ; Les ar- 8.4 Tableaux
guments peuvent avoir une valeur par défaut (optionnels)
et être en nombre variable. Les valeurs de retour peuvent
int array_push($pile,$elem) empile à la n et ret la
taille
être scalaire ou tableaux. On peut supprimer l'achage des
erreurs produites par l'appel à une fonction f par : @f($i) mixed array_pop($pile) dépile le sommet
int array_unshift($fo,$prem) ajoute au début
7.1 Fonctions utilisateur mixed array_shift($fo) retire le premier
array array_values($asso) resp. array_keys
dénition function f($arg0="toto",
$arg1){instons ; return array(1, 4) ;} void shue($tab) mélange les valeurs
pointeur $pf='f' ;list($i,$j)=$pf(1,2) ; 8.5 Tris de tableau
void sort($tab)
8 Fonctions prédénies lon les valeurs
tri croissant (décroissant avec rsort) se-

8.1 Divers void ksort($asso) tri croissant selon les clés (krsort)
void asort($asso) tri croissant selon les valeurs (arsort)
echo exp1, exp2, ... ; ache les expressions ; void usort($tab, moncmp) tri croissant selon la fon de
print(exp1) ache une expression ; cmp dénie par l'utilisateur

print_r($var) ache la variable scalaire ou tableau ou uksort, uasort tri utilisateur pour les asso

objet récursivement ;

void exit() termine le script 8.6 Chaînes


$l=system("ls") ; exécute une commande De très nombreuse fonctions dont voici les principales. $s
void die ("message ") ache le message puis termine est supposée être une chaîne.

void eval("instons PHP") il faut échapper les carac- int strlen($s) taille
tères spéciaux : eval('$' . f($i) . '= "toto";'; int strcmp($s1,$s2) comparaison -1, 0, 1
Ne pas oublier le  ; string substr($s, 2, 10) sous-chaîne à partir de 2, de
taille 10

8.2 Entrées/Sorties : système de chier string strstr($s,$facteur) ret tout s à partir de la 1ère
occurrence de facteur
De nombreuses fonctions de gestion du système de chier.
array split(' ;',$s,10) ret un tableau des 10 (maxi) pre-
echo string, string ... ; ache plusieurs arguments miers champs séparés par des ;
chaînes string join(' ;',$tab) ret la chaîne constituée des valeurs

print(string) ; ache un arg. (classé dans les fons séparées par ;

chaînes) string trim($s) retire les blancs de début et de n de

$desc=fopen("c.txt","r+") ; ouverture en lecture et chaîne. Blancs : \n,\r,\t,\v,\0,espace


écriture. Modes (r, w (création ou raz), w+ , a (ap- string chop($s) supprime les blancs de n de chaîne
pend), a+). string ltrim ($s) supprime les blancs de début
$d=fopen("c : \\data\\info.txt","r"); Windows string strtolower($s) met en minuscules (resp.
$d=fopen("ftp ://user :password@example.com/", strtoupper)
"w") ; ouverture de session ftp string nl2br($s) remplace les \n par des <br>

3
8.7 Expressions régulières int mysql_num_rows($res) ret nb de lignes
correspondance int ereg( array mysql_fetch_assoc($res) ret une ligne sous

'^[^.]*\.(.*)$',$s,$tabr) met dans tabr la forme d'asso. indicé par les noms de colonnes

partie à droite d'un point dans s à partir de l'indice 1. array mysql_fetch_row($res) ret une ligne sous forme
Retourne TRUE si trouvé au moins une. de tableau indicé de 0 à mysql_num_elds - 1

remplacement string ereg_replace("([a-z]+)", int mysql_aected_rows($co) ret le nombre de lignes


"[\\1]",$s); encadre les mots minuscules de s aectées par la dernière requête DELETE, INSERT,
REPLACE, UPDATE
9 Classes int mysql_db_query ('base2','select ...',$co)
sélectionne une bd et pose une requête

Collection (tableau) de variables et de fonctions ; héritage string mysql_error($co) ret la chaîne indiquant l'er-
simple possible par extends ; tout est public ; l'aectation reur MySQL
se fait par recopie ; pas de surcharge (utiliser un paramètre
int mysql_close($co) ferme la connexion
(INDISPENSABLE)
tableau).

class Point{var $x,$y;


function Point($px=0,$py=0){ //constr 10.2 Un exemple
$this->x=$px;$this->y=$py;
} $co=mysql_connect('sql.free.fr','monnom',
function getxy(){ 'monpasswd') or die('Connexion au serveur
return array($this->x, $this->y); impossible !');
} mysql_select_db('mabase',$co) or die("Base de
} données inaccessible !");
$p1=&new Point(); // (0,0) $r=mysql_query('select nom, prenom from matable',
$p2=&new Point(3,4); $co) or die('Requête impossible');
list($a,$b)=$p2->getxy(); $nc=mysql_num_fields($r); $nl=mysql_num_rows($r);
while ($ligne=mysql_fetch_assoc($r)){
echo "NOM : ",$ligne['nom'],"; PRENOM : ",
10 Bases de données $ligne['prenom'],"<BR>\n";
}
Les fonctions PHP d'accès aux bd sont nombreuses. Il existe mysql_close($co);
des fonctions spécialisées pour des sgbds tels que MySQL ou

11 phpMyAdmin
Oracle ou PostgreSQL, mais aussi des fonctions ODBC qui
sont plus indépendantes du sgbd cible. Enn, il existe une
librairie PHPLib (http ://phplib.netuse.de/) contenant
phpMyAdmin est un outil d'administration d'une BD
une classe DB_Sql générique pour les BD (comme DBI en
MySQL écrit en PHP. Cet outil est accessible via le
Perl).
web et permet donc d'administrer à distance une BD.

10.1 MySQL
On peut : créer, supprimer, modier (alter) des tables,
interroger, ajouter, supprimer, modier des lignes,

Fonctions spéciques à MySQL : importer des chiers textes contenant les données ...

int mysql_connect('hostname','username','password') Le site de référence où l'on peut tester en direct est :

or die('Connexion au serveur impossible !') ; http://phpwizard.net/projects/phpMyAdmin/index.html.


Site de Free : http://phpmyadmin.free.fr/phpMyAdmin/.
ret un descripteur de connexion $co. La connexion se
termine en n de script.

int mysql_pconnect('hostname','username','password') 12 Réseau


connexion persistante : si une connexion persist.
existe déjà avec le même nom et passwd, la réutilise ; socket $sock=fsockopen($hostname,$port,$timeout)
ne ferme pas la connexion en n de script. $co ouvre une socket ; il ne reste plus qu'à lire dedans ...

int mysql_select_db('mabase',$co) or die('Base et la fermer !

de données inaccessible !') ; ret vrai si sélec-


tionné (use)
13 Images (gd)
int mysql_query('select|insert| ...',$co) or
die('Requête impossible') ; retourne faux si Nécessite d'avoir compilé avec le module GD !
impossible ; retourne un entier résultat ($res) si
requête select ; retour inutile si requête action <?
header("Content-type: image/png");
int mysql_num_elds($res) ret nb de colonnes du ré-
$larg=100;$haut=200;
sultat d'un select
$img=imagecreate($larg,$haut);
string mysql_eld_name($res,$i) ret le nom de la co- $red=imagecolorallocate($img,255,0,0);
lonne d'indice i $vert=imagecolorallocate($img,0,255,0);
string mysql_eld_type($res,$i) ret le type. imagefilledrectangle($img,0,0,$larg-1,$haut/2,$red);
(mysql_field_len, flags existent également) imageline($img,0,0,$larg-1,$haut-1,$vert);

4
imagepng($img);//stdout AuthType Basic
imagedestroy($im); AuthUserFile "/nfs1/.../AuthApache/.htpasswd"
?> AuthName "Le Domaine Privé"
<Limit GET POST>
require valid-user
14 Caractères spéciaux </Limit>
 Certains caractères (anti-slash, guillemet et apos- Le chier .htpasswd contient la liste des utilisateurs et
trophe) saisis dans des champ de formulaires leurs mots de passe cryptés. Il est obtenu grâce à l'utili-
(<input name="champ">) sont automatiquement tairehtpasswd fourni par Apache. Par exemple : htpasswd
échappés par un anti-slash par PHP (magic_quotes). -c .htpasswd un ; crèe un chier avec l'utilisateur un.
La variable Php correspondante global $champ; doit Lors de tout accès à un chier descendant de AuthApache,
donc être traitée par $champ=stripslashes($champ) Apache va envoyer un en-tête au navigateur client qui va
pour supprimer tous les anti-slash générés. acher une fenêtre d'authentication. Par la suite, l'utili-
 Lors de l'achage d'une chaîne contenant des caractères sateur reste authentié pour Le Domaine Privé jusqu'à la
html spéciaux (&"<'>) dans un champ, certains carac- n du navigateur ou si une nouvelle authentication PHP
tères et ceux qui suivent ne sont pas achés et sont per- est lancée.
dus (cela ne sera pas posté). Pour acher proprement une
chaîne contenant ces caractères, il faut au préalable la
traiter avec htmlspecialchars($champ,ENT_QUOTES)). 16.2 Authentication PHP
 Par conséquent, pour un champ interactif, on écrira : PHP doit être un module d'Apache. On utilise alors la fonc-
echo '<input name="champ" value="'.htmlspecial tion header pour demander une authentication ("WWW-
chars(stripslashes($champ),ENT_QUOTES)).'">'; authenticate") au client, générant ainsi l'apparition d'une
 Lors de l'envoi d'une requête à un SGBD, il faut parfois fenêtre de demande d'utilisateur et de mot de passe. Une
échapper les caractères spéciaux tels que : ',\,",NULL. fois que les champs ont été remplis, l'URL sera de nouveau
La fonction addslashes($chaine) eectue ce travail. $_SERVER['PHP_AUTH_USER'],
appelée, avec les variables
 De même en JavaScript, la fonction addslashes() per- $_SERVER['PHP_AUTH_PW'] et
metra d'échapper du code. $_SERVER['PHP_AUTH_TYPE'] contenant respectivement le
nom d'utilisateur, le mot de passe et le type d'authentica-

15 Administration PHP tion. Actuellement, seule l'authentication de type "Basic"


est supportée. Si l'authentication est réalisée via Apache
(.htaccess), la variable $_SERVER['REMOTE_USER'] est
Pour visualiser la conguration PHP, il sut d'appeler la
fonction phpinfo() pour voir :
égale à $_SERVER['PHP_AUTH_USER'].
Exemple d'authentication HTTP par PHP :
 la version de php ;
 la localisation du chier de conguration de php :
<?php
php.ini ; if (!isset($_SERVER['PHP_AUTH_USER']) || !verifi
 les librairies incluses et leur conguration (mysql, gd, ...).
erAuth())
Le chier php.ini dénit notamment des variables fonda-
header("WWW-Authenticate: Basic realm=\"Le Dom
mentales :
aine Privé\"");
register_globals=On si on alors les variables d'En- header("HTTP/1.0 401 Unauthorized");
vironnement, Get, Post, Cookie, Serveur sont glo- echo "Texte à envoyer si le client annule\n";
bales ; si o alors les variables sont accessibles via exit;
$_POST[], ... (Sécurité +) ; } else {
variables_order="EGPCS" ordre de résolution des echo "Bonjour ",$_SERVER['PHP_AUTH_USER'];
conits de noms de variables Env, GET, POST, CO- // suite de la page privée
OKIE, Serveur ; }
magic_quotes_gpc=On permet d'anti-slasher les ca-
?>
ractères anti-slash, guillemet et apostrophe dans les
La fonction booléenne verifierAuth() utilisera tout
variables GPC.
moyen nécessaire à la vérication du nom et du mot de
passe (Base de données, ...). Remarquons que les variables

16 Authentication HTTP $_SERVER['PHP_AUTH_...'] sont utilisables même si l'au-


thentication n'a pas été eectuée par le module PHP.

La procédure d'authentication HTTP est associée à un Les variables d'authentication PHP sont valables
nom de domaine (realm ou AuthName) et à un réper- pour tous les chiers descendants du répertoire. Par
toire. Elle peut être déclenchée : contre, tout chier html ou php ne testant pas l'authenti-

 soit par Apache, indépendamment de PHP ; cation est accessible, contrairement à l'authentication par

 soit en utilisant PHP. .htaccess (Apache) qui sécurise tout le répertoire.

16.1 Authentication Apache 16.3 Désauthentication PHP


L'authentication est valable pour toute une arbores- Le navigateur écrase le cache d'authentication client d'un
cence. Un chier .htaccess spécie les règles d'authenti- domaine quand il reçoit une nouvelle demande d'authenti-
cation valables pour ce répertoire et tous ses descendants. cation. Cela permet de déconnecter un utilisateur, pour

5
le forcer à entrer un nouveau nom et son mot de passe. Si 18 Session
l'utilisateur annule l'authentication, il est alors désauthen-
tié ! Penser à recharger la page. Certains programmeurs HTTP n'étant pas un protocole orienté connexion, chaque

changent dynamiquement le nom de domaine pour donner nouvelle requête semble être la première. Depuis PHP4,

un délai d'expiration, ou alors, fournissent un bouton de Les sessions PHP permettent de conserver de l'informa-
réauthentication. tion 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
16.4 Autres authentications variables de type tableau, elles doivent être sérialisées. La
communication des identiants de sessions est réalisée par
L'authentication HTTP est de moins utilisée au prot
cookie ou par URL de manière transparente pour le pro-
d'un formulaire d'authentication HTML et de la sauve-
grammeur. Par défaut, la durée de vie du cookie est égale
garde des informations d'authentication dans un cookie
à la durée de vie du navigateur.
ou une session. En eet, le fonctionnement des diérents
navigateurs varie en ce qui concerne le cache d'authenti- bool session_start() démarre une session ; doit être réa-
cation. lisé en tout début de script avant tout en-tête !

bool session_register("x", "y", ... ) démarre une ses-

17 Téléchargement sion si pas encore fait et y enregistre les variables $x


et $y ;

 du site web vers le client : download ou déchargement ;


string session_id() retourne l'identiant de session
 du client vers le site web : upload ou chargement ; $_SESSION["z" ]="contenu" ; ajoute une variable de
session ;

17.1 Déchargement echo $_SESSION["x" ] ; ache le contenu d'une va-


riable de session ;
Réaliser un lien référençant le chier à décharger, par
bool session_is_registered("mavar") teste si $mavar
exemple : <a href="Public/toto.ps">Cliquer ici</a>. Si
a été sauvé dans la session ;
le type du chier est achable par le navigateur, il sera
aché (donc déchargé), sinon il sera proposé à l'utilisateur
bool session_unregister("x") supprime la variable de
session x ;
soit de sauver le chier, soit de lancer l'application associée.
Remarquons que tout lien peut être enregistré en utilisant bool session_destroy() supprime toutes les données de

le bouton droit de la souris sur le lien. la session ; le cookie de session sera supprimé dès la
prochaine page.

17.2 Chargement string serialize(mixed) retourne une chaîne composée


des diérents champs de l'objet ou du tableau ;

Réaliser un formulaire de chargement envoyant une requête mixed unserialize(string) retourne la valeur de la va-
POST. L'action eectuée (script) après soumission doit vé- riable d'origine ;
rier que le chier chargé est du bon type et de la bonne
taille puis l'acher depuis la zone temporaire (tmp/) ou il
est chargé. Le chier temporaire sera automatiquement 19 Cookies
eacé de la zone à la n du script, s'il n'a pas été déplacé
Les cookies sont stockées du côté client par le navigateur et
ou renommé. Par exemple, le formulaire sera :
contiennent des variables. Quand celui-ci envoie une requête

<FORM ENCTYPE="multipart/form-data" ACTION="traite à une URI d'un domaine et d'un chemin dont il possède

ment.php" METHOD="POST"> un cookie, toutes les variables du cookie sont envoyées au

<INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" value= serveur. Un cookie a une durée de vie (expire) par défaut

"1000"> égale à la durée de vie de la session.

Envoyez ce fichier : <INPUT NAME="fichier" TYPE= int setcookie("x","Hello !",int expire, string path,
"file" SIZE=15> string domain, int secure) doit être exécutée
<INPUT TYPE="submit" VALUE="Envoyer le fichier"> avant toute chose et permet de positionner la variable
</FORM> x avec la valeur "Hello !" ; attention le cookie ne sera
renvoyé au serveur qu'à la prochaine requête ;
Dans le script traitement.php on a accès à diérentes va-
riables (diérent selon les versions de PHP) : $_COOKIE["x" ] accès à une variable de cookie ;
 $_FILES['fichier']['name'] le nom du chier original setcookie("x","",time()-1000) eace la variable x du
chez le client ; cookie ;
 $_FILES['fichier']['type'] le type mime du chier setcookie("y",$value,time()+3600) ; expire dans une
"image/gif, text/plain, ..." ; heure ;
 $_FILES['fichier']['size'] la taile du chier chargé ;
 $_FILES['fichier']['tmp_name'] le nom du chier
temporaire sur le serveur ; 20 Redirection
 $_FILES['fichier']['error'] le code d'erreur (PHP
4.2.0). La fonction php header doit être exécutée avant toute chose
Remarquons que tous les navigateurs ne vérient pas le et permet de nombreuses choses dont :

MAX_FILE_SIZE. la redirection vers une autre URL :

6
header("Location: http://www.php.net/");
/* Redirige le client vers le site PHP */
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 maj header("Last-Modied : " . gmdate("D,


d M 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 chier header("Content-Disposition : attach-
ment ; lename=toto.pdf") ;