【问题标题】:PHP Human Readable filesize script always returns a "B" [duplicate]PHP人类可读文件大小脚本总是返回一个“B”[重复]
【发布时间】:2018-11-22 19:59:30
【问题描述】:

在认为我的错误之后,

我发现很多脚本都是这样做的: https://gist.github.com/liunian/9338301

S.O. 这里有好几个。我用过,但有同样烦人的“B”作为尺寸。

当我切换到 php v7.xxx 时,这个问题似乎抬起了它的丑陋脑袋 第一个问题是我必须输入一个浮点数(或双精度数),否则我会得到一个 “遇到格式不正确的数值” 经过一番研究,显然这是NOT a bug。至少我是这么读的。

所以在输入之后,错误消失了,但返回的值始终是“B” 文件大小 = 87.5B(应该是 MB 或 GB)。

我很确定 Javascript 可以工作,但宁愿用 php 保留它。

感谢观看

当前仅生成“B”的实时脚本

 public function readableBytes($size,  $type='pc') { //ignore the pc - it is for something else - disabled for debugging
        $size = (double)$size;
        static $units = array('B','kB','MB','GB','TB','PB','EB','ZB','YB');
        $step = 1024;
        $i = 0;
        while (($size / $step) > 0.9) {
            $size = $size / $step;
            $i++;   
        }
        return round($size, 2).$units[$i];
    }// function readbbleBytes

【问题讨论】:

  • 我试过了,好像还能生产其他东西-echo readableBytes(1000000);->0.95MB
  • 您使用的是哪个版本的 PHP,在哪个操作系统上(包括 wordsize - 32 或 64 位),如果您在函数的第一行 var_dump($size); 会显示什么?跨度>
  • 此处无法重现。您输入的$size 数据是什么?
  • 对我也很好
  • 证明:3v4l.org/dOQkX

标签: php


【解决方案1】:

对于那些使用循环分配(自定义)模板标签和数组字段的人来说,这是一个独特的问题。

文件大小是我使用的数组中的许多字段之一。

我使用循环遍历每个字段并将其分配给模板标签。 不知道为什么会出现“B”。我的怀疑是“字符串”= 0 字节的结果。即使它显示了实际大小。 编辑:拼写和澄清 所以要修复,在循环的中间,我强制 $array['filesize'] = readableBytes($array['filesize']))。 之前是循环标签 = 字段名。

foreach ($arr as $field=>$data) {
$arr['filesize'] = readableBytes($array['filesize'])); // fix was put here
$page = str_ireplace("{$field}", $data, $page);
}

【讨论】:

    【解决方案2】:

    以下似乎有效(在 phptester 中检查):

    function human_filesize($bytes, $decimals = 2)
    {
      if ($bytes < 1024) {
        return $bytes . ' B';
      }
    
      $factor = floor(log($bytes, 1024));
      return sprintf("%.{$decimals}f ", $bytes / pow(1024, $factor)) . ['B', 'KB', 'MB', 'GB', 'TB', 'PB'][$factor];
    }
    

    这是对以下主题中gladx 帖子的剪切和粘贴,您可以在其中找到几个优化示例:https://gist.github.com/liunian/9338301#gistcomment-2183132

    【讨论】:

      猜你喜欢
      • 2013-02-17
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2014-01-05
      • 2018-07-05
      相关资源
      最近更新 更多