Les variables superglobales
- Elles sont écrites en majuscules et commencent toutes par un underscore $_GET et $_POST
- Les superglobales sont toutes des array.
- Ces variables sont automatiquement créées par PHP à chaque fois qu'une page est chargée. Ces variables existent donc sur toutes les pages et sont accessibles partout : au milieu de votre code, au début, dans les fonctions etc...
Envoyer des variables dans l'url GET
$_GET : c'est elle qui vous donne les valeurs des informations indiquées dans l'url.
Un simple lien hypertexte vous permet d'envoyer une variable par l'url, Vous avez besoin de deux pages
Exemple
- envoi.html, qui contient le lien, vous remarquez que nous n'avons pas forcément besoin d'une page en php.
- reception.php
Il faut ajouter un point d'interrogation (?), le nom de la variable, un égal, puis sa valeur
?Nom_variable=valeur
Exemple
get/reception.php?Prenom=titi
Cela va créer une variable un peu particulière : $_GET['Prenom'] qui aura pour valeur titi
Pour envoyer plusieurs variables
Par exemple, si la page appelée est :
http://www.site.com/mapage.php?jour=18&mois=avril&annee=2000
on aura une superglobale $_GET découpée en 3 parties :
- $_GET['jour'] = "18"
- $_GET['mois'] = "avril"
- $_GET['annee'] = "2000"
Et si vous voulez créer d'autres variables, il vous suffit de les séparer par des &.
Exercice
Création de formulaire HTML
Envoyer des données via un formulaire avec POST
$_POST : c'est là-dedans que vous venez récupérer les informations issues d'un formulaire.
Maintenant lorsque nous envoyons des variables via un formulaire, la variable que vous récupérez s'écrira de cette façon
$_POST['Variable']
Exemple:
Je crée un champ de formulaire que je nomme 'Nom'
La variable que vous allez récupérer s'appellera
$_POST['Nom']
Exercices : POST
Les variables de serveur
$_SERVER : ce sont des valeurs utiles que nous donne le serveur.
Pour accéder à ces informations, il faut indiquer ce qu'on demande exactement entre crochets (vu que c'est un array)
$_SERVER['SERVER_NAME']
Le nom relatif du serveur qui exécute le script courant :
<?php echo $_SERVER['SERVER_NAME']; ?>
www.conseil-webmaster.com
$_SERVER['DOCUMENT_ROOT']
Le chemin du répertoire racine du serveur.
<?php echo $_SERVER['DOCUMENT_ROOT']; ?>
$_SERVER['PHP_SELF']
Cest le chemin de la page que vous êtes en train d'exécuter, par rapport à la racine de votre site web.
Exemple : si vous êtes sur la page http://www.monsite.com/scripts/monscript.php, alors $_SERVER['PHP_SELF'] aura pour valeur : /scripts/monscript.php
<?php echo $_SERVER['PHP_SELF']; ?>
/formation/php/02-bases-php.php
$_SERVER['REMOTE_ADDR']
Elle nous donne l'adresse IP du client qui a demandé à voir la page
<?php echo $_SERVER['REMOTE_ADDR']; ?>
$_SERVER['HTTP_USER_AGENT']
Décrit le client de la requête (votre navigateur)
<?php echo $_SERVER'[HTTP_USER_AGENT']; ?>
CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
Liste des variables de SERVEUR
<?php print_r($_SERVER); ?>
Array
(
[DOCUMENT_ROOT] => /home/conseilw/www
[GATEWAY_INTERFACE] => CGI/1.1
[HTTP_ACCEPT] => text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
[HTTP_ACCEPT_ENCODING] => gzip
[HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5
[HTTP_CACHE_CONTROL] => no-cache
[HTTP_CONNECTION] => close
[HTTP_HOST] => www.conseil-webmaster.com
[HTTP_IF_MODIFIED_SINCE] => Mon, 09 Aug 2010 11:27:14 GMT
[HTTP_PRAGMA] => no-cache
[HTTP_USER_AGENT] => CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
[HTTP_X_CC_ID] => ccc03-01
[PATH] => /bin:/usr/bin
[QUERY_STRING] =>
[REDIRECT_STATUS] => 200
[REMOTE_ADDR] => 38.107.179.228
[REMOTE_PORT] => 48115
[REQUEST_METHOD] => GET
[REQUEST_URI] => /formation/php/02-bases-php.php
[SCRIPT_FILENAME] => /home/conseilw/www/formation/php/02-bases-php.php
[SCRIPT_NAME] => /formation/php/02-bases-php.php
[SERVER_ADDR] => 91.121.65.131
[SERVER_ADMIN] => webmaster@conseil-webmaster.com
[SERVER_NAME] => www.conseil-webmaster.com
[SERVER_PORT] => 80
[SERVER_PROTOCOL] => HTTP/1.1
[SERVER_SIGNATURE] =>
Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8o Server at www.conseil-webmaster.com Port 80
[SERVER_SOFTWARE] => Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8o
[PHP_SELF] => /formation/php/02-bases-php.php
[REQUEST_TIME] => 1328425528
[argv] => Array
(
)
[argc] => 0
)
Exercice
- Affchier "L'adresse IP du client est xxx.xxx.xxxx.xxx"
- Afficher "l'adresse de la page actuelle est www.conseil-webmaster.com/formation/php/02-bases-php.php
Exercice
Les sessions
$_SESSION : c'est là-dedans que l'on retrouve les variables de session.
Les sessions en PHP permettent de sauvegarder des variables de page en page pendant une certaine durée prédéfinie par PHP (et modifiable bien entendu).
Chaque utilisateur ayant besoin des sessions se voit attribuer un identifiant unique appelé ID de session.
Cet identifiant est stocké sur le poste de l'internaute sous forme d'un cookie ou transite via l'URL si l'option session.use_trans_sid est à 1 (ou On) dans le fichier php.ini.
Utiliser la méthode du cookie est plus que recommandée : un identifiant de session dans l'URL empêche de retenir l'adresse d'une page simplement par le visiteur néophyte, cela rallonge donc l'adresse de votre page. Cela nuit également au référencement de votre page. En effet, l'identifiant étant unique, lorsque le robot du moteur de recherche scanne votre site, il ne retombera jamais sur la même URL plusieurs fois de suite.
Avant d'utiliser les sessions sur une page, on doit toujours utiliser la fonction session_start() placée avant tout envoi de code HTML, et donc généralement tout en haut de votre page PHP :
session_start()
<?php
session_start();
$_SESSION['prenom'] = 'Jean';
$_SESSION['nom'] = 'Dupont';
$_SESSION['age'] = 24;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Titre de ma page</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p>
Salut <?php echo $_SESSION['prenom']; ?> !<br />
Tu es à l'accueil de mon site </p>
</body>
</html>
Pourquoi session_start() doit-elle être placée de la sorte ? et bien parce que si PHP utilise les cookies pour repérer quel est l'id de session utilisé par l'internaute, il va écrire cet id de session dans un cookie. Or, le protocole HTTP fonctionne de telle sorte que les en-têtes (qui permettent de dire à votre navigateur "crée un cookie ayant tel nom et telle valeur") sont envoyés avant le premier caractère HTML transmis.
Cela veut dire que dès que vous transmettrez un caractère HTML, les en-têtes seront envoyés et vous ne pourrez plus les modifier, vous ne pourrez donc plus écrire le cookie de session.
En général, si vous faites une maladresse de ce style, vous vous retrouverez avec une erreur de headers already sent.
Quelle est la durée de vie d'une session ?
Dès que l'on ferme le navigateur la session est détruite.
Sauf à configurer le fichier php.ini avec session.lifetime qui fixe la durée de vie, en secondes, du cookie envoyé au client. La valeur 0 signifie "jusqu'à ce que le client soit fermé". Par défaut à 0.
Donc si on le laisse à zéro la session dure jusqu'à la fermeture du navigateur, pour laisser les données durant 30 minutes, il faut remplacer 0 par 1800 (= 30 minutes * 60 secondes dans une minute).
session.lifetime = 0
Supprimer une variable de session
La commande session_unregister() supprime une variable dans la session courante. Elle a pour syntaxe :
boolean session_unregister (string name)
Elle retourne TRUE si success, FALSE sinon.
Il est aussi possible de purger toutes les variables de la session avec
session_unset()
Si vous utilisez le tableau superglobal $_SESSION, il suffit alors d'utiliser unset() :
unset($_SESSION["mavariable"])
Fermer une session
1- Fermeture conservatrice :
La commande session_write_close() écrit les valeurs des variables de session sur le serveur et ferme la session.
session_write_close()
2- Fermeture destructive :
Enfin, si vous voulez détruire la session du visiteur, vous pouvez faire un lien "Déconnexion" qui amène vers une page qui fait appel à la fonction session_destroy()
La commande session_destroy() détruit toutes les données enregistrées d'une session.
Cette dernière commande est la plus utilisée car n'impose aucune sauvegarde au serveur. Retourne TRUE en cas de succès, et FALSE sinon.
session_ destroy()
Exercices
Les cookies
$_COOKIE : C'est là-dedans que l'on retrouve les valeurs des cookies enregistrés sur l'ordinateur du visiteur.
Un cookie, c'est un petit fichier que l'on enregistre sur l'ordinateur du visiteur.
Ce fichier contient du texte et permet de "retenir" des informations sur le visiteur.
Par exemple, vous inscrivez dans un cookie le pseudo du visiteur, comme ça la prochaine fois qu'il viendra sur votre site vous pourrez lire son pseudo en allant regarder ce que son cookie contient.
Chaque cookie peut contenir plusieurs informations.
Ecrire un cookie
Pour écrire un cookie, on utilise la fonction PHP setcookie (qui signifie "Placer un cookie" en anglais).
On lui donne en général 3 paramètres, dans l'ordre suivant :
- Le nom du cookie (ex : "Nom")
- La valeur du cookie (ex : "toto")
- La date d'expiration du cookie, sous forme de timestamp (ex : 1090521508)
setcookie(string nom, string valeur, string expiration, string chemin, string domaine, string securise)
Comme vous pouvez le voir, un cookie a une durée de vie limitée,
Il est automatiquement "supprimé" au bout d'un certain temps.
Si vous voulez supprimer le cookie dans un an, il vous faudra faire :
time() + 365*24*3600
Cela veut dire : timestamp actuel + nombre de secondes dans une année. Cela aura pour effet de voir votre cookie disparaître dans exactement un an.
Toutefois, il y a un petit problème avec setcookie... Comme pour session_start, cette fonction ne marche QUE si vous la mettez avant tout code HTML (donc avant la balise <!DOCTYPE>)
Ne placez donc JAMAIS le moindre code HTML avant d'utiliser setcookie.
La plupart des gens qui ont des problèmes avec setcookie ont fait cette erreur, donc souvenez-vous en !
Exemple
Créer 2 cookies:
Un qui retient mon pseudo pendant un an, et un autre qui retient le nom de mon pays
<?php
$timestamp_expire = time() + 365*24*3600;
setcookie('pseudo', 'Khof', $timestamp_expire);
setcookie('pays', 'France', $timestamp_expire);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Ma super page PHP</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
... etc etc...
Afficher un cookie
$_COOKIE['Nom_cookie']
PHP lit les cookies du client pour récupérer toutes les informations qu'il y a dedans. Ces informations sont placées dans la superglobale $_COOKIE, sous forme d'array (tableau)
<?php
echo "Bonjour " .$_COOKIE['Nom'] ." " .$_COOKIE['Prenom'];
echo $HTTP_COOKIE_VARS["Nom"];
?>
Exercice cookies 01
Définir et afficher un cookie
Exercice cookies 02
Définir un cookie, l'afficher sur une autre page
Supression d'un cookie
Pour supprimer un cookie, Il suffit de déclarer le cookie sans mettre de valeur
setcookie("Nom_cookie")
<?php
setcookie("compteur");
?>
Autres variables superglobales
$_ENV : ce sont des variables d'environnement, toujours données par le serveur. Plus précisément, le système d'exploitation (Linux) donne ces informations.
Mais bon, il n'y a rien de vraiment bien utile et de toute façon je suis incapable de vous donner une liste de ce que renvoit cette superglobale. Donc on l'oublie
Manipuler des fichiers
Ouvrir un fichier fopen()
fopen(string filename, string mode)
fopen("fichier.txt", "r")
<?php
$source="fichier.txt";
if($fichier=@fopen($source,"r"))
{
echo "L'ouverture du fichier est possible car la fonction fopen retourne TRUE<br />";
}
else
{
echo "Ouverture du fichier impossible car fopen retourne FALSE";
}
?>
Valeur Opérations permises :
a Ouverture du fichier pour : écrire et créer le fichier. L'écriture commence a la fin du fichier
a+ Mêmes fonctions que ci-dessus sauf que la lecture est permise.
r Ouverture d'un fichier en lecture seule.
r+ Mêmes fonctions que ci-dessus sauf qu'il est possible d'écrire dans le fichier. L'écriture commence au début du fichier.
w Ouverture du fichier en écriture seulement. Création du fichier si celui-ci n'existe pas sauf que les données contenues précédemment sont effacées.
w+ Mêmes fonctions sauf qu'il est possible de lire dans le fichier.
La fonction fopen() renvoie true si l'ouverture est possible et false si elle ne l'est pas.
Exercice file01.php
Afficher le contenu d'un fichier dans un navigateur
fpassthru($fichier)
<?php
$source1="fichier1.txt";
$fichier1=fopen($source1,"r");
fpassthru($fichier1); // Permet d'afficher le contenu du fichier dans un navigateur
?>
Lecture de fichiers
fgets($fichier, longueur)
La fonction fgets() permet d'extraire une chaîne d'une certaine longueur.
Il faut aussi savoir que la fonction extrait la chaîne de la longueur précise définie en argument, plus un caractère et que la fonction s'arrête aux sauts de lignes
fgets(string pointeur, string longueur)
<?php
$source4="fichier.txt";
$fichier4=fopen($source4,"r+");
echo fgets($fichier4,4);
?>
fgetc($fichier,longeur)
fgetc() permet d'extraire le premier caractère du fichier
fgetc(string pointeur)
< ?php
$fichier = fopen("fichier.txt","r");
$premier = fgetc($fichier);
echo "Premier Caractère : " . $premier;
fclose($fichier);
?>
fgets($fichier, longueur)
La fonction fgets() permet d'extraire une chaîne d'une certaine longueur.
Il faut aussi savoir que la fonction extrait la chaîne de la longueur précise définie en argument, plus un caractère et que la fonction s'arrête aux sauts de lignes
fgets(string pointeur, string longueur)
<?php
$fichier = fopen("fichier.txt","r");
$premier = fgets($fichier, 10);
echo "Dix Premier Caractères : " . $premier;
fclose($fichier);
?>
fgetss($fichier,longueur)
La fonction fgetss() a quasiment la même utilité que la fonction fgets() sauf qu'elle n'extrait ni les balises HTML, ni les balises PHP
Exemple :
Pour un fichier contenant : '< b>Bonjour !< /b>< br>Test de la fonction fgetss', la fonction ne renverra que les caractères, la mise en forme HTML sera ignorée : 'Bonjour !Test de la fonction fgetss'
fread($fichier,longueur)
La fonction fread() permet de lire une chaîne de caractère dans un fichier ouvert, jusqu'a la longueur indiquée en argument
fread(string pointeur, string longueur)
<?php
$fichier = fopen("essai.txt","r");
$premier = fread($fichier, 10);
echo "Dix Premiers Caractères : " . $premier;
fclose($fichier);
?>
Exercice file01.php
fclose(fichier)
Ecrire dans un fichier
Pour écrire dans un fichier, on peut utiliser au choix la fonction fwrite() ou fputs()
fwrite($fichier,'Texte a ajouter')
La fonction retourne TRUE si l'écriture se passe normalement, sinon elle retourne FALSE.
Attention toutefois : le fichier doit bien être ouvert en mode écriture : w, a ou r+.
fwrite(string pointeur, string chaîne, (string longueur))
fputs(string pointeur, string chaîne, (string longueur))
<?php
$fichier = fopen("essai.txt","w");
if(fwrite($fichier, "TEXTE A ECRIRE"))
{
echo "OK !";
}
else echo "Erreur";
fclose($fichier);
?>
Exercice file01.php
Exercice compteur
Vérifier l'existence d'un fichier
file_exists("fichier.txt")
Pour vérifier si un fichier existe, on utilise la fonction file_exists()
file_exists(string fichier)
<?php
if(file_exists("fichier.txt")) {
echo "Fichier existant";
}
else echo "Introuvable !";
?>
Copier coller des fichiers
Pour copier un fichier, il faut utiliser la fonction copy()
copy(fichier_depart,fichier_destination)
La fonction retourne TRUE si tout se passe correctement et sinon FALSE.
<?php
if(@copy("essai.txt","complet/copy_fichier.txt"))
{
Echo "Le fichier essai.txt a été copié dans le répertoire complet/copy_fichier.txt.";
}
else echo "Erreur";
?>
Exercice file02.2.php
Renommer un fichier
il faut utiliser la fonction rename()
rename(nom_depart, nom_nouveau)
rename(string nom_depart, string nom_nouveau)
<?php
if(@rename("essai.txt","nouveau_fichier.txt")) {
Echo "Le fichier essai.txt a été renommé en nouveau_fichier.txt.";
}
else echo "Erreur";
?>
Exercice file02.3.php
Supprimer un fichier
C'est la fonction unlink() que l'on utilise
unlink(fichier)
unlink(string fichier)
<?php
if(@unlink("essai.txt"))
{
Echo "Le fichier essai.txt a été supprimé.";
}
else echo "Erreur";
?>
Exercice file02.4.php