En vous promenant sur Beamreactor, nous stockons votre IP 48h pour des raisons de sécurité.

Lecteur Markdown

cleanup Documentation › CLEANUP_DOCUMENTATION

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 #

text
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).

php
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.

php
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.

php
function listFilesAndFolders(string|array $path): array

Paramètres :

  • $path — Chemin ou tableau de chemins (supporte wildcards *)

Retourne :

php
[
  [$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 :

php
$content = listFilesAndFolders('var/tmp/');
echo count($content[0]) . ' dossiers, ' . count($content[1]) . ' fichiers';

flushSys #

Force l'output buffering pour affichage temps réel.

php
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.

php
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 :

html
<ol>
  <li>var/save/cache_page_42.html</li>
  <li>var/save/render_block_123.json</li>
</ol>

Flux d'exécution #

1. Initialisation #

php
$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/ #

php
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/ #

php
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 #

php
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 #

php
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 #

text
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/
de en fr