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_filespour 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 Apachevar/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_filesintroduit
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 BeamReactorsecure()— Vérification des permissionsforbids()— Gestion refus d'accèsgetlocale()— Internationalisation$cfg[20]— Configuration cheminvar/