Current File : /home/igihango/public_html/ecrire/action/calculer_taille_cache.php |
<?php
/***************************************************************************\
* SPIP, Système de publication pour l'internet *
* *
* Copyright © avec tendresse depuis 2001 *
* Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribué sous licence GNU/GPL. *
\***************************************************************************/
/**
* Gestion de l'action calculer_taille_cache
*
* @package SPIP\Core\Cache
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Calculer la taille du cache ou du cache image pour l'afficher en ajax sur la page d'admin de SPIP
*
* Si l'argument reçu est 'images', c'est la taille du cache _DIR_VAR qui est calculé,
* sinon celle du cache des squelettes (approximation)
*
* @param string|null $arg
* Argument attendu. En absence utilise l'argument
* de l'action sécurisée.
*/
function action_calculer_taille_cache_dist($arg = null) {
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
include_spip('inc/filtres');
if ($arg == 'images') {
$taille = calculer_taille_dossier(_DIR_VAR);
$res = _T(
'ecrire:taille_cache_image',
[
'dir' => joli_repertoire(_DIR_VAR),
'taille' => '<b>' . (taille_en_octets($taille) > 0 ? taille_en_octets($taille) : '0 octet') . '</b>'
]
);
} else {
include_spip('inc/invalideur');
$taille =
calculer_taille_dossier(_DIR_CACHE_XML)
+ calculer_taille_dossier(_DIR_CACHE . 'skel/')
+ calculer_taille_dossier(_DIR_CACHE . 'wheels/')
+ calculer_taille_dossier(_DIR_CACHE . 'contextes/');
$taille += intval(taille_du_cache());
if ($taille <= 150000) {
$res = _T('taille_cache_vide');
} elseif ($taille <= 1024 * 1024) {
$res = _T('taille_cache_moins_de', ['octets' => taille_en_octets(1024 * 1024)]);
} else {
$res = _T('taille_cache_octets', ['octets' => taille_en_octets($taille)]);
}
$res = "<b>$res</b>";
}
$res = "<p>$res</p>";
ajax_retour($res);
}
/**
* Calculer la taille d'un dossier, sous dossiers inclus
*
* @param string $dir Répertoire dont on souhaite évaluer la taille
* @return int Taille en octets
*/
function calculer_taille_dossier($dir) {
if (!is_dir($dir) or !is_readable($dir)) {
return 0;
}
$handle = opendir($dir);
if (!$handle) {
return 0;
}
$taille = 0;
while (($fichier = @readdir($handle)) !== false) {
// Eviter ".", "..", ".htaccess", etc.
if ($fichier[0] == '.') {
continue;
}
if (is_file($d = "$dir/$fichier")) {
$taille += filesize($d);
} else {
if (is_dir($d)) {
$taille += calculer_taille_dossier($d);
}
}
}
closedir($handle);
return $taille;
}