Lecteur Markdown
CLEANUP_DOCUMENTATION
Cleanup #
Nettoyage des caches et fichiers temporaires de BeamReactor.
Version: 1.2.0
Niveau requis: `CLEANUP_LEVEL_ADMIN`
Depuis: 2002
Vue d'ensemble #
Plugin de maintenance système qui supprime récursivement les fichiers de cache et temporaires pour forcer le rechargement complet de l'application. Nettoie `var/save/` et `var/tmp/` tout en préservant les fichiers critiques.
Fonctionnalités #
- Suppression récursive des caches (`var/save/`)
- Nettoyage des fichiers temporaires (`var/tmp/`)
- Suppression automatique des dossiers vides
- Protection des fichiers système (`.htaccess`, `hist.txt`)
- Rapport détaillé avec compteurs de fichiers/dossiers supprimés
- Flush output pour affichage en temps réel
Cas d'usage #
Quand utiliser cleanup :
- En cas de comportement cache incohérent
- Pour forcer la régénération de toutes les ressources
- Avant déploiement de modifications critiques
- Debugging de problèmes de persistence
Effet :
Réinitialisation complète du système de cache → rechargement total au prochain accès.
Architecture des répertoires #
var/
├── tmp/ ← Nettoyé (fichiers temporaires)
├── save/ ← Nettoyé (caches générés)
└── hist.txt ← PROTÉGÉ (historique global)
Configuration #
| Variable | Valeur | Description |
|----------|--------|-------------|
| `$cfg[20]` | `'var'` | Répertoire racine des données volatiles |
Fonctions #
dirmtime #
Calcule la date de dernière modification d'un répertoire (récursif).
function dirmtime(string $dir): int
Retourne : Timestamp Unix de la modification la plus récente.
Comportement :
- Parcours récursif de l'arborescence
- Compare `filemtime()` de tous les fichiers
- Retourne le plus grand timestamp trouvé
Usage : Détection de modifications profondes dans un arbre de fichiers.
---
removeEmptySubFolders #
Supprime récursivement les dossiers vides.
function removeEmptySubFolders(string $path): bool
Paramètres :
Retourne : `true` si le dossier est vide après nettoyage.
Effets de bord :
- Incrémente `$total_deleted_folders` (variable globale)
- Affiche les dossiers protégés rencontrés
Protection :
Vérifie `$protected_folders` avant suppression. Ne touche jamais aux dossiers racine `var/save/` et `var/tmp/`.
Algorithme :
1. Scan récursif de l'arbre
2. Si dossier vide ET non protégé → `rmdir()`
3. Remonte l'arbre en supprimant les parents devenus vides
---
listFilesAndFolders #
Scan récursif retournant fichiers et dossiers séparés.
function listFilesAndFolders(string|array $path): array
Paramètres :
- `$path` — Chemin ou tableau de chemins (supporte wildcards `*`)
Retourne :
[
[$folders], // Tableau des répertoires trouvés
[$files] // Tableau des fichiers trouvés
]
Filtrage :
- Ignore dossiers dans `$protected_folders`
- Ignore fichiers dans `$protected_files`
Usage typique :
$content = listFilesAndFolders('var/tmp/');
echo count($content[0]) . ' dossiers, ' . count($content[1]) . ' fichiers';
---
flushSys #
Force l'output buffering pour affichage temps réel.
function flushSys(): bool
Retourne : `true`
Actions :
- Envoie 1024 espaces (contournement buffer Apache)
- Désactive gzip (`apache_setenv('no-gzip', 1)`)
- Configure PHP : `output_buffering=0`, `zlib.output_compression=0`, `implicit_flush=1`
Contexte :
Permet de voir la progression du nettoyage en direct sans attendre la fin du script.
---
killcache #
Suppression récursive des fichiers dans un répertoire.
function killcache(string $dirname): int
Paramètres :
Retourne :
| Code | Signification |
|------|---------------|
| `1` | Nettoyage réussi |
| `-1` | Répertoire inexistant |
Effets de bord :
- Incrémente `$total_deleted_files` pour chaque suppression réussie
- Affiche liste `<ol>` des fichiers supprimés
Protection :
- Ignore `.htaccess`
- Ignore fichiers dans `$protected_files`
- Appels récursifs pour sous-dossiers
Affichage :
<ol>
<li>var/save/cache_page_42.html</li>
<li>var/save/render_block_123.json</li>
</ol>
Flux d'exécution #
1. Initialisation #
$var_path = getcwd() . DIRECTORY_SEPARATOR . $cfg[20];
$tmp_path = $var_path . DIRECTORY_SEPARATOR . 'tmp';
$save_path = $var_path . DIRECTORY_SEPARATOR . 'save';
$hist_file = $var_path . DIRECTORY_SEPARATOR . 'hist.txt';
$protected_folders = [$save_path, $tmp_path];
$protected_files = [$hist_file];
2. Nettoyage `var/save/` #
if(is_dir($save_path))
{
$content_save = listFilesAndFolders($save_path);
$i = killcache($save_path);
if($i == 1) echo $dialcache[0]; // "Cache save nettoyé"
else if($i == 0) echo $dialcache[7]; // "Répertoire vide"
else echo $dialcache[1]; // "Erreur"
removeEmptySubFolders($save_path);
}
3. Nettoyage `var/tmp/` #
if(is_dir($tmp_path))
{
$content_tmp = listFilesAndFolders($tmp_path);
// Suppression fichiers
if(count($content_tmp[1]) > 0)
{
$total_deleted_files = 0;
killcache($tmp_path);
echo $dialcache[3] . '(' . $total_deleted_files . '/' . count($content_tmp[1]) . ')';
}
// Suppression dossiers vides
if(count($content_tmp[0]) > 0)
{
$total_deleted_folders = 0;
removeEmptySubFolders($tmp_path);
echo $total_deleted_folders . '/' . count($content_tmp[0]);
}
}
4. Finalisation #
echo $dialcache[5]; // "Opération terminée"
flushSys();
Variables globales #
| Variable | Type | Usage |
|----------|------|-------|
| `$total_deleted_files` | int | Compteur fichiers supprimés |
| `$total_deleted_folders` | int | Compteur dossiers supprimés |
| `$dialcache` | array | Messages localisés |
Locale #
Fichier : `getlocale('cleanup')`
Variable : `$dialcache[]`
| Index | Description |
|-------|-------------|
| 0 | Cache save nettoyé |
| 1 | Erreur répertoire save inexistant |
| 3 | Cache tmp nettoyé (format sprintf avec compteurs) |
| 4 | Erreur répertoire tmp inexistant |
| 5 | Message fin d'opération |
| 6 | Suppression dossiers vides en cours |
| 8 | Erreur suppression fichier (préfixe) |
| 9 | Nettoyage partiel tmp (certains fichiers échoués) |
Sécurité #
Contrôle d'accès #
if(!secure('CLEANUP_LEVEL_ADMIN'))
{
forbids();
return;
}
Seuls les administrateurs (`CLEANUP_LEVEL_ADMIN`) peuvent exécuter ce plugin.
Fichiers protégés #
Toujours préservés :
- `.htaccess` — Configuration Apache
- `var/hist.txt` — Historique global du site
Dossiers protégés contre rmdir :
- `var/save/` — Racine cache (contenu supprimé, dossier préservé)
- `var/tmp/` — Racine temporaire (contenu supprimé, dossier préservé)
Risques #
Aucun risque de perte de données utilisateur :
- Les uploads sont dans `$cfg[6]` (non touché)
- La base de données n'est pas affectée
- Seuls les fichiers régénérables sont supprimés
Impact fonctionnel :
- Ralentissement temporaire (recalcul des caches)
- Sessions utilisateur potentiellement perdues si stockées en fichiers dans `var/tmp/`
Exemple de sortie #
Cache save nettoyé
Suppression des dossiers vides en cours...
<ol>
<li>var/save/renders/page_home.html</li>
<li>var/save/renders/page_about.html</li>
<li>var/save/compiled/template_main.php</li>
</ol>
Cache tmp nettoyé (47/47)
Suppression des dossiers vides en cours...
12/15
Opération terminée
Performance #
Complexité : O(n) où n = nombre total de fichiers + dossiers
Temps typique : 2-5 secondes pour 10 000 fichiers
Optimisations :
- `glob()` natif (C bindings)
- Pas de lecture du contenu des fichiers
- Flush progressif pour feedback utilisateur
Différences avec d'autres plugins #
| Plugin | Objectif | Portée |
|--------|----------|--------|
| `cleanup.php` | RAZ cache système | `var/save/`, `var/tmp/` |
| `save.php` | Backup complet site | Tout sauf `var/` |
| `checklinks.php` | Vérification liens | Lecture seule |
Notes de migration #
Depuis version 1.1.0 :
- Chemins en dur (`save/`, `tmp/`) → `$cfg[20]/save/`, `$cfg[20]/tmp/`
- Ajout protection `hist.txt`
- `$protected_files` introduit
Rétrocompatibilité :
Si `$cfg[20]` non défini, le plugin échouera proprement avec messages d'erreur.
Limitations connues #
- Pas de dry-run
- Pas de sélection granulaire (tout ou rien)
- Pas de journalisation des suppressions (sauf affichage HTML)
- Sessions PHP en fichiers perdues si dans `var/tmp/`
Dépendances #
- `frameheader()` / `framefooter()` — Système de frame BeamReactor
- `secure()` — Vérification des permissions
- `forbids()` — Gestion refus d'accès
- `getlocale()` — Internationalisation
- `$cfg[20]` — Configuration chemin `var/`