mrsuh / php-var-sizeof
Provides functions for getting full size of any PHP variable
Installs: 1 623
Dependents: 1
Suggesters: 0
Security: 0
Stars: 59
Watchers: 2
Forks: 1
Open Issues: 0
Requires
- php: >=7.4
- ext-ffi: *
Requires (Dev)
- maddhatter/markdown-table: ^1.0
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-11-13 21:12:18 UTC
README
Function for getting size of any PHP variable in bytes.
It must be more accurate tool to calculate total size of PHP variable than memory_get_usage()
, but it has restrictions.
How it works
var_sizeof()
with var_class_sizeof()
uses FFI to access internal structures of PHP variables.
It calculates the size of internal structures such as zval
, _zend_array
, _zend_object
, etc., as well as additional allocated memory for them.
It doesn't take into calculate the memory of handlers/functions/etc.
Requirements
- PHP >= 7.4 (with FFI)
- Linux(x86_64/aarch64) / Darwin(x86_64/arm64)
How to install
composer require mrsuh/php-var-sizeof
Functions
int var_sizeof(mixed $var);
int var_class_sizeof(mixed $var);
Usage
<?php require_once __DIR__ . '/vendor/autoload.php'; $int = 1; printf("variable \$int size: %d bytes\n", var_sizeof($int)); $array = array_fill(0, 100, $a); printf("variable \$array size: %d bytes\n", var_sizeof($array)); $object = new \stdClass(); printf("variable \$object size: %d bytes\n", var_sizeof($object)); printf("class \$object size: %d bytes\n", var_class_sizeof($object));
var_sizeof vs memory_get_usage
PHP 8.1.2 Linux(x86_64)
⚠️ Restrictions
- works correctly only with userland objects and SPL \ArrayIterator
- doesn't work correctly with complicated structures like extensions/resources/callables/functions
- to calculate total size of an object you need to use
var_sizeof()
withvar_class_sizeof()
For contributors
How to reproduce a table of numbers above
git clone --recurse-submodules git@github.com:mrsuh/php-var-sizeof.git && cd php-var-sizeof composer install docker build -t image-php-var-sizeof . docker run -it --rm --name my-running-script -v "$PWD":/app image-php-var-sizeof php bin/render-table.php
How to compile library
git submodule update --init --recursive cd php-src ./buildconf ./configure --with-ffi --with-iconv=/opt/homebrew/opt/libiconv cd .. make DEBUG=1
docker build -t php-var-sizeof -f Dockerfile-compile . docker run -it -v $(pwd)/library:/code/library php-var-sizeof bash cd /code make DEBUG=1