毎日のWeb開発では、クォータの制限、リソース統計、ログ監視などの目的など、ディレクトリ(サブディレクトリを含む)で占有されているディスクスペースを取得する必要がある場合があります。 PHPは、ディレクトリのディスクサイズを簡単に取得するのに役立ついくつかの組み込み関数を提供します。
disk_total_space()は、ディスクの総容量を直接取得できますが、ディレクトリが実際に占有するサイズではなく、ディスク全体の容量を返すことに注意してください。
$directory = "/var/log";
$total_space = disk_total_space($directory);
echo "総ディスク容量:$total_space バイト";
ディレクトリを通過し、 filesize()を使用して各ファイルのサイズを読み取ることにより、実際のディスクスペースをより正確に取得できます。
$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 "総ディスクサイズ:$total_size バイト";
RecursivedirectoryiteratorとRecuriveTeratoriteratorを組み合わせることにより、ディレクトリ内のすべてのファイルのサイズを再帰的に取得できます。これは、ディープディレクトリ構造に適しています。
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 "総ディスクサイズ:$total_size バイト";
Scandir()を使用してディレクトリ内のすべてのファイル名を取得し、 array_map()とarray_sum()を組み合わせて、簡潔な方法で合計サイズを計算できます。ただし、この方法は再帰的にサブディレクトリにすることはできず、並列ディレクトリ統計に適しています。
$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 "総ディスクサイズ:$total_size バイト";
PHPは、ディレクトリディスクサイズを計算するさまざまな方法を提供し、それぞれに適用可能なシナリオがあります。適切な方法を選択すると、実行効率を改善するだけでなく、コードをより簡潔で信頼性を高めることもできます。開発者は、自分のニーズに応じて柔軟に使用できます。