PHP memory_get_usage
(PHP 4 = 4.3.2, PHP 5, PHP 7)
memory_get_usage — Повертає кількість пам'яті, виділену для PHP
Повертає кількість пам'яті в байтах, яка була виділена PHP-скрипту на даний момент.
Список параметрів
ПередачаTRUE дозволяє дізнатися реальну кількість пам'яті, виділеної PHP скрипту системою, включаючи сторінки, що не використовуються. Якщо аргумент не заданий або дорівнюєFALSE, буде повернуто лише кількість пам'яті, що використовується.
PHP не відстежує пам'ять, яка виділялася не emalloc()
Значення, що повертаються
Повертає кількість пам'яті у байтах.
список змін
| 5.2.1 | Для роботи функції більше не потрібно, щоб PHP компілювався з налаштуванням --enable-memory-limit. |
| 5.2.0 | Доданий аргумент real_usage. |
Приклад #1 Приклад використанняmemory_get_usage()
// Це просто приклад, цифри нижче // відрізнятимуться залежно від вашої системи
echo memory_get_usage() . "\n"; // 36640
$a = str_repeat ( " Hello " , 4242 );
echo memory_get_usage() . "\n"; // 57960
echo memory_get_usage() . "\n"; // 36744
Дивіться також
User Contributed Notes 15 notes
To get the memory usage in KB або MB
function convert ( $size ) $unit =array( 'b' , 'kb' , 'mb' , 'gb' , 'tb' , 'pb' ); return @ round ($ size / pow (1024, ($ i = floor (log ($ size, 1024))))), 2). ''. $unit [$i]; >
echo convert (memory_get_usage (true)); // 123 kb ?
memory_get_usage() is used to retrieve the memory located to PHP only (or your running script). Але intuitively, багатолюди очікують отримати використання пам’яті системи, виходячи з назви функції.
Отже, якщо вам потрібно загальне використання пам’яті, наступна функція може бути корисною. Якщо отримує дані про використання пам’яті у відсотках (без знака відсотка) або в байтах, повертаючи масив вільної та загальної пам’яті вашої системи. Протестовано з Windows (7) і Linux (на Raspberry Pi 2):
// Повертає використану пам’ять (у відсотках (без знака відсотка) або вільну та загальну пам’ять у байтах) function getServerMemoryUsage ( $getPercentage = true ) $memoryTotal = null ; $memoryFree = нуль;
if ( stristr ( PHP_OS , "win" )) // Отримати загальну фізичну пам’ять (у байтах) $cmd = "wmic ComputerSystem get TotalPhysicalMemory" ; @ exec ($cmd, $outputTotalPhysicalMemory);
// Отримайте вільну фізичну пам'ять (у кібібайтах!) $cmd = "wmic OS get FreePhysicalMemory" ; @ exec ($cmd, $outputFreePhysicalMemory);
// Знайти вільне значення foreach ( $outputFreePhysicalMemory as $line ) if ( $line && preg_match ( "/^[0-9]+\$/" , $line )) $memoryFree = $line ; $memoryFree *= 1024 ; // конвертувати з кібібайтів у байти break; > > > > else if ( is_readable ( "/proc/meminfo" )) $stats = @ file_get_contents ( "/proc/meminfo" );
if ( $stats !== false ) // Окремі рядки $stats = str_replace (array( "\r\n" , "\n\r" , "\r") ), "\n" , $stats ); $stats = рознести ("\n" , $stats);
// Розділіть значення та знайдіть правильні рядки для загального та вільного mem foreach ( $stats as $statLine ) $statLineData = explode ( ":" , trim ( $statLine ));
// // Розмір вилучення (ЗАВДАННЯ: здається, що (принаймні) два значення для загальної та вільної пам’яті завжди мають одиницю «кБ». Чи цеправильно? //
// Загальна пам'ять if ( count ( $statLineData ) == 2 && trim ( $statLineData [ 0 ]) == "MemTotal" ) $memoryTotal = trim ( $statLineData [ 1 ]); $memoryTotal = рознести ( " ", $memoryTotal); $memoryTotal = $memoryTotal [ 0 ]; $memoryTotal *= 1024 ; // конвертувати з кібібайтів у байти >
// Звільнити пам'ять if ( count ( $statLineData ) == 2 && trim ( $statLineData [ 0 ]) == "MemFree" ) $memoryFree = trim ( $statLineData [ 1 ]); $memoryFree = розгорнути ( " ", $memoryFree); $memoryFree = $memoryFree [0]; $memoryFree *= 1024 ; // конвертувати з кібібайтів у байти > > > > >
if ( is_null ( $memoryTotal ) is_null ( $memoryFree )) return null ; > else if ( $getPercentage ) return ( 100 - ( $memoryFree * 100 / $memoryTotal )); > else return array( "total" => $memoryTotal , "free" => $memoryFree , ); > > >
функція getNiceFileSize ( $bytes , $binaryPrefix = true ) if ( $binaryPrefix ) $unit =array( 'B' , 'KiB' , 'MiB' , 'GiB' , 'TiB' , 'PiB' ); if ( $bytes == 0 ) повертає '0 '. $одиниця [0]; return @ round ( $bytes / pow ( 1024 ,( $i = floor ( log ( $bytes , 1024 )))), 2 ) . ' '. (isset( $unit [ $i ]) ? $unit [ $i ] : 'B' ); > else $unit =array( 'B' , 'KB' , 'MB' , 'GB' , 'TB' , 'PB' ); if ( $bytes == 0 ) повертає '0 '. $одиниця [0]; return @ round ( $bytes / pow ( 1000 ,( $i = floor ( log ( $bytes , 1000 )))), 2 ) . ' '. (isset( $unit [ $i ]) ? $unit [ $i ] : 'B' ); > >
// Використання пам’яті: 4,55 ГіБ / 23,91 ГіБ (19,013557664178%) $memUsage = getServerMemoryUsage ( false ); echo sprintf ( "Використання пам'яті: %s / %s (%s%%)" , getNiceFileSize ( $memUsage ["total" ] - $memUsage [ "free" ]), getNiceFileSize ( $memUsage [ "total" ]), getServerMemoryUsage ( true ) );
?> The function getNiceFileSize() is not required. Just used to shorten size in bytes.