ZetCode

PHP disk_free_space 函数

最后修改于 2025 年 4 月 3 日

PHP disk_free_space 函数返回文件系统或磁盘分区的可用空间。它对于监控存储容量很有用。

基本定义

disk_free_space 函数返回相应文件系统或磁盘分区上可用的字节数。它接受一个参数。

语法:disk_free_space(string $directory): float|false。该函数在失败时返回 false。相关函数是 disk_total_space。

disk_free_space 基本示例

这展示了 disk_free_space 检查空间的简单用法。

basic_disk_free_space.php
<?php

declare(strict_types=1);

$freeSpace = disk_free_space("/");

echo "Free space on root: " . $freeSpace . " bytes";

这检查根文件系统上的可用空间。结果以字节为单位。您可能需要将其格式化为人类可读的输出。

格式化磁盘空间

此示例将原始字节转换为人类可读的格式。

format_disk_space.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];
}

$free = disk_free_space("/");
echo "Free space: " . formatBytes($free);

formatBytes 函数将字节转换为适当的单位。这使得输出更容易阅读和理解。

检查特定目录

您可以检查任何目录的空间,而不仅仅是根文件系统。

specific_directory.php
<?php

declare(strict_types=1);

$directory = "/var/www";
$freeSpace = disk_free_space($directory);

if ($freeSpace === false) {
    echo "Could not check disk space for $directory";
} else {
    echo "Free space in $directory: " . $freeSpace . " bytes";
}

这检查 /var/www 目录的空间。请注意处理目录可能不存在或无法访问的错误。

Windows 驱动器示例

该函数也适用于 Windows 驱动器盘符。

windows_drive.php
<?php

declare(strict_types=1);

$drive = "C:";
$freeSpace = disk_free_space($drive);

echo "Free space on $drive: " . number_format($freeSpace) . " bytes";

在 Windows 系统上,您可以通过指定驱动器盘符来检查驱动器空间。number_format 函数使输出更具可读性。

比较可用空间和总空间

此示例显示可用空间和总空间以供比较。

compare_space.php
<?php

declare(strict_types=1);

function formatBytes(float $bytes): string {
    if ($bytes >= 1073741824) {
        return number_format($bytes / 1073741824, 2) . ' GB';
    } elseif ($bytes >= 1048576) {
        return number_format($bytes / 1048576, 2) . ' MB';
    } elseif ($bytes >= 1024) {
        return number_format($bytes / 1024, 2) . ' KB';
    }
    
    return $bytes . ' bytes';
}

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

echo "Total space: " . formatBytes($total) . "\n";
echo "Free space: " . formatBytes($free) . "\n";
echo "Used space: " . formatBytes($total - $free);

这通过显示总空间、可用空间和已用空间来提供磁盘使用的完整图片。自定义格式化函数处理不同的尺寸单位。

边缘情况

disk_free_space 有一些重要的边缘情况需要考虑。

edge_cases.php
<?php

declare(strict_types=1);

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

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

var_dump($result1); // bool(false)
var_dump($result2); // bool(false) or warning

当函数无法确定可用空间时,它将返回 false。这发生在不存在的路径或权限不足时。始终检查返回值。

最佳实践

来源

PHP disk_free_space 文档

本教程介绍了 PHP disk_free_space 函数,并提供了实用示例,展示了其在不同场景中的用法。

作者

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

列出 所有 PHP 文件系统函数