注意空檔案!
<?php
// 錯誤
$exp = floor(log($bytes) / log(1024));
// 正確
$exp = $bytes ? floor(log($bytes) / log(1024)) : 0;
?>
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
disk_total_space — 返回檔案系統或磁碟分割的總大小
directory
檔案系統或磁碟分割的目錄。
成功時以浮點數形式返回總位元組數,失敗時返回 false
。
範例 1 disk_total_space() 範例
<?php
// $ds 包含 "/" 上可用的總位元組數
$ds = disk_total_space("/");
// 在 Windows 上:
$ds = disk_total_space("C:");
$ds = disk_total_space("D:");
?>
注意:此函數不適用於遠端檔案,因為要檢查的檔案必須可通過伺服器的檔案系統存取。
注意空檔案!
<?php
// 錯誤
$exp = floor(log($bytes) / log(1024));
// 正確
$exp = $bytes ? floor(log($bytes) / log(1024)) : 0;
?>
一種非迴圈方式,將符號新增到位元組數
<?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))));
}
要尋找檔案/目錄的總大小,您必須區分兩種情況
(僅限於基於 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
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]);}
與此函數搭配使用的好方法是列出可用的磁碟。 在 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:\\');
<?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");
}
?>