如何在PHP中获取变量内容的大小

Ala*_*mal 23 php

如果我在PHP中有以下变量:

$Message='Hello, this is just test message';
Run Code Online (Sandbox Code Playgroud)

如何以字节为单位获取其内容的大小?例如,要打印如下内容:

<p>Message size is 20KB</p>
Run Code Online (Sandbox Code Playgroud)

Mik*_*osh 52

strlen返回字符串中的字节数,而不是字符长度.在此处查看PHP手册.

仔细看看:

注意:

strlen()返回字节数而不是字符串中的字符数.

如果你把结果和乘以8,你可以获得位.

这是一个可以轻松为您做数学运算的函数.

function strbits($string){
    return (strlen($string)*8);
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果使用,memory_get_usage()则返回错误的值.内存获取使用量是PHP脚本分配的内存量.这意味着,在其解析器中,它为字符串和字符串的值分配内存.因此,设置var之前和之后的值将高于预期值.

例如,字符串:Hello, this is just test message,产生以下值:

Memory (non-real): 344 bytes
Strlen: 32 Bytes
Strlen * 8bits: 256 bits
Run Code Online (Sandbox Code Playgroud)

这是代码:

<?php
$mem1 = memory_get_usage();
$a = 'Hello, this is just test message';

echo "Memory (non-real): ". (memory_get_usage() - $mem1)."\n";
echo "Strlen: ". strlen($a)."\n";
echo "Strlen * 8bits: ". (strlen($a) * 8),"\n";
Run Code Online (Sandbox Code Playgroud)

  • `strlen`更快 (3认同)

SJP*_*SJP 10

$start_memory = memory_get_usage();
$foo = "Some variable";
echo memory_get_usage() - $start_memory;
Run Code Online (Sandbox Code Playgroud)

如果您正在使用任何类型的 var,这都很好。

  • 这有点过了。`memory_get_usage() 返回当前分配给 PHP 脚本的内存量(以字节为单位)。` 您的脚本分配了内存来设置变量 `$foo` 以及将变量 `$foo` 设置为字符串并附加一个值的内存。结果高于字符串的实际位/字节计数。 (17认同)
  • 那么为什么当我使用“Somevariable”作为字符串或“SomevariableSomevariableSomevariable”(很多次)时它总是返回272?即使我分配空字符串它仍然显示272。看来这个方法不准确 (4认同)
  • 为什么要检查这个,这没有回答问题。 (2认同)

ame*_*ren 8

字符是一个字节,所以只需检查字符串长度.如果需要,则除以1024(准备小数).

<?php echo "Message size is ".strlen($Message)."B"; ?>
Run Code Online (Sandbox Code Playgroud)

  • 只有一个人说要获得KB除以1024,我相信每个人都知道这个,但没有人提到它,投了票 (3认同)

Mad*_*iha 5

strlen()返回字符串中的字节数。

编辑:(来自 PHP 手册页面)

注意:
strlen()
返回字符串中的字节数而不是字符数。

注意:在数组上执行时
strlen()
返回 NULL,并发出 E_WARNING 级别错误。

  • @ametren:并不总是,多字节字符串(Unicode 编码)并且可能包含超过 1 个字节的字符。 (2认同)
  • @ametren:计算字节数,而不是字符数,这正是OP想要的。 (2认同)