Position actuelle: Accueil> Derniers articles> Quatre façons pratiques d'obtenir la taille du disque d'un répertoire spécifié

Quatre façons pratiques d'obtenir la taille du disque d'un répertoire spécifié

M66 2025-07-26

PHP implémente la méthode pour obtenir la taille totale du disque de répertoire

Dans le développement quotidien du Web, nous devons parfois obtenir l'espace disque occupé par un répertoire (y compris ses sous-répertoires), comme à des fins telles que les limites de quota, les statistiques des ressources ou la surveillance des journaux. PHP fournit des fonctions intégrées qui peuvent nous aider à obtenir facilement la taille totale du disque du répertoire.

Utilisez disk_total_space pour obtenir la capacité totale du disque

disk_total_space () peut obtenir directement la capacité totale du disque, mais notez qu'il renvoie la capacité de l'ensemble du disque, et non la taille que le répertoire occupe réellement.

 
$directory = "/var/log";
$total_space = disk_total_space($directory);
echo "Capacité totale du disque:$total_space octet";

Utilisez dir () et fileSize () pour accumuler des tailles de fichiers d'annuaire

En traversant le répertoire et en lisant la taille de chaque fichier à l'aide de FileSize () , vous pouvez obtenir plus précisé l'espace disque réel occupé par le répertoire.

 
$directory = "/var/log";
$total_size = 0;
if ($dh = opendir($directory)) {
    while (($file = readdir($dh)) !== false) {
        if ($file != "." && $file != "..") {
            $total_size += filesize($directory . "/" . $file);
        }
    }
    closedir($dh);
}
echo "Taille totale du disque:$total_size octet";

Utilisez récursiveiterateRiterator pour compter les tailles

En combinant récursivedirectoryiterator avec récursiveiteratoratorator , vous pouvez obtenir de manière récursive la taille de tous les fichiers dans un répertoire et son sous-répertoire, qui convient à la structure du répertoire profond.

 
use RecursiveIteratorIterator;
use RecursiveDirectoryIterator;
use SplFileInfo;

$directory = "/var/log";
$total_size = 0;
$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($directory),
    RecursiveIteratorIterator::SELF_FIRST
);

foreach ($iterator as $file) {
    if ($file->isFile()) {
        $total_size += $file->getSize();
    }
}
echo "Taille totale du disque:$total_size octet";

Implémentation rapide à l'aide de scandir () et array_sum ()

Scandir () peut être utilisé pour obtenir tous les noms de fichiers dans le répertoire et combiner array_map () et array_sum () pour calculer la taille totale de manière concise. Cependant, cette méthode ne peut pas être des sous-répertoires récursivement et convient aux statistiques de répertoires parallèles.

 
$directory = "/var/log";
$files = scandir($directory);
$total_size = array_sum(array_map("filesize", array_filter(
    array_map(function($file) use ($directory) {
        return $directory . '/' . $file;
    }, $files),
    function($file) {
        return is_file($file);
    }
)));
echo "Taille totale du disque:$total_size octet";

Suggestions d'optimisation des performances

  • Il est recommandé d'utiliser une méthode d'itérateur récursive pour prendre en compte les performances et la précision.
  • Essayez d'éviter d'utiliser la fonction glob () , qui n'est pas efficace dans les grands dossiers.
  • Si vous avez besoin d'obtenir fréquemment la taille du répertoire, envisagez de cache les résultats de la base de données ou du fichier de cache.

Résumer

PHP fournit une variété de façons de calculer la taille du disque du répertoire, chacune avec ses scénarios applicables. Le choix de la bonne méthode peut non seulement améliorer l'efficacité de l'exécution, mais aussi rendre le code plus concis et fiable. Les développeurs peuvent l'utiliser de manière flexible en fonction de leurs propres besoins.