In der täglichen Webentwicklung müssen wir manchmal den von einem Verzeichnis (einschließlich seiner Unterverzeichnisse) besetzten Festplattenraum erhalten, z. B. für Zwecke wie Quotengrenzen, Ressourcenstatistiken oder Protokollüberwachung. PHP bietet einige integrierte Funktionen, die uns helfen können, die Gesamtscheibengröße des Verzeichnisses leicht zu erhalten.
disk_total_space () kann die Gesamtkapazität der Festplatte direkt erhalten, beachten Sie jedoch, dass sie die Kapazität der gesamten Festplatte zurückgibt, nicht die Größe, die das Verzeichnis tatsächlich einnimmt.
$directory = "/var/log";
$total_space = disk_total_space($directory);
echo "Gesamtscheibenkapazität:$total_space Byte";
Durch Überqueren des Verzeichnisses und das Lesen der Größe jeder Datei mit ADADISIZE () können Sie den tatsächlichen Speicherplatz des Verzeichnisses genauer einschätzen.
$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 "Gesamtscheibengröße:$total_size Byte";
Durch die Kombination von RecursiveRectoryToryIterator mit Recursivederatoriterator können Sie die Größe aller Dateien in einem Verzeichnis und seinem Subdirektor rekursiv erhalten, das für die Deep -Verzeichnisstruktur geeignet ist.
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 "Gesamtscheibengröße:$total_size Byte";
Scandir () kann verwendet werden, um alle Dateinamen im Verzeichnis zu erhalten und Array_Map () und Array_Sum () zu kombinieren, um die Gesamtgröße auf präzise Weise zu berechnen. Diese Methode kann jedoch nicht rekursiv Subdirektorien und für parallele Verzeichnisstatistiken geeignet sein.
$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 "Gesamtscheibengröße:$total_size Byte";
PHP bietet eine Vielzahl von Möglichkeiten zur Berechnung der Verzeichnisscheibengröße mit jeweils anwendbaren Szenarien. Die Auswahl der richtigen Methode kann nicht nur die Ausführungseffizienz verbessern, sondern auch den Code prägnanter und zuverlässiger machen. Entwickler können es flexibel nach ihren eigenen Bedürfnissen verwenden.