【问题标题】:filesize from a String来自字符串的文件大小
【发布时间】:2011-03-31 11:30:48
【问题描述】:

如何从 php 中的字符串中获取“文件大小”?

我将字符串作为 blob 放入 mysql 数据库中,我需要存储 blob 的大小。我的解决方案是创建一个临时文件并将字符串放入临时文件中。现在我可以从“字符串”中获取文件大小。但那个解决方案并不好......

问候

【问题讨论】:

    标签: php string blob filesize


    【解决方案1】:

    这取决于。如果您启用了mbstring function overloading,则唯一有效的调用将是mb_strlen($string, '8bit');。如果未启用,strlen($string) 也可以正常工作。

    所以,你可以像这样处理这两种情况:

    if (function_exists('mb_strlen')) {
        $size = mb_strlen($string, '8bit');
    } else {
        $size = strlen($string);
    }
    

    【讨论】:

    • 想解释一下否决票?这个答案有什么问题或不完整?
    • 谢谢!终于找到了完整的解释!
    • -1 当strlen() 总是有效时,为什么还要使用mb_strlen()?请参阅下面的答案。
    • @TheodoreR.Smith:因为,正如我在答案中指出的那样,它并不总是有效。如果mb_string.overload 打开,strlen() 将返回 UTF-8 字符数,而不是字节数。所以不,这是必需的......
    【解决方案2】:

    从表中选择长度(字段)

    来自MySQL docs

    长度(字符串)

    返回字符串str的长度, 以字节为单位。一个多字节 字符计为多个字节。 这意味着对于一个字符串 包含五个两字节字符, LENGTH() 返回 10,而 CHAR_LENGTH() 返回 5。

    【讨论】:

      【解决方案3】:
      strlen()
      

      在将其放入 mysql 或 SQL 之前:

      LENGTH()
      

      请注意,长度可能因字符集而异。如果你想以字节为单位的实际长度使用 strlen(),如果你想有字符计数使用 mb_strlen()(例如,如果你有 utf-8 编码)

      【讨论】:

      • strlen() 可能有缺陷,请参阅@ircmaxell 的回答
      【解决方案4】:

      如果您存储的只是字符串,那么大小应该是字符串的长度乘以字符集中的字节数。所以对于 Unicode 来说就是 2*strlen($string)。

      【讨论】:

      • AFAIK 只有特殊字符有双倍大小。所以字母 'a' 将有一个字节,但像 ó,ł,ż,ć,ś 等字母将有 2 个字节长
      • 哦,我不知道。干杯。
      • 是的,UTF-8 是一种可变宽度编码,字符长度可以在 1 到 4 个字节之间。 en.wikipedia.org/wiki/UTF-8
      【解决方案5】:

      strlen($string) 是查看字符串大小(MB)的最佳示例

      strlen() 实际上返回的不是字符串中的元素个数,而是其中的字节数

      示例: echo(strlen('a■')); 将返回 4,因为黑色方块字符由 3 个字节组成,而“a”字符由 1 个字节组成。

      【讨论】:

      • 很高兴您提供了一个示例来更好地解释,但否则您的答案看起来与 2010 年接受的答案相同。如果您同意,也许您可​​以编辑该答案以添加您的示例和删除这个?
      【解决方案6】:

      使用mb_strlen() 这样你就可以告诉它字符串使用什么类型的编码(如果有的话)来获取它的字节大小。

      【讨论】:

      • 再想一想,对不起,但这是完全不正确的。 mb_strlen() 与多字节编码相结合,旨在以字符 而不是字节为单位返回字符串的大小。 -1
      • 经过进一步调查,而不是简单地阅读资料(我会记下以后做更多的事情),您仍然可以使用 mb_strlen() 通过省略第二个参数来获得所需的结果,或者设置第二个参数为8bit。
      • @gabe 是的,根据@ircmaxell 的回答,它甚至是only 的防弹方式(我也不知道)。
      • 省略 MB_strlen 的第二个参数将不起作用。它将回退到默认编码(UTF-8)并且不会按预期返回......
      • 它将返回与 ASCII 字符相同的结果。但是,如果字符串中有任何 UTF-8 字符,它将不会返回正确的结果。 mb_strlen 计算当前字符集的字符串中的字符数。它返回字节数的唯一方法是将字符集强制为每字符 1 个字节的字符集。而且由于某些字符在大多数 1 字节字符集中无效,8-bit 是唯一始终返回正确字节长度的字符集...
      猜你喜欢
      • 2013-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2015-03-14
      • 2021-11-18
      • 2017-08-07
      相关资源
      最近更新 更多