當前位置: 首頁> 最新文章列表> PHP獲取指定目錄磁盤大小的四種實用方法

PHP獲取指定目錄磁盤大小的四種實用方法

M66 2025-07-26

PHP實現獲取目錄磁盤總大小的方法

在日常的Web開發中,有時候我們需要獲取某個目錄(包括其子目錄)所佔用的磁盤空間,比如用於配額限制、資源統計或日誌監控等目的。 PHP 提供了一些內置函數,能幫助我們方便地獲取目錄的磁盤總大小。

使用disk_total_space 獲取磁盤總容量

disk_total_space()可以直接獲取磁盤的總容量,但注意它返回的是整個磁盤的容量,而不是目錄實際佔用的大小。

 
$directory = "/var/log";
$total_space = disk_total_space($directory);
echo "磁盤總容量:$total_space 位元組";

使用dir() 和filesize() 累加目錄文件大小

通過遍歷目錄並使用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 位元組";

使用RecursiveIteratorIterator 遞歸統計大小

通過RecursiveDirectoryIteratorRecursiveIteratorIterator結合,可以遞歸地獲取目錄及其子目錄中所有文件的大小,適合深層目錄結構。

 
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_sum() 快速實現

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 位元組";

性能優化建議

  • 推薦使用遞歸迭代器方式,兼顧性能和準確性。
  • 盡量避免使用glob()函數,其在大文件夾中效率不高。
  • 如需頻繁獲取目錄大小,可考慮將結果緩存至數據庫或緩存文件中。

總結

PHP 提供了多種方式來實現目錄磁盤大小的計算,每種方法都有其適用場景。選擇合適的方法不僅可以提高執行效率,還能使代碼更加簡潔可靠。開發者可根據自身需求靈活運用。