downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

diskfreespace> <disk_free_space
[edit] Last updated: Fri, 10 Feb 2012

view this page in

disk_total_space

(PHP 4 >= 4.1.0, PHP 5)

disk_total_spaceZwraca całkowity rozmiar systemu plików lub partycji dysku

Opis

float disk_total_space ( string $katalog )

Podając łańcuch zawierający katalog, funkcja ta zwróci całkowitą liczbę bajtów w odpowiadającym mu systemie plików lub partycji dysku.

Parametry

katalog

Katalog w systemie plików lub partycji dysku.

Zwracane wartości

Zwraca całkowitą liczbę bajtów jako liczbę zmiennoprzecinkową lub FALSE w przypadku niepowodzenia.

Przykłady

Przykład #1 Przykład disk_total_space()

<?php
// $ds zawiera całkowita liczbę dostepnych bajtów on "/"
$ds disk_total_space("/");

// Pod Windows:
$ds disk_total_space("C:");
$ds disk_total_space("D:");
?>

Notatki

Informacja: Ta funkcja nie będzie działać na zdalnych plikach, ponieważ przetwarzany plik musi być dostępny w systemie plików serwera.

Zobacz też:

  • disk_free_space() - Zwraca ilość wolnego miejsca w systemie plików lub partycji dysku



diskfreespace> <disk_free_space
[edit] Last updated: Fri, 10 Feb 2012
 
add a note add a note User Contributed Notes disk_total_space
khumlo at gmail dot com 23-May-2010 01:36
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.
cotact[at]covac-software[dot]com 25-Dec-2009 06:52
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:\\');
Viitala 04-Feb-2008 01:04
Beware of empty files!

<?php

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

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

?>
tularis at php dot net 25-Jun-2007 03:13
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))));
}
stierguy1 at msn dot com 24-Jun-2007 07:03
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]);}
nikolayku at tut dot by 17-Apr-2007 01:16
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);
                           
}
Mat 05-Apr-2007 03:46
JulieC:

I think you may have misunderstood - given a directory, this function tells you how big the disk paritition is that the directory exists on.

So disk_total_space("C:\Windows\") will tell you how big drive C is.

It is not suggesting that a directory is a disk partition.
JulieC 30-Jan-2007 07:11
"filesystem or disk partition" does not equal "directory" for Windows.  Thanks.
martijn at mo dot com 13-Jan-2007 02:41
This works for me (on a UNIX server):

<?php
function du( $dir )
{
   
$res = `du -sk $dir`;             // Unix command
   
preg_match( '/\d+/', $res, $KB ); // Parse result
   
$MB = round( $KB[0] / 1024, 1 );  // From kilobytes to megabytes
   
return $MB;
}

$dirSize = du('/path/to/dir/');
?>
shalless at rubix dot net dot au 16-Jul-2003 07:36
My first contribution. Trouble is the sum of the byte sizes of the files in your directories is not equal to the amount of disk space consumed, as andudi points out. A 1-byte file occupies 4096 bytes of disk space if the block size is 4096. Couldn't understand why andudi did $s["blksize"]*$s["blocks"]/8. Could only be because $s["blocks"] counts the number of 512-byte disk blocks not the number of $s["blksize"] blocks, so it may as well just be $s["blocks"]*512. Furthermore none of the dirspace suggestions allow for the fact that directories are also files and that they also consume disk space. The following code dskspace addresses all these issues and can also be used to return the disk space consumed by a single non-directory file. It will return much larger numbers than you would have been seeing with any of the other suggestions but I think they are much more realistic:

<?php
function dskspace($dir)
{
  
$s = stat($dir);
  
$space = $s["blocks"]*512;
   if (
is_dir($dir))
   {
    
$dh = opendir($dir);
     while ((
$file = readdir($dh)) !== false)
       if (
$file != "." and $file != "..")
        
$space += dskspace($dir."/".$file);
    
closedir($dh);
   }
   return
$space;
}
?>
andudi at gmx dot ch 11-Jun-2002 03:15
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

 
show source | credits | stats | sitemap | contact | advertising | mirror sites