[SPIP] v3.2.1-->v3.2.2
[lhc/web/www.git] / www / ecrire / action / calculer_taille_cache.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 /**
14 * Gestion de l'action calculer_taille_cache
15 *
16 * @package SPIP\Core\Cache
17 **/
18 if (!defined('_ECRIRE_INC_VERSION')) {
19 return;
20 }
21
22
23 /**
24 * Calculer la taille du cache ou du cache image pour l'afficher en ajax sur la page d'admin de SPIP
25 *
26 * Si l'argument reçu est 'images', c'est la taille du cache _DIR_VAR qui est calculé,
27 * sinon celle du cache des squelettes (approximation)
28 *
29 * @param string|null $arg
30 * Argument attendu. En absence utilise l'argument
31 * de l'action sécurisée.
32 */
33 function action_calculer_taille_cache_dist($arg = null) {
34 if (is_null($arg)) {
35 $securiser_action = charger_fonction('securiser_action', 'inc');
36 $arg = $securiser_action();
37 }
38 include_spip('inc/filtres');
39
40 if ($arg == 'images') {
41 $taille = calculer_taille_dossier(_DIR_VAR);
42 $res = _T('ecrire:taille_cache_image',
43 array(
44 'dir' => joli_repertoire(_DIR_VAR),
45 'taille' => "<b>" . (taille_en_octets($taille) > 0 ? taille_en_octets($taille) : "0 octet") . "</b>"
46 )
47 );
48 } else {
49 include_spip('inc/invalideur');
50 $taille =
51 calculer_taille_dossier(_DIR_CACHE_XML)
52 + calculer_taille_dossier(_DIR_CACHE . 'skel/')
53 + calculer_taille_dossier(_DIR_CACHE . 'wheels/')
54 + calculer_taille_dossier(_DIR_CACHE . 'contextes/');
55 $taille += intval(taille_du_cache());
56 if ($taille <= 150000) {
57 $res = _T('taille_cache_vide');
58 } elseif ($taille <= 1024 * 1024) {
59 $res = _T('taille_cache_moins_de', array('octets' => taille_en_octets(1024 * 1024)));
60 } else {
61 $res = _T('taille_cache_octets', array('octets' => taille_en_octets($taille)));
62 }
63 $res = "<b>$res</b>";
64 }
65
66 $res = "<p>$res</p>";
67 ajax_retour($res);
68 }
69
70
71 /**
72 * Calculer la taille d'un dossier, sous dossiers inclus
73 *
74 * @param string $dir Répertoire dont on souhaite évaluer la taille
75 * @return int Taille en octets
76 */
77 function calculer_taille_dossier($dir) {
78 if (!is_dir($dir) or !is_readable($dir)) {
79 return 0;
80 }
81 $handle = opendir($dir);
82 if (!$handle) {
83 return 0;
84 }
85 $taille = 0;
86 while (($fichier = @readdir($handle)) !== false) {
87 // Eviter ".", "..", ".htaccess", etc.
88 if ($fichier[0] == '.') {
89 continue;
90 }
91 if (is_file($d = "$dir/$fichier")) {
92 $taille += filesize($d);
93 } else {
94 if (is_dir($d)) {
95 $taille += calculer_taille_dossier($d);
96 }
97 }
98 }
99 closedir($handle);
100
101 return $taille;
102 }