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.
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";
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";
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";
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";
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.