Maison > développement back-end > tutoriel php > Comment calculer efficacement la taille d'un répertoire en PHP ?

Comment calculer efficacement la taille d'un répertoire en PHP ?

Patricia Arquette
Libérer: 2024-11-29 13:41:20
original
778 Les gens l'ont consulté

How to Efficiently Calculate a Directory's Size in PHP?

Comment déterminer la taille d'un répertoire à l'aide de PHP

Le calcul de la taille d'un répertoire, y compris ses sous-répertoires, peut être une tâche importante pour la gestion des fichiers stockage et performances. Cet article montre comment y parvenir en PHP en utilisant une approche optimisée.

Méthode existante

L'extrait de code PHP fourni calcule la taille d'un répertoire comme suit :

function foldersize($path) {
  $total_size = 0;
  $files = scandir($path);

  foreach($files as $t) {
    if (is_dir(rtrim($path, '/') . '/' . $t)) {
      if ($t<>"." &amp;&amp; $t<>"..") {
          $size = foldersize(rtrim($path, '/') . '/' . $t);

          $total_size += $size;
      }
    } else {
      $size = filesize(rtrim($path, '/') . '/' . $t);
      $total_size += $size;
    }
  }
  return $total_size;
}
Copier après la connexion

Optimisation

Le code d'origine présentait des problèmes de performances dus à appels de fonctions récursifs inutiles et vérifications de l'existence de fichiers redondants. La fonction optimisée ci-dessous répond à ces préoccupations :

function GetDirectorySize($path){
    $bytestotal = 0;
    $path = realpath($path);
    if($path!==false &amp;&amp; $path!='' &amp;&amp; file_exists($path)){
        foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS)) as $object){
            $bytestotal += $object->getSize();
        }
    }
    return $bytestotal;
}
Copier après la connexion

Les principales améliorations incluent :

  • Vérification du chemin à l'aide de realpath.
  • Vérification de la validité du chemin et de l'existence du fichier avant l'itération. .
  • Sauter . et .. répertoires.
  • Utilisation de l'indicateur FilesystemIterator::SKIP_DOTS pour éviter de traiter les répertoires et fichiers cachés.

Exemple d'utilisation

Utilisation la fonction optimisée :

$path = '/var/www/html/myproject';
$directorySize = GetDirectorySize($path);
echo "Size of '$path': " . format_bytes($directorySize);
Copier après la connexion

Ce code détermine la taille du répertoire spécifié et affiche le résultat dans un format lisible par l'homme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal