首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:获取文件夹用户空间并返回与总用户空间相关的百分比

PHP:获取文件夹用户空间并返回与总用户空间相关的百分比
EN

Stack Overflow用户
提问于 2016-08-13 17:06:25
回答 2查看 2.8K关注 0票数 0

我正在做一个函数来计算当前使用的空间(计算目录大小),并与可用的用户空间(例如10 in )进行比较,然后它将返回一个百分比来填充进度栏。

代码语言:javascript
复制
function getDirSpaceLeft($totalSpace) {
   $f = 'data/';
   $io = popen ( '/usr/bin/du -sk ' . $f, 'r' );
   $size = fgets ( $io, 4096);
   $size = substr ( $size, 0, strpos ( $size, "\t" ) );
   pclose ( $io );
   $current = $totalSpace - $size;
   $precent = $current * 100 / 2;
   return $precent;
}

但是使用这段代码,如果我传递一个10 to (10485760)的值来执行函数,它将返回一个类似于523557400的奇怪数字。

我想我做错了什么,谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-19 10:44:38

下面是我找到的一个函数(不是我的函数),它以字节为单位返回文件夹中的文件(包括子文件夹)所使用的大小:

代码语言:javascript
复制
/*  Get size of files in folder including subfolders, in bytes.
    From: https://gist.github.com/eusonlito/5099936
*/
function getSizeUsed($dir) {
    $size = 0;
    foreach (glob(rtrim($dir, '/').'/*', GLOB_NOSORT) as $each)
        $size += is_file($each) ? filesize($each) : getSizeUsed($each);
    return $size;
}

然后,您可以计算所用总量的百分比,如下所示:

代码语言:javascript
复制
$total = 10000000;
$dir = "data/";
echo (getSizeUsed($dir)/$total)*100;
票数 2
EN

Stack Overflow用户

发布于 2016-08-13 18:58:42

虽然这不是你的代码的修正,但我就是这么做的.

代码语言:javascript
复制
<?php

// folder to check
$dir = '/';

// get disk space free (in bytes)
$disk_free = disk_free_space($dir);

// get disk space total (in bytes)
$disk_total = disk_total_space($dir);

// calculate the disk space used (in bytes)
$disk_used = $disk_total - $disk_free;

// percentage of disk used
$disk_used_p = sprintf('%.2f',($disk_used / $disk_total) * 100);

// this function will convert bytes value to KB, MB, GB and TB
function convertSize( $bytes )
{
        $sizes = array( 'B', 'KB', 'MB', 'GB', 'TB' );
        for( $i = 0; $bytes >= 1024 && $i < ( count( $sizes ) -1 ); $bytes /= 1024, $i++ );
                return( round( $bytes, 2 ) . " " . $sizes[$i] );
}

// format the disk sizes using the function (B, KB, MB, GB and TB)
$disk_free = convertSize($disk_free);
$disk_used = convertSize($disk_used);
$disk_total = convertSize($disk_total);

echo '<ul>';
echo '<li>Total: '.$disk_total.'</li>';
echo '<li>Used: '.$disk_used.' ('.$disk_used_p.'%)</li>';
echo '<li>Free: '.$disk_free.'</li>';
echo '</ul>';

?>

PHP手册:

  1. 空间()
  2. 空间()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38935100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档