disk_free_space

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

disk_free_space返回文件系统或磁盘分区上的可用空间

说明

disk_free_space(string $directory): float|false

给定一个包含目录的字符串,此函数将返回对应文件系统或磁盘分区上可用的字节数。

参数

directory

文件系统或磁盘分区的目录。

注意:

如果给定的是文件名而不是目录,则函数的行为是不确定的,并且可能在不同的操作系统和 PHP 版本之间有所不同。

返回值

如果成功,则返回可用字节数,以浮点数表示;如果失败,则返回 false

范例

范例 #1 disk_free_space() 范例

<?php
// $df 包含“/”上可用的字节数
$df = disk_free_space("/");

// 在 Windows 上:
$df_c = disk_free_space("C:");
$df_d = disk_free_space("D:");
?>

注释

注意: 此函数将无法在 远程文件 上使用,因为要检查的文件必须通过服务器的文件系统访问。

参见

添加注释

用户贡献注释 9 个注释

65
wiede at gmx dot net
13 年前
转换无需使用循环

<?php
$bytes
= disk_free_space(".");
$si_prefix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' );
$base = 1024;
$class = min((int)log($bytes , $base) , count($si_prefix) - 1);
echo
$bytes . '<br />';
echo
sprintf('%1.2f' , $bytes / pow($base,$class)) . ' ' . $si_prefix[$class] . '<br />';
?>
33
匿名
10 年前
$si_prefix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' );

你漏了太字节之后的拍字节

'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB'

应该像

'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'
17
sam
15 年前
不错,但请注意前缀。

SI 指定小写 'k' 为 1'000 前缀。
将大写 'K' 用作二进制前缀没有意义,
而 SI 中的十进制兆 (M 及其后缀) 前缀是大写的。
此外,几年来一直存在真实的二进制前缀。

以 (最新且推荐的) "IEC" 方式执行

KB 是按十进制计算的;10 的幂 (每个 1000 字节)
KiB 是按二进制计算的;2 的幂 (每个 1024 字节)。
兆字节 (MB)、兆字节 (MiB) 等等也是如此...

请随意阅读
http://en.wikipedia.org/wiki/Binary_prefix
10
Nitrogen
17 年前
另一种将字节转换为人类可读大小的简单方法是

<?php
function HumanSize($Bytes)
{
$Type=array("", "kilo", "mega", "giga", "tera", "peta", "exa", "zetta", "yotta");
$Index=0;
while(
$Bytes>=1024)
{
$Bytes/=1024;
$Index++;
}
return(
"".$Bytes." ".$Type[$Index]."bytes");
}
?>

它只是获取 $Bytes 并将其除以 1024 字节,直到它不再大于或等于 1024,同时它增加 $Index 以分配哪个后缀属于返回值(在末尾添加 'bytes' 以节省一些空间)。
你可以很容易地修改它使其更短,但我让它更清晰。

Nitrogen。
8
root at mantoru dot de
16 年前
注意 disk_free_space() 会执行 open_basedir 检查。
0
Jawira Portugal
2 年前
这尚未记录。
如果 $directory 无效,则 disk_free_space() 将返回 false 并还会抛出警告:"disk_free_space(): No such file or directory"
-1
somedude
7 年前
关于 Linux 文件系统,我将指出此函数返回当前卷或挂载点上的可用空间,而不是物理磁盘的总空间。也就是说,在 '/root' 卷上使用此函数将显示 /root 中的可用空间,这与 '/home' 不同,依此类推。
-12
Matthieu S
7 年前
在 Windows 上,这也可以通过使用其完整的网络路径来处理远程文件。

例如,这将给出从远程主机 "server" 上的共享 "dir" 的可用磁盘空间百分比
<?php
$path
= "\\\\server\\dir";
echo(
floor(100 * disk_free_space($disk) / disk_total_space($disk)));
?>

在某些情况下,它也可以使用映射到网络路径的驱动器号。
-12
pavel at sunhater dot com
5 年前
<?php

function size($size, array $options=null) {

$o = [
'binary' => false,
'decimalPlaces' => 2,
'decimalSeparator' => '.',
'thausandsSeparator' => '',
'maxThreshold' => false, // 或阈值键
'sufix' => [
'thresholds' => ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'],
'decimal' => ' {threshold}B',
'binary' => ' {threshold}iB'
]
];

if (
$options !== null)
$o = array_replace_recursive($o, $options);

$count = count($o['sufix']['thresholds']);
$pow = $o['binary'] ? 1024 : 1000;

for (
$i = 0; $i < $count; $i++)

if ((
$size < pow($pow, $i + 1)) ||
(
$i === $o['maxThreshold']) ||
(
$i === ($count - 1))
)
return

number_format(
$size / pow($pow, $i),
$o['decimalPlaces'],
$o['decimalSeparator'],
$o['thausandsSeparator']
) .

str_replace(
'{threshold}',
$o['sufix']['thresholds'][$i],
$o['sufix'][$o['binary'] ? 'binary' : 'decimal']
);
}

var_dump(size(disk_free_space('/')));
// string(8) "14.63 GB"
var_dump(size(disk_free_space('/'), ['binary' => true]));
// string(9) "13.63 GiB"
var_dump(size(disk_free_space('/'), ['maxThreshold' => 2]));
// string(11) "14631.90 MB"
var_dump(size(disk_free_space('/'), ['binary' => true, 'maxThreshold' => 2]));
// string(12) "13954.07 MiB"

?>
To Top