2010-06-18 23 views
17
  • Jaki jest właściwy sposób zmierzenia rzeczywistego rozmiaru obiektów PHP w bajtów/kilobajtów?

Powód pytają:
ja wykorzystując memcached do przechowywania podręcznej w mojej aplikacji sieci web, które będą używane przez klientów nietechnicznych. Ponieważ jednak memcached ma maximum size of 1mb, byłoby świetnie mieć skonfigurowaną od początku funkcję, dzięki której mogę mierzyć rozmiar wybranych obiektów/tablic/zestawów danych, aby zapobiec ich powiększaniu.PHP: Zmierz rozmiar w kilobajtach obiektu/tablicy?

Należy pamiętać, że planuję użyć go jako narzędzia ostrzegawczego/diagnostycznego, aby śledzić wydajność pamięci podręcznej i możliwości przechowywania w czasie. Zakładam, że obliczanie szybkości każdego memcached zestawu/dodawania wywołań spowolni trochę.

Jestem również świadomy przechowywania dużych zbiorów danych w memcached zabiera całą ideę przechowywania rzeczy w pamięci RAM, i właśnie dlatego muszę wiedzieć wcześniej, aby uniemożliwić klientom budowanie dużych zbiorów danych.

Thanks a lot

Odpowiedz

30

cóż, skoro Memcached nie przechowuje nieprzetworzone obiekty (faktycznie przechowuje wersję serialiezd), można to zrobić:

$serializedFoo = serialize($foo); 
if (function_exists('mb_strlen')) { 
    $size = mb_strlen($serializedFoo, '8bit'); 
} else { 
    $size = strlen($serializedFoo); 
} 
+1

To będzie 16-bitowy bajt ze względu na prawo Unicode? –

+0

Cześć! Właśnie o to chciałem zapytać. Jak radzi sobie ze znakami UTF8 i wielobajtowymi? – Industrial

+2

Cóż, to wszystko zależy. Jeśli masz przeciążenie funkcji mb_string, masz problemy. Jeśli nie, 'strlen' zwróci długość bajtów (co jest najważniejsze). Jeśli masz 'mbstring.func_overload' na, możesz użyć' mb_strlen (serialize ($ foo), '8bit'); 'w miejsce strlen. Ale uwaga, mb_string musi być zainstalowany, aby z niego korzystać. Będę edytować w bardziej solidnej wersji ... – ircmaxell

4

kolejny łatwy sposób Pute treść tablicę plik, a następnie sprawdź rozmiar pliku.

$str = print_r($array, true); 
file_put_contents('data.txt', $str); 
$size = filesize('data.txt'); 
+1

Co? Nigdy tego nie rób! –

Powiązane problemy