如何在PHP中获取目录大小 [英] How to get directory size in PHP

查看:107
本文介绍了如何在PHP中获取目录大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 函数foldersize($ path){
$ total_size = 0;
$ files = scandir($ path);
$ b $ foreach($ files as $ t){
if(is_dir(rtrim($ path,'/')。'/'。$ t)){
if( $ t<>。&&& $ t<>..){
$ size = foldersize(rtrim($ path,'/')。'/'。$ t);

$ total_size + = $ size;

} else {
$ size = filesize(rtrim($ path,'/')。'/'。$ t);
$ total_size + = $ size;
}
}
return $ total_size;
}

函数format_size($ size){
$ mod = 1024;
$ units = explode('','B KB MB GB TB PB');
for($ i = 0; $ size> $ mod; $ i ++){
$ size / = $ mod;
}

传回($ size,2)。 ''。 $单元[$ i]于;
}

$ SIZE_LIMIT = 5368709120; // 5 GB

$ sql =select * from users order by id;
$ result = mysql_query($ sql);
$ b $ while($ row = mysql_fetch_array($ result)){
$ disk_used = foldersize(C:/ xampp / htdocs / freehosting /\".$ row ['name']);

$ disk_remaining = $ SIZE_LIMIT - $ disk_used;
打印姓名:。 $ row ['name']。 <峰; br>;

print'diskspace used:'。 format_size($ disk_used)。 <峰; br>;
打印'diskspace left:'。 format_size($ disk_remaining)。 <峰; br>< HR>;
}

php的disk_total_space



任何想法为什么处理器使用率太高或100%,直到脚本执行完成?可以做任何事情来优化它吗?还是有其他的方法可以检查文件夹里面的文件夹和文件夹的大小? 解决方案

以下是其他解决方案在其他地方提供

如果在Windows主机上:

 < 
$ f ='f:/ www / docs';
$ obj = new COM('scripting.filesystemobject');
if(is_object($ obj))
{
$ ref = $ obj-> getfolder($ f);
echo'目录:'。 $ f。 '=>大小:'。 $ REF->大小;
$ obj = null;
}
else
{
echo'无法创建对象';
}
?>

否则,如果在Linux主机上:

 < ;? 
$ 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'目录:'。 $ f。 '=>大小:'。 $大小;
?>


function foldersize($path) {
  $total_size = 0;
  $files = scandir($path);

  foreach($files as $t) {
    if (is_dir(rtrim($path, '/') . '/' . $t)) {
      if ($t<>"." && $t<>"..") {
          $size = foldersize(rtrim($path, '/') . '/' . $t);

          $total_size += $size;
      }
    } else {
      $size = filesize(rtrim($path, '/') . '/' . $t);
      $total_size += $size;
    }
  }
  return $total_size;
}

function format_size($size) {
  $mod = 1024;
  $units = explode(' ','B KB MB GB TB PB');
  for ($i = 0; $size > $mod; $i++) {
    $size /= $mod;
  }

  return round($size, 2) . ' ' . $units[$i];
}

$SIZE_LIMIT = 5368709120; // 5 GB

$sql="select * from users order by id";
$result=mysql_query($sql);

while($row=mysql_fetch_array($result)) {
  $disk_used = foldersize("C:/xampp/htdocs/freehosting/".$row['name']);

  $disk_remaining = $SIZE_LIMIT - $disk_used;
  print 'Name: ' . $row['name'] . '<br>';

  print 'diskspace used: ' . format_size($disk_used) . '<br>';
  print 'diskspace left: ' . format_size($disk_remaining) . '<br><hr>';
}

php disk_total_space

Any idea why the processor usage shoot up too high or 100% till the script execution is finish ? Can anything be done to optimize it? or is there any other alternative way to check folder and folders inside it size?

解决方案

The following are other solutions offered elsewhere:

If on a Windows Host:

<?
    $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';
    }
?>

Else, if on a Linux Host:

<?
    $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;
?>

这篇关于如何在PHP中获取目录大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆