2012-07-06 539 views

回答

6
$start_memory = memory_get_usage(); 
$foo = "Some variable"; 
echo memory_get_usage() - $start_memory; 

这是好的,如果您正在使用任何类型的变种的工作。

+0

比我的更好的解决方案。 – 2012-07-06 17:05:49

+12

这是有点关闭。 memory_get_usage()返回当前分配给PHP脚本的内存量(以字节为单位)。 '你的脚本分配了内存来设置变量'$ foo'以及内存来设置变量'$ foo'为一个字符串并且附加一个值。结果高于字符串的实际位/字节数。 – 2012-07-06 17:32:33

+2

那么为什么当我使用''某些变量''作为字符串或''某些变量某些变量某些变量“(多次)时它总是返回272?即使我分配空字符串,它仍然显示272.看来,这种方法是不准确的 – vladkras 2014-09-05 16:05:07

4

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

+0

请问长度等于以字节为单位的大小? 一个字符是8位还是不是? – Sena 2012-07-06 16:54:12

+0

一个字符是1个字节(8位)。 – ametren 2012-07-06 16:54:37

+2

@ametren:并非总是多字节字符串(Unicode编码),可能包含多于1个字节的字符。 – 2012-07-06 16:58:07

7

一个字符是一个字节,所以只需检查字符串的长度。如果你需要它以KB为单位除以1024(准备小数)。

<?php echo "Message size is ".strlen($Message)."B"; ?> 
+2

只有一个谁说为1024除以KB,我相信每个人都知道这一点,但没有人提到它,投了 – Gntem 2012-07-06 16:56:52

+0

是,字符串是约.03KB – ametren 2012-07-06 16:58:08

33

strlen返回的字节的字符串中的数字,而不是字符长度。查看PHP手册here

仔细查看:

注:

的strlen()返回的字节数,而不是字符的字符串中的数量。

如果将结果乘以8,则可以得到比特。

这里有一个函数可以很容易地为你做数学。

function strbits($string){ 
    return (strlen($string)*8); 
} 

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

实施例,所述串:Hello, this is just test message,产生以下的值:

Memory (non-real): 344 bytes 
Strlen: 32 Bytes 
Strlen * 8bits: 256 bits 

下面是代码:

<?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"; 
+0

什么是更快,如果我不需要一个准确的结果,“strlen '或'memory_get_usage'? – mgutt 2015-04-15 00:21:54

+3

'strlen'更快 – 2015-04-15 14:29:39

+4

这应该是公认的答案。 – Ryan 2016-09-03 13:43:41