如何在PHP中获取目录大小 [英] How to get directory size in PHP
本文介绍了如何在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>;
}
任何想法为什么处理器使用率太高或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>';
}
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屋!
查看全文