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

search for in the

disk_total_space> <dirname
[edit] Last updated: Fri, 18 Sep 2009

view this page in

disk_free_space

(PHP 4 >= 4.1.0, PHP 5)

disk_free_spaceВръща свободното пространство в директория

Описание

float disk_free_space ( string $directory )

При подаване на низ, съдържащ директория, тази функция връща количеството на свободните байтове, които са налични за съответната файлова система или дял от диска.

Параметри

directory

Директория от файловата система или дисков дял.

Забележка: Ако подадете файл вместо директория поведението на функцията е непредсказуемо и може да се различава между различните операционни системи и PHP версии.

Връщани стойности

Връща броя на свободните байтове като float.

Примери

Example #1 disk_free_space() пример

<?php
// $df съдържа броя на байтове налични в "/"
$df disk_free_space("/");

// On Windows:
disk_free_space("C:");
disk_free_space("D:");
?>

Бележки

Забележка: Тази функция няма да работи за отдалечени файлове, тъй като разглеждания файл трябва да бъде достъпен през файловата система на сървъра.

Вж. също



disk_total_space> <dirname
[edit] Last updated: Fri, 18 Sep 2009
 
add a note add a note User Contributed Notes disk_free_space
crrodriguez at opensuse dot org 20-Dec-2011 01:54
Note that you should not rely on this function on linux BTRFS filesystems.read the FAQ for more info

https://btrfs.wiki.kernel.org/articles/f/a/q/FAQ_1fe9.htm
wiede at gmx dot net 11-Apr-2011 05:36
Transformation is possible WITHOUT using loops:

<?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 />';
?>
sam 17-Dec-2008 01:52
Nice, but please be aware of the prefixes.

SI specifies a lower case 'k' as 1'000 prefix.
It doesn't make sense to use an upper case 'K' as binary prefix,
while the decimal Mega (M and following) prefixes in SI are uppercase.
Furthermore, there are REAL binary prefixes since a few years.

Do it the (newest and recommended) "IEC" way:

KB's are calculated decimal; power of 10 (1000 bytes each)
KiB's are calculated binary; power of 2 (1024 bytes each).
The same goes for MB, MiB and so on...

Feel free to read:
http://en.wikipedia.org/wiki/Binary_prefix
rostvertol dot mil at gmail dot com 18-Feb-2008 11:27
A cleaner and more efficient way of making human readable file sizes:

<?php
function decodeSize( $bytes )
{
   
$types = array( 'B', 'KB', 'MB', 'GB', 'TB' );
    for(
$i = 0; $bytes >= 1024 && $i < ( count( $types ) -1 ); $bytes /= 1024, $i++ );
    return(
round( $bytes, 2 ) . " " . $types[$i] );
}
?>
root at mantoru dot de 06-Dec-2007 08:25
Note that disk_free_space() does an open_basedir check.
Nitrogen 10-Jan-2007 05:50
Another easy way to convert bytes to human readable sizes would be this:

<?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");
}
?>

It simply takes the $Bytes and divides it by 1024 bytes untill it's no longer over or equal to 1024, meanwhile it increases the $Index to allocate which suffix belongs to the return (adding 'bytes' to the end to save some space).
You can easily modify it so it's shorter, but I made it so it's more clearer.

Nitrogen.
mixar at yandex dot ru 04-Dec-2006 03:33
This the right function is:

function formatSize($size){
    switch (true){
    case ($size > 1099511627776):
        $size /= 1099511627776;
        $suffix = 'TB';
    break;
    case ($size > 1073741824):
        $size /= 1073741824;
        $suffix = 'GB';
    break;
    case ($size > 1048576):
        $size /= 1048576;
        $suffix = 'MB';   
    break;
    case ($size > 1024):
        $size /= 1024;
        $suffix = 'KB';
        break;
    default:
        $suffix = 'B';
    }
    return round($size, 2).$suffix;
}
djneoform at gmail dot com 12-Jul-2006 07:13
List all drives, free space, total space and percentage free.

<?
    for ($i = 67; $i <= 90; $i++)
    {
        $drive = chr($i);
        if (is_dir($drive.':'))
        {
            $freespace             = disk_free_space($drive.':');
            $total_space         = disk_total_space($drive.':');
            $percentage_free     = $freespace ? round($freespace / $total_space, 2) * 100 : 0;
            echo $drive.': '.to_readble_size($freespace).' / '.to_readble_size($total_space).' ['.$percentage_free.'%]<br />';
        }
    }

    function to_readble_size($size)
    {
        switch (true)
        {
            case ($size > 1000000000000):
                $size /= 1000000000000;
                $suffix = 'TB';
                break;
            case ($size > 1000000000):
                $size /= 1000000000;
                $suffix = 'GB';
                break;
            case ($size > 1000000):
                $size /= 1000000;
                $suffix = 'MB';   
                break;
            case ($size > 1000):
                $size /= 1000;
                $suffix = 'KB';
                break;
            default:
                $suffix = 'B';
        }
        return round($size, 2).$suffix;
    }
?>
Ashraf M Kaabi 01-Mar-2005 08:38
and also you can know the used space , in this
example :
<?
function disk_used_space($drive)
{
    return disk_total_space("$drive:") - disk_free_space("$drive:");
}

echo disk_used_space('C');
?>

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