[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / action / calculer_taille_cache.php
index 84f34de..bc5504b 100644 (file)
@@ -3,59 +3,66 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2017                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined('_ECRIRE_INC_VERSION')) return;
-
+/**
+ * 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)){
+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'){
+       if ($arg == 'images') {
                $taille = calculer_taille_dossier(_DIR_VAR);
                $res = _T('ecrire:taille_cache_image',
-               array(
-                       'dir' => joli_repertoire(_DIR_VAR),
-                       'taille' => "<b>".(taille_en_octets($taille) > 0 ? taille_en_octets($taille) : "0 octet")."</b>"
+                       array(
+                               'dir' => joli_repertoire(_DIR_VAR),
+                               'taille' => "<b>" . (taille_en_octets($taille) > 0 ? taille_en_octets($taille) : "0 octet") . "</b>"
                        )
                );
-       }
-       else {
+       } 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/')
-               ;
+                       + 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){
+               if ($taille <= 150000) {
                        $res = _T('taille_cache_vide');
-               }
-               elseif ($taille<=1024*1024){
-                       $res = _T('taille_cache_moins_de',array('octets'=>taille_en_octets(1024*1024)));
-               }
-               else {
-                       $res = _T('taille_cache_octets',array('octets'=>taille_en_octets($taille)));
+               } elseif ($taille <= 1024 * 1024) {
+                       $res = _T('taille_cache_moins_de', array('octets' => taille_en_octets(1024 * 1024)));
+               } else {
+                       $res = _T('taille_cache_octets', array('octets' => taille_en_octets($taille)));
                }
                $res = "<b>$res</b>";
        }
-       
+
        $res = "<p>$res</p>";
        ajax_retour($res);
 }
@@ -64,26 +71,32 @@ function action_calculer_taille_cache_dist($arg=null){
 /**
  * Calculer la taille d'un dossier, sous dossiers inclus
  *
- * http://doc.spip.org/@calculer_taille_dossier
- *
- * @param $dir
- * @return int
+ * @param string $dir Répertoire dont on souhaite évaluer la taille
+ * @return int Taille en octets
  */
-function calculer_taille_dossier ($dir) {
-       $handle = @opendir($dir);
-       if (!$handle) return 0;
+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 ($fichier[0] == '.') {
+                       continue;
+               }
                if (is_file($d = "$dir/$fichier")) {
                        $taille += filesize($d);
+               } else {
+                       if (is_dir($d)) {
+                               $taille += calculer_taille_dossier($d);
+                       }
                }
-               else if (is_dir($d))
-                       $taille += calculer_taille_dossier($d);
        }
        closedir($handle);
+
        return $taille;
 }
-
-?>
\ No newline at end of file