Superglobales

Youssef Chahir
GREYC — Université de Caen
Adapté du cours d'Alexandre Niveau et de Jean-Marc Lecarpentier

Superglobales: Tableaux associatifs

Superglobale Description
$_GET

contient les variables passées par la méthode GET

$_POST

contient les variables passées par la méthode POST

$_COOKIE

contient les valeurs des cookies enregistrés sur l'ordinateur du visiteur. Cela nous permet de stocker des informations sur l'ordinateur du visiteur pendant plusieurs mois, pour se souvenir de son nom par exemple.

$_SERVER

contient les variables d’environnement (par ex. REMOTE_ADDR)

$_ENV

contient les variables d’environnement

$_REQUEST

Une fusion des variables $_GET, $_POST et $_COOKIE. : toutes les informations qui arrivent de l’utilisateur

$_SESSION

contient toutes les variables qui restent stockées sur le serveur le temps de la présence d'un visiteur.

$_FILES

elle contient la liste des fichiers qui ont été envoyés via le formulaire précédent.

Variables d'environnement

  • L'un des aspects fondamentaux d'une application construite sur une architecture de type intranet est l'utilisation des variables d'environnement du serveur, et notamment celles du serveur HTTP.
  • Avec PHP toutes les variables d'environnement du serveur sont automatiquement reprises dans les scripts PHP en tant que variables globales. Ainsi il suffit de les utiliser directement dans le code.
    • SERVER_NAME : Le nom du serveur hôte qui exécute le script suivant. Si le script est exécuté sur un hôte virtuel, ce sera la valeur définie pour cet hôte virtuel.
    • PHP_SELF : Le nom du fichier du script en cour d'exécution, par rapport au document root.
    • DOCUMENT_ROOT : La racine sous laquelle le script courant est exécuté, comme défini dans la configuration du serveur.
    • REMOTE_ADDR : L'adresse IP du client qui demande la page courante.
    • REMOTE_PORT :Le port utilisé par la machine cliente pour communiquer avec le serveur web.
    • SCRIPT_FILENAME :L e chemin absolu jusqu'au script courant.
    • SERVER_PORT :L e port de la machine serveur utilisé pour les communications. Par défaut, c'est '80'. En utilisant SSL, par exemple, il sera remplacé par le numéro de port HTTP sécurisé.
    • REQUEST_URI : L'URI qui a été fourni pour accéder à cette page. Par exemple : '/index.html'.
  • Avec l'adresse IP du visiteur $_SERVER["REMOTE_ADDR"] que l'on peut considérer comme propre à une personne pour une période donnée, il est possible de savoir combien de personnes sont venues consulter votre site dans la journée. Il suffit pour cela que chaque page du site (le visiteur n'accédant pas nécessairement à votre site par la page d'accueil) stocke toute nouvelle adresse IP (de visiteur) rencontrée.
  • Avec l'identifiant du navigateur $_SERVER["HTTP_USER_AGENT"] vous pourrez connaître quels sont les navigateurs les plus utilisés et ainsi vous assurer que votre site est bien compatible avec les navigateurs de vos "clients".
  • Avec le "reférant" $_SERVER["HTTP_REFERER"] vous pourrez savoir de quel site vient votre visiteur (et par conséquent connaître les pages proposant un lien vers votre site).
  • Exemple: $addresseHote=$_SERVER[‘REMOTE_ADDR’]

    adresse IP de la machine cliente
    $nomHote = gethostbyaddr($addresseHote);

    La fonction gethostbyAddr() permet de convertir une adresse IP (au format XXX.XXX.XXX.XXX) en un nom de machine (plus lisible).

  • phpinfo()

    Affiche de nombreuses informations sur PHP

Exemple

<?php
// Affiche des informations détaillées sur PHP
phpinfo();
?>
Résultat

Modification d'une variable d'environnement

Syntaxe : void putenv ( string setting)

  • Elle fixe la valeur d'une variable d'environnement.
  • Cette valeur n'existera que durant la vie du script courant, et l'environnement initial sera restauré lorsque le script sera terminé.
  • Modifier la valeur de certaines variables système peut être un trou de sécurité considérable.
  • La directive de configuration safe_mode_allowed_env_vars contient une liste de préfixes, séparés par des virgules. Lorsque le "Safe Mode" est actif, l'utilisateur ne peut que modifier les variables dont le nom commence par les préfixes fournis par cette directive.
  • Par défaut, les utilisateurs ne peuvent modifier que les variables qui commencent par PHP_ (i.e. PHP_XXX=BAR). Note: si cette directive est vide, PHP autorisera la modification de TOUTES les variables d'environnement !!!.
  • La directive de configuration safe_mode_protected_env_vars contient une liste de variables d'environnement, séparées par des virgules. Les utilisateurs ne pourront pas modifier ces variables avec la fonction putenv(). Ces variables seront protégées même si safe_mode_allowed_env_vars permet leur modification.

Exemple

<?php

declare(strict_types=1); // pour activer le mode strict de PHP, qui permet la vérification stricte des type

//highlight_file(basename($_SERVER["PHP_SELF"]));

echo "<!DOCTYPE html>
<html lang='fr'>
<head>
<meta charset='UTF-8'>
<title>Historique des visites</title>
</head>
<body>
<h1>Bienvenue sur mon site</h1>"
;

// L'adresse IP du client qui demande la page courante.
$aip $_SERVER["REMOTE_ADDR"];
$today date("d/m/Y"); // 12/02/2023
$temps date("H:i:s"); // 10:16:18

$time time();

// Ecriture des informations utiles
$info $aip." ".$today." ".$temps."\n";

echo 
"Visite de "$aip" ("gethostbyaddr($aip), ")"" le "$today" à "$temps;
echo 
"</body></html>";

?>
Résultat

Cas général : 3 phases

Ouverture

Lecture / Ecriture

Fermeture

Exceptions:

  • readfile(): Affichage du contenu du fichier
  • file(): Retourne un tableau contenant les lignes du fichier
h1>Ouverture : fopen

id_fichier = fopen("fichier","mode");

6 modes d’ouverture :

  • r : lecture seule d’un fichier existant
  • r+ : lecture / réécriture sur un fichier existant
  • w : réécriture seule sur un fichier existant ou à créer
  • w+ : lecture / réécriture sur un fichier existant ou à créer
  • a : écriture seule sur un fichier existant ou à créer
  • a+ : lecture / écriture sur un fichier existant ou à créer

Lecture, Écriture et Fermeture de fichiers

Lecture

fgets : lecture ligne à ligne

fgets(id_fichier,octets);

fgetc : lecture caractère à caractère

Écriture

fwrite

fwrite(id_fichier,"ligne");

Fermeture

fclose

fclose(id_fichier);

Manipulation de fichiers en PHP

La manipulation de fichier se fait grâce à un identifiant de fichier. Quelques fonctions :

  • fopen($file [, $mode]) : ouverture du fichier identifié par son nom $file et dans un mode $mode particulier, retourne un identificateur $fp de fichier ou FALSE si échec
  • fopen($fp) : ferme le fichier identifié par le $fp
  • fgets($fp, $length) : lit une ligne de $length caractères au maximum
  • fputs($fp, $str) : écrit la chaîne $str dans le fichier identifié par $fp
  • fgetc($fp) : lit un caractère
  • feof($fp) : teste la fin du fichier
  • file_exists($file) : indique si le fichier $file existe
  • filesize($file) : retourne la taille du fichier $file
  • filetype($file) : retourne le type du fichier $file
  • unlink($file) : détruit le fichier $file
  • copy($source, $dest) : copie le fichier $source vers $dest
  • readfile($file) : affiche le fichier $file
  • rename($old, $new) : renomme le fichier $old en $new

Copie d'un fichier en PHP

Voici un exemple de copie d'un fichier :

        <php
            $source = "fichier1.txt";
            $cible = "fichier2.txt";

            $id_source = fopen($source, "r");
            $id_cible = fopen($cible, "w");

            while ($ligne = fgets($id_source, 10000)) {
                fwrite($id_cible, $ligne);
            }

            fclose($id_cible);
            fclose($id_source);
        ?>
    

Parcours d'une arborescence

Ouverture d'un dossier

Utilisez la fonction opendir pour ouvrir un dossier :

$id_dossier = opendir("dossier");

Parcours d'un dossier

Utilisez la fonction readdir pour parcourir un dossier :

$fichier = readdir($id_dossier);

Fermeture d'un dossier

Utilisez la fonction closedir pour fermer un dossier :

closedir($id_dossier);

Accès aux dossiers

Il est possible de parcourir les répertoires grâce à ces quelques fonctions :

chdir($str)

Change le dossier courant en $str. Retourne TRUE si succès, sinon FALSE.

getcwd()

Retourne le nom du dossier courant (en format chaîne de caractères).

opendir($str)

Ouvre le dossier $str, et récupère un pointeur $d dessus si succès, FALSE sinon et génère alors une erreur PHP qui peut être échappée avec @.

closedir($d)

Ferme le pointeur de dossier $d.

readdir($d)

Lit une entrée du dossier identifié par $d. C’est-à-dire retourne un nom de fichier de la liste des fichiers du dossier pointé. Les fichiers ne sont pas triés. Ou bien retourne FALSE s’il n’y a plus de fichier.

rewinddir($d)

Retourne à la première entrée du dossier identifié par $d.

Affichage des sous-dossiers et des fichiers d'un dossier

    <php
        $dir = "C:\dossier\";
        $id_dir = OpenDir($dir);
        while ($sub_dir = ReadDir($id_dir)) {
            if (Is_Dir($dir . $sub_dir)) {
                echo "<b>$sub_dir</b><br>";
            } else {
                echo "$sub_dir<br>";
            }
        }
        CloseDir($id_dir);
        ?>