PHP Conference Japan 2024

disk_total_space

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

disk_total_space返回文件系统或磁盘分区的总大小

描述

disk_total_space(字符串 $directory): 浮点数|false

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

参数

directory

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

返回值

返回总字节数作为浮点数,或在失败时返回 false

示例

示例 #1 disk_total_space() 示例

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

// 在 Windows 上:
$ds = disk_total_space("C:");
$ds = disk_total_space("D:");
?>

备注

注意: 此函数不适用于 远程文件,因为要检查的文件必须通过服务器的文件系统访问。

参见

添加备注

用户贡献的笔记 7 条笔记

9
Viitala
16 年前
注意空文件!

<?php

// 错误
$exp = floor(log($bytes) / log(1024));

// 正确
$exp = $bytes ? floor(log($bytes) / log(1024)) : 0;

?>
8
tularis at php dot net
17 年前
对于一种非循环的方式来为字节数添加符号
<?php
function getSymbolByQuantity($bytes) {
$symbols = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB');
$exp = floor(log($bytes)/log(1024));

return
sprintf('%.2f '.$symbol[$exp], ($bytes/pow(1024, floor($exp))));
}
3
andudi at gmx dot ch
22 年前
要查找文件/目录的总大小,您必须区分两种情况
(仅在基于 Linux/Unix 的系统上!?)

您感兴趣的是
1) 目录/子目录中文件的总大小
2) 您的目录/子目录/文件使用了多少磁盘空间

- 1) 和 2) 通常不同,具体取决于 inode 的大小
- 2) 通常大于 1)(按任何 kB 顺序)
- filesize($file) 给出 1)
- “du -ab $file” 给出 2)

所以您必须选择您的情况!

在我的服务器上,我没有权限在 2) 的情况下使用“exec du”,所以我使用
$s = stat($file);
$size = $s[11]*$s[12]/8);
它计算 inode [12] 乘以它们的大小(以位计)[11]

希望这有助于以正确的方式计算使用的磁盘空间... :-)

Andreas Dick
2
JulieC
17 年前
“文件系统或磁盘分区”不等于 Windows 的“目录”。谢谢。
2
stierguy1 at msn dot com
17 年前
function roundsize($size){
$i=0;
$iec = array("B", "Kb", "Mb", "Gb", "Tb");
while (($size/1024)>1) {
$size=$size/1024;
$i++;}
return(round($size,1)." ".$iec[$i]);}
0
cotact[at]covac-software[dot]com
14 年前
与此函数配合使用的一个好方法可能是列出可用的磁盘。在 Windows 上,以下是相关的代码

<?php
/**
* 查找服务器上的磁盘驱动器列表。
* @return array 数组值是现有的磁盘。
*/
function get_disks(){
if(
php_uname('s')=='Windows NT'){
// windows
$disks=`fsutil fsinfo drives`;
$disks=str_word_count($disks,1);
if(
$disks[0]!='Drives')return '';
unset(
$disks[0]);
foreach(
$disks as $key=>$disk)$disks[$key]=$disk.':\\';
return
$disks;
}else{
// unix
$data=`mount`;
$data=explode(' ',$data);
$disks=array();
foreach(
$data as $token)if(substr($token,0,5)=='/dev/')$disks[]=$token;
return
$disks;
}
}
?>

使用示例
<?php print_r(get_disks()); ?>

示例结果
数组
(
[1] => A:\
[2] => C:\
[3] => D:\
[4] => E:\
[5] => F:\
[6] => G:\
[7] => H:\
[8] => I:\
[9] => M:\
[10] => X:\
[11] => Z:\
)

警告:这也会找到空磁盘驱动器(例如:CD 或 SMD 驱动器或更常见的软盘驱动器)。

警告 2:如果您想使用我的函数中的信息查找空间使用情况,请在磁盘函数前加上“@”,例如

$free=@disk_free_space('A:\\');
-3
ryan at designedbyrayn dot co dot uk
10 年前
<?php

// 这是查看返回浮点数的更易读的方式

// $Bytes 包含 "/" 上的字节总数
$Bytes = disk_total_space("/");

function dataSize($Bytes)
{
$Type=array("", "kilo", "mega", "giga", "tera");
$counter=0;
while(
$Bytes>=1024)
{
$Bytes/=1024;
$counter++;
}
return(
"".$Bytes." ".$Type[$counter]."bytes");
}
?>
To Top