PHP Conference Japan 2024

disk_free_space

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

disk_free_space傳回檔案系統或磁碟分割區上的可用空間

說明

disk_free_space(字串 $directory): 浮點數|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:");
?>

注意事項

注意此函式不適用於遠端檔案,因為要檢查的檔案必須透過伺服器的檔案系統存取。

參見

新增筆記

使用者提供的筆記 7 則筆記

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 />';
?>
匿名使用者
10 年前
$si_prefix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' );

您在 TB 後面漏掉了 PB

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

應該如下所示

'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'
sam
15 年前
不錯,但請注意字首。

國際單位制 (SI) 指定小寫的「k」作為 1000 的字首。
使用大寫的「K」作為二進位字首並不合理,
而國際單位制中十進位的百萬 (M 及之後) 字首都使用大寫。
此外,幾年前開始就有真正的二進位字首了。

請使用(最新且推薦的)「IEC」標準

KB 以十進位計算;10 的次方(每 KB 為 1000 位元組)
KiB 以二進位計算;2 的次方(每 KiB 為 1024 位元組)。
MB、MiB 等亦同…

歡迎參考閱讀
http://en.wikipedia.org/wiki/Binary_prefix
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.
root at mantoru dot de
16 年前
請注意,disk_free_space() 會執行 open_basedir 檢查。
Jawira Portugal
2 年前
這一點尚未記錄。
如果 $directory 無效,則 disk_free_space() 將返回 false 並且還會拋出警告:「disk_free_space(): No such file or directory」(disk_free_space(): 沒有此類檔案或目錄)
somedude
8 年前
關於 Linux 檔案系統,我要指出的是,這個函式返回的是目前磁碟區或掛載點中的可用空間,而不是實體磁碟的總空間。也就是說,在「/root」磁碟區上使用此函式會顯示 /root 中的可用空間,這與「/home」等不同。
To Top