Aller au contenu principal

Module PHP.11 – Fichiers & données

Objectif

Maîtriser la manipulation de fichiers, le format JSON, et les superglobales PHP ($_GET, $_POST, $_SESSION) pour gérer les données.

Théorie

Lire / écrire des fichiers

Lire un fichier :

// Lire tout le contenu
$contenu = file_get_contents("fichier.txt");

// Lire ligne par ligne
$lignes = file("fichier.txt"); // Retourne un tableau

// Avec gestion d'erreur
$contenu = @file_get_contents("fichier.txt");
if ($contenu === false) {
throw new Exception("Impossible de lire le fichier");
}

Écrire dans un fichier :

// Écrire (remplace le contenu)
file_put_contents("fichier.txt", "Nouveau contenu");

// Ajouter à la fin
file_put_contents("fichier.txt", "Ajout\n", FILE_APPEND);

// Avec verrouillage
file_put_contents("fichier.txt", $contenu, LOCK_EX);

Manipulation avec fopen :

// Ouvrir en lecture
$fichier = fopen("data.txt", "r");
$ligne = fgets($fichier); // Lire une ligne
fclose($fichier);

// Ouvrir en écriture
$fichier = fopen("data.txt", "w");
fwrite($fichier, "Contenu");
fclose($fichier);

// Modes d'ouverture
// "r" : Lecture
// "w" : Écriture (écrase)
// "a" : Ajout (append)
// "r+" : Lecture/écriture

Vérifications :

file_exists("fichier.txt");    // Fichier existe
is_file("fichier.txt"); // Est un fichier
is_readable("fichier.txt"); // Peut être lu
is_writable("fichier.txt"); // Peut être écrit
filesize("fichier.txt"); // Taille en octets

JSON

JSON (JavaScript Object Notation) est un format d'échange de données.

Encoder en JSON :

$donnees = [
"nom" => "Jean",
"age" => 30,
"ville" => "Paris"
];

$json = json_encode($donnees);
// {"nom":"Jean","age":30,"ville":"Paris"}

Options d'encodage :

json_encode($donnees, JSON_PRETTY_PRINT);  // Format lisible
json_encode($donnees, JSON_UNESCAPED_UNICODE); // Garde les caractères Unicode

Décoder du JSON :

$json = '{"nom":"Jean","age":30}';
$donnees = json_decode($json, true); // true = tableau associatif
// ["nom" => "Jean", "age" => 30]

$objet = json_decode($json); // Objet stdClass
// $objet->nom

Gestion des erreurs :

$json = '{"invalid json}';
$donnees = json_decode($json);

if (json_last_error() !== JSON_ERROR_NONE) {
echo "Erreur JSON : " . json_last_error_msg();
}

Lire/écrire fichier JSON :

// Lire
$json = file_get_contents("data.json");
$donnees = json_decode($json, true);

// Écrire
$donnees = ["nom" => "Jean"];
$json = json_encode($donnees, JSON_PRETTY_PRINT);
file_put_contents("data.json", $json);

Superglobales

Les superglobales sont des variables disponibles partout dans PHP.

$_GET

Contient les paramètres de l'URL.

URL : page.php?nom=Jean&age=30

$nom = $_GET['nom'];    // "Jean"
$age = $_GET['age']; // "30"

// Vérification
$nom = $_GET['nom'] ?? 'Inconnu';
$age = isset($_GET['age']) ? (int)$_GET['age'] : 0;

Sécurité :

// Toujours valider et nettoyer
$nom = htmlspecialchars($_GET['nom'] ?? '');
$age = filter_var($_GET['age'] ?? 0, FILTER_VALIDATE_INT);

$_POST

Contient les données des formulaires POST.

Formulaire :

<form method="POST" action="traitement.php">
<input name="nom" type="text">
<input name="email" type="email">
<button type="submit">Envoyer</button>
</form>

Traitement :

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$nom = $_POST['nom'] ?? '';
$email = $_POST['email'] ?? '';

// Validation
if (empty($nom) || empty($email)) {
echo "Tous les champs sont requis";
} else {
// Traitement
}
}

Sécurité :

$nom = filter_input(INPUT_POST, 'nom', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

$_SESSION

Stocke des données de session (persistantes entre les pages).

Démarrer une session :

session_start();

// Stocker
$_SESSION['nom'] = "Jean";
$_SESSION['age'] = 30;

// Lire
$nom = $_SESSION['nom'] ?? '';

// Supprimer
unset($_SESSION['nom']);

// Détruire la session
session_destroy();

Configuration :

// Avant session_start()
ini_set('session.cookie_lifetime', 3600); // 1 heure
ini_set('session.gc_maxlifetime', 3600);

Bonnes pratiques :

  • Toujours appeler session_start() en premier
  • Vérifier avec isset() avant d'accéder
  • Détruire proprement avec session_destroy()

Autres superglobales

$_SERVER : Informations sur le serveur et la requête

$_SERVER['REQUEST_METHOD'];  // GET, POST, etc.
$_SERVER['REQUEST_URI']; // /page.php?param=value
$_SERVER['HTTP_HOST']; // localhost:8000
$_SERVER['PHP_SELF']; // /script.php

$_COOKIE : Cookies HTTP

setcookie("nom", "Jean", time() + 3600);
$nom = $_COOKIE['nom'] ?? '';

$_FILES : Fichiers uploadés

$fichier = $_FILES['fichier'];
$nom = $fichier['name'];
$tmp = $fichier['tmp_name'];
move_uploaded_file($tmp, "uploads/" . $nom);

$_REQUEST : Combinaison de $_GET, $_POST, $_COOKIE (à éviter)

Filtres de validation

PHP fournit des filtres pour valider et nettoyer les données.

Validation :

filter_var($email, FILTER_VALIDATE_EMAIL);
filter_var($age, FILTER_VALIDATE_INT);
filter_var($url, FILTER_VALIDATE_URL);

Nettoyage :

filter_var($texte, FILTER_SANITIZE_STRING);
filter_var($email, FILTER_SANITIZE_EMAIL);
filter_var($nombre, FILTER_SANITIZE_NUMBER_INT);

filter_input :

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$age = filter_input(INPUT_GET, 'age', FILTER_VALIDATE_INT);

Exercice

  1. Manipulation de fichiers

    • Créez un fichier texte
    • Lisez son contenu
    • Modifiez-le et sauvegardez
  2. JSON

    • Créez un tableau de données
    • Encodez-le en JSON
    • Sauvegardez dans un fichier
    • Relisez et décodez
  3. $_GET

    • Créez une page avec paramètres URL
    • Récupérez et affichez les paramètres
    • Validez les données
  4. $_POST

    • Créez un formulaire
    • Traitez les données POST
    • Validez et nettoyez les entrées
  5. $_SESSION

    • Démarrez une session
    • Stockez des données
    • Accédez-y depuis une autre page
    • Détruisez la session

Quiz

  1. Quelle fonction lit tout le contenu d'un fichier ?

    • fopen()
    • file_get_contents()
    • readfile()
  2. Comment décoder du JSON en tableau associatif ?

    • json_decode($json)
    • json_decode($json, true)
    • json_parse($json)
  3. Quelle superglobale contient les paramètres URL ?

    • $_POST
    • $_GET
    • $_REQUEST
  4. Comment démarrer une session ?

    • start_session()
    • session_start()
    • session_begin()
  5. Quel filtre valide un email ?

    • FILTER_SANITIZE_EMAIL
    • FILTER_VALIDATE_EMAIL
    • FILTER_EMAIL

Mini défi

Mission : Créer un système de sauvegarde de données

Créez un système complet qui sauvegarde et charge des données :

Fonctionnalités :

  1. Sauvegarde JSON

    • Fonction sauvegarderDonnees($donnees, $fichier)
    • Encode en JSON avec formatage
    • Sauvegarde dans un fichier
    • Gestion d'erreurs
  2. Chargement JSON

    • Fonction chargerDonnees($fichier)
    • Lit et décode le JSON
    • Retourne les données ou null si erreur
    • Validation du format JSON
  3. Gestion de formulaire

    • Formulaire avec nom, email, message
    • Validation des champs
    • Sauvegarde dans un fichier JSON
    • Affichage des données sauvegardées
  4. Sessions

    • Stocker les préférences utilisateur
    • Thème (clair/sombre)
    • Langue
    • Persister entre les pages
  5. Upload de fichier

    • Formulaire d'upload
    • Validation du type de fichier
    • Validation de la taille
    • Sauvegarde sécurisée

Critères :

  • ✅ Toutes les fonctionnalités implémentées
  • ✅ Gestion complète des erreurs
  • ✅ Validation et nettoyage des données
  • ✅ Sécurité (pas d'injection, validation fichiers)
  • ✅ Code organisé et documenté

Objectif : Maîtriser la manipulation de fichiers, JSON et superglobales pour créer des applications web complètes.


Validation : Vous pouvez passer au module suivant quand vous maîtrisez les fichiers, JSON et superglobales.