space index.php 7-14,disk_free_space()

disk_free_space()

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

返回目录中的可用空间

说明disk_free_space(string$directory):float

给出一个包含有一个目录的字符串,本函数将根据相应的文件系统或磁盘分区返回可用的字节数。

参数$directory文件系统目录或者磁盘分区。Note:

如果指定了文件名而不是文件目录,这个函数的行为将并不统一,会因操作系统和 PHP 版本而异。

返回值

以浮点返回可用的字节数,或者在失败时返回FALSE。

范例

Example #1disk_free_space()例子<?php

// $df 包含根目录下可用的字节数

$df = disk_free_space("/");

//在 Windows 下:

$df_c = disk_free_space("C:");

$df_d = disk_free_space("D:");

?>

注释Note:此函数不能作用于远程文件,被检查的文件必须是可通过服务器的文件系统访问的。

参见Transformation is possible WITHOUT using loops:

$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 . '
';

echo sprintf('%1.2f', $bytes / pow($base,$class)) . ' '. $si_prefix[$class] . '
';

?>Nice, but please be aware of the prefixes.

SI specifies a lower case 'k' as 1'000 prefix.

It doesn't make sense to use an upper case 'K' as binary prefix,

while the decimal Mega (M and following) prefixes in SI are uppercase.

Furthermore, there are REAL binary prefixes since a few years.

Do it the (newest and recommended) "IEC" way:

KB's are calculated decimal; power of 10 (1000 bytes each)

KiB's are calculated binary; power of 2 (1024 bytes each).

The same goes for MB, MiB and so on...

Feel free to read:

http://en.wikipedia.org/wiki/Binary_prefix$si_prefix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' );

you are missing the petabyte after terabyte

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

should look like

'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'Another easy way to convert bytes to human readable sizes would be this:

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");

}

?>

It simply takes the $Bytes and divides it by 1024 bytes untill it's no longer over or equal to 1024, meanwhile it increases the $Index to allocate which suffix belongs to the return (adding 'bytes' to the end to save some space).

You can easily modify it so it's shorter, but I made it so it's more clearer.

Nitrogen.Note that disk_free_space() does an open_basedir check.With respect to Linux filesystems, I'll point out that this function returns the space available in the current volume or mountpoint, not the total physical disk space. That is, this function used on the '/root' volume shows the free space in /root, which is different from '/home', and so on.<?php

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

$o = [

'binary'=> false,

'decimalPlaces'=> 2,

'decimalSeparator'=> '.',

'thausandsSeparator'=> '',

'maxThreshold'=> false, // or thresholds key

'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"

?>On Windows, this also works with distant files, by using their full network path.

For instance, this will give the % of free disk space on the share "dir" from remote host "server" :

$path = "\\\\server\\dir";

echo(floor(100 * disk_free_space($disk) / disk_total_space($disk)));

?>

It can also work with drive letters mapped to a network path in certain cases.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值