ZetCode

PHP disk_total_space 函数

最后修改于 2025 年 4 月 3 日

PHP 的 disk_total_space 函数返回文件系统或磁盘分区的总大小。 它对于存储监控和管理非常有用。

基本定义

disk_total_space 函数以字节为单位返回指定目录所在文件系统的总空间。它接受一个参数。

语法:disk_total_space(string $directory): float|false。 返回总字节数(float 类型)或在失败时返回 false。 需要文件系统权限。

基本的 disk_total_space 示例

这展示了 disk_total_space 的最简单用法,以获取磁盘大小。

basic_disk_space.php
<?php

declare(strict_types=1);

$directory = "/";
$totalSpace = disk_total_space($directory);

echo "Total space: " . $totalSpace . " bytes";

这以字节为单位返回根文件系统的总空间。 该函数需要对指定目录路径的读取权限。

将字节转换为人类可读的格式

将磁盘空间转换为更大的单位后,通常更具可读性。

human_readable.php
<?php

declare(strict_types=1);

function formatBytes(float $bytes, int $precision = 2): string {
    $units = ['B', 'KB', 'MB', 'GB', 'TB'];
    $bytes = max($bytes, 0);
    $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
    $pow = min($pow, count($units) - 1);
    $bytes /= (1 << (10 * $pow));
    return round($bytes, $precision) . ' ' . $units[$pow];
}

$space = disk_total_space("/");
echo "Total space: " . formatBytes($space);

这将原始字节转换为人类可读的格式,如 GB 或 TB。 辅助函数使用可配置的精度处理转换。

检查多个磁盘

您可以使用一个脚本检查多个已挂载文件系统的空间。

multiple_disks.php
<?php

declare(strict_types=1);

$disks = [
    "/" => "Root",
    "/home" => "Home",
    "/mnt/data" => "Data Storage"
];

foreach ($disks as $path => $name) {
    $space = disk_total_space($path);
    if ($space !== false) {
        echo "$name: $space bytes\n";
    } else {
        echo "Failed to read $name disk\n";
    }
}

这会检查多个已挂载的文件系统并处理潜在的故障。 每个磁盘都标有标签,以便在输出中清晰显示。

计算可用空间百分比

disk_free_space 结合使用以计算使用率百分比。

free_space_percent.php
<?php

declare(strict_types=1);

$directory = "/";
$total = disk_total_space($directory);
$free = disk_free_space($directory);

if ($total !== false && $free !== false) {
    $used = $total - $free;
    $percentUsed = ($used / $total) * 100;
    echo "Disk usage: " . round($percentUsed, 2) . "%";
} else {
    echo "Unable to determine disk usage";
}

这会计算已用磁盘空间的百分比。 两个函数都必须成功才能使计算生效。 包括错误处理。

Windows 驱动器示例

当格式正确时,该函数适用于 Windows 驱动器号。

windows_drive.php
<?php

declare(strict_types=1);

$drive = "C:\\";
$space = disk_total_space($drive);

if ($space !== false) {
    echo "Drive C: total space: " . $space . " bytes";
} else {
    echo "Unable to read drive C:";
}

在 Windows 上,使用反斜杠并包含尾部斜杠。 该函数以字节为单位返回指定驱动器的总容量。

边缘情况

disk_total_space 对某些输入具有特定的行为。

edge_cases.php
<?php

declare(strict_types=1);

// Non-existent path
$result1 = disk_total_space("/nonexistent/path");

// No permissions
$result2 = disk_total_space("/root");

var_dump($result1); // bool(false)
var_dump($result2); // bool(false) if no permissions

对于无效路径或权限不足时,该函数返回 false。 在计算中使用结果之前,请务必检查返回值。

最佳实践

来源

PHP disk_total_space 文档

本教程介绍了 PHP 的 disk_total_space 函数,并提供了实际示例,展示了在不同场景下进行磁盘空间监控的方法。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 到目前为止,我已撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出 所有 PHP 文件系统函数