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

ファイルシステムのディレクトリあるいはディスクパーティション。

戻り値

総バイト数を float 型で返します。 失敗した場合に false を返します。

例1 disk_total_space() の例

<?php
// $ds は、「/」で利用可能な全体バイト数
$ds = disk_total_space("/");

// Windows の場合:
$ds = disk_total_space("C:");
$ds = disk_total_space("D:");
?>

注意

注意: この関数では、 リモートファイル を 使用することはできません。これは、処理されるファイルがサーバーの ファイルシステムによりアクセスできる必要があるためです。

参考

  • disk_free_space() - ファイルシステムあるいはディスクパーティション上で利用可能な領域を返す

add a note add a note

User Contributed Notes 9 notes

up
8
tularis at php dot net
17 years ago
For a non-looping way to add symbols to a number of bytes:
<?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))));
}
up
7
Viitala
16 years ago
Beware of empty files!

<?php

   
// Wrong
   
$exp = floor(log($bytes) / log(1024));

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

?>
up
3
andudi at gmx dot ch
22 years ago
To find the total size of a file/directory you have to differ two situations:
(on Linux/Unix based systems only!?)

you are interested:
1) in the total size of the files in the dir/subdirs
2) what place on the disk your dir/subdirs/files uses

- 1) and 2) normaly differs, depending on the size of the inodes
- mostly 2) is greater than 1) (in the order of any kB)
- filesize($file) gives 1)
- "du -ab $file" gives 2)

so you have to choose your situation!

on my server I have no rights to use "exec du" in the case of 2), so I use:
  $s = stat($file);
  $size = $s[11]*$s[12]/8);
whitch is counting the inodes [12] times the size of them in Bits [11]

hopes this helps to count the used disk place in a right way... :-)

                     Andreas Dick
up
2
stierguy1 at msn dot com
17 years ago
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]);}
up
0
JulieC
17 years ago
"filesystem or disk partition" does not equal "directory" for Windows.  Thanks.
up
-1
cotact[at]covac-software[dot]com
14 years ago
Something that might go well with this function is the ability to list available disks. On Windows, here's the relevant code:

<?php
/**
* Finds a list of disk drives on the server.
* @return array The array velues are the existing disks.
*/
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;
    }
}
?>

EXAMPLE OF USE:
<?php print_r(get_disks()); ?>

EXAMPLE RESULT:
Array
(
    [1] => A:\
    [2] => C:\
    [3] => D:\
    [4] => E:\
    [5] => F:\
    [6] => G:\
    [7] => H:\
    [8] => I:\
    [9] => M:\
    [10] => X:\
    [11] => Z:\
)

Warning: This also finds empty disk drives (eg; CD or SMD drives or the more common floppy drive).

Warning2: If you want to find space usage using the info from my function, prepend the disk function with the "@", eg:

$free=@disk_free_space('A:\\');
up
-2
ryan at designedbyrayn dot co dot uk
10 years ago
<?php

//This is  a more readable way of viewing the returned float

// $Bytes contains the total number of bytes on "/"
$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");
}
?>
up
-4
nikolayku at tut dot by
17 years ago
Very simple function that convert bytes to kilobytes, megabytes ...

function ConvertBytes($number)
{
    $len = strlen($number);
    if($len < 4)
    {
        return sprintf("%d b", $number);
    }
    if($len >= 4 && $len <=6)
    {
        return sprintf("%0.2f Kb", $number/1024);
    }
    if($len >= 7 && $len <=9)
    {
        return sprintf("%0.2f Mb", $number/1024/1024);
    }
   
    return sprintf("%0.2f Gb", $number/1024/1024/1024);
                           
}
up
-8
khumlo at gmail dot com
14 years ago
PHP 6 has already come to the market but still there are no standard function that can help retrieve directory size as it has to calculate disk space such as disk_total_space. Although we can use system level call such as exec() and system(), it is too risky to enable these function. So we look for an alternate method so as to calculate directory size.

Sol: retrieving directory size using php

<?php

function get_dir_size($dir_name){
       
$dir_size =0;
           if (
is_dir($dir_name)) {
               if (
$dh = opendir($dir_name)) {
                  while ((
$file = readdir($dh)) !== false) {
                        if(
$file !=.&& $file != ..){
                              if(
is_file($dir_name./.$file)){
                                  
$dir_size += filesize($dir_name./.$file);
                             }
                            
/* check for any new directory inside this directory */
                            
if(is_dir($dir_name./.$file)){
                               
$dir_size +=  get_dir_size($dir_name./.$file);
                              }
                           }
                     }
             }
       }
closedir($dh);
return
$dir_size;
}

$dir_name = “directory name here”;
/* 1048576 bytes == 1MB */
$total_size= round((get_dir_size($dir_name) / 1048576),2) ;
print
“Directory $dir_name size : $total_size MB”;
?>

Depending upon the size format you want to achieve, divide directory size by 1024 or 1024 * 1024 or 1024 * 1024 * 1024 for KB or MB or GB respectively.
To Top