PHP: Measure size in kilobytes of a object/array?

19,379

Well, since Memcached doesn't store raw objects (it actually stores the serialiezd version), you can do this:

$serializedFoo = serialize($foo);
if (function_exists('mb_strlen')) {
    $size = mb_strlen($serializedFoo, '8bit');
} else {
    $size = strlen($serializedFoo);
}
Share:
19,379
Industrial
Author by

Industrial

I just want to lie on the beach and eat hot dogs. That’s all I’ve ever wanted. Really.

Updated on June 03, 2022

Comments

  • Industrial
    Industrial almost 2 years
    • What's an appropriate way of measure a PHP objects actual size in bytes/kilobytes?

    Reason for asking:
    I am utilizing memcached for cache storage in my web application that will be used by non-technical customers. However, since memcached has a maximum size of 1mb , it would be great to have a function set up from the beginning that I can be used to measure size of selected objects/arrays/datasets, to prevent them from growing to big.

    Note that I am only planning on using this as a alert/diagnostic tool to keep track of the cache performance and storage possibilities over time. I assume that calculating speed on each memcached set/add call would slow down things a bit.

    I am also aware of storing big datasets in memcached takes away the whole idea of storing things in the RAM, and that is exactly why I need to know in beforehand to prevent customers building up to big datasets.

    Thanks a lot

  • Industrial
    Industrial almost 14 years
    Hi! That's just what I was about to ask. How does it handle UTF8 and multiple byte characters?
  • ircmaxell
    ircmaxell almost 14 years
    Well, it all depends. If you have mb_string function overloading on, then you have issues. If not, strlen will return the byte length (which is what you want in the first place). If you have mbstring.func_overload on, you can use mb_strlen(serialize($foo), '8bit'); in place of strlen. But note, mb_string must be installed to use it. I'll edit in a more robust version...
  • Industrial
    Industrial almost 14 years
    Thanks a lot for your help ircmaxell! Great stuff
  • Jan Święcki
    Jan Święcki over 11 years
    @ircmaxell on line 5 of the script you have one too many paranthesis. (can't edit, because SO says edit must have at least 6 characters).
  • Andrei Surdu
    Andrei Surdu almost 7 years
    What? Never do that!
  • f4der
    f4der over 5 years
    It would be a challenge to find a method that is more inefficient than this one..
  • Tomer Gal
    Tomer Gal almost 5 years
    Don't you dare doing this