2012-07-06 542 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