PHP Conference Japan 2024

disk_total_space

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

disk_total_space返回檔案系統或磁碟分割的總大小

描述

disk_total_space(string $directory): float|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