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>'; }
在脚本执行完成之前,为什么处理器使用率会过高或100%升高?可以做些什么来优化它吗?还是有其他方法可以检查文件夹和其中的文件夹大小?
以下是其他地方提供的其他解决方案:
如果在Windows主机上:
<? $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'; } ?>
否则,如果在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 'Directory: ' . $f . ' => Size: ' . $size; ?>