Как посчитать размер директории на PHP?

Как узнать на php размер директории?

Нашел отличное решение:
function dirsize($url=''){
        if(isset($_COOKIE['hdd_value'])){return false;}
        $url = (strlen($url) < 1)?"./":$url."/";
        $d = dir($url);
        $N = 0;
        $S = 0;
        while($dir=$d->read()){
            if($dir != "." && $dir != ".."){
                if(filetype($url.$dir) == "file"){
                    $N++;
                    $S += filesize($url.$dir);
                }
            }
        }
        $d->close();

        $size = intval(intval($S/1024)/1024);

        $sql = SQL::getInstance();

        $arr = array(
            'value'  => $size
        );
        $sql->update($arr,'hosting');
        $sql->add('name','hdd_used');
        $sql->query();

        setcookie('hdd_value',true,intval(time()+123200),'/admin');
    }
  • Вопрос задан
  • 3593 просмотра
Решения вопроса 1
alexclear
@alexclear
A cat
<?
    $f = './path/directory';
    $io = popen ( '/usr/bin/du -sk ' . $f, 'r' );
    $size = fgets ( $io, 4096);
    $size = substr ( $size, 0, strpos ( $size, "\t" ) );
    pclose ( $io );
    echo 'Directory: ' . $f . ' => Size: ' . $size;
?>


Это для Unix-хоста, размер будет в килобайтах.

Вариант для win, честно украденный мной в сети (как и предыдущий, только предыдущий я проверил, а этот мне проверить негде):

<?
    $f = 'f:/www/docs';
    $obj = new COM ( 'scripting.filesystemobject' );
    if ( is_object ( $obj ) )
    {
        $ref = $obj->getfolder ( $f );
        echo 'Directory: ' . $f . ' => Size: ' . $ref->size;
        $obj = null;
    }
    else
    {
        echo 'can not create object';
    }
?>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы