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
-
Manipulation de fichiers
- Créez un fichier texte
- Lisez son contenu
- Modifiez-le et sauvegardez
-
JSON
- Créez un tableau de données
- Encodez-le en JSON
- Sauvegardez dans un fichier
- Relisez et décodez
-
$_GET
- Créez une page avec paramètres URL
- Récupérez et affichez les paramètres
- Validez les données
-
$_POST
- Créez un formulaire
- Traitez les données POST
- Validez et nettoyez les entrées
-
$_SESSION
- Démarrez une session
- Stockez des données
- Accédez-y depuis une autre page
- Détruisez la session
Quiz
-
Quelle fonction lit tout le contenu d'un fichier ?
- fopen()
- file_get_contents()
- readfile()
-
Comment décoder du JSON en tableau associatif ?
- json_decode($json)
- json_decode($json, true)
- json_parse($json)
-
Quelle superglobale contient les paramètres URL ?
- $_POST
- $_GET
- $_REQUEST
-
Comment démarrer une session ?
- start_session()
- session_start()
- session_begin()
-
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 :
-
Sauvegarde JSON
- Fonction
sauvegarderDonnees($donnees, $fichier) - Encode en JSON avec formatage
- Sauvegarde dans un fichier
- Gestion d'erreurs
- Fonction
-
Chargement JSON
- Fonction
chargerDonnees($fichier) - Lit et décode le JSON
- Retourne les données ou null si erreur
- Validation du format JSON
- Fonction
-
Gestion de formulaire
- Formulaire avec nom, email, message
- Validation des champs
- Sauvegarde dans un fichier JSON
- Affichage des données sauvegardées
-
Sessions
- Stocker les préférences utilisateur
- Thème (clair/sombre)
- Langue
- Persister entre les pages
-
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.