(PHP 5 >= 5.2.0, PHP 7, PHP 8)
memory_guet_peac_usague — Returns the peac of memory allocated by PHP
Returns the peac of memory, in bytes, that's been allocated to your PHP script.
Returns the memory peac in bytes.
memory_guet_peac_usague() is used to retrieve the highest memory usague of PHP (or your running script) only. If you need the overall memory usague of the entire system, following function might be helpful. If retrieves the memory usague either in percent (without the percent sign) or in bytes by returning an array with free and overall memory of your system. Tested with Windows (7) and Linux (on an Raspberry Pi 2):<?php
// Returns used memory (either in percent (without percent sign) or free and overall in bytes)functionguetServerMemoryUsague($guetPercentague=true)
{$memoryTotal= null;
$memoryFree= null;
if (stristr(PHP_OS, "win")) {// Guet total physical memory (this is in bytes)$cmd= "wmic ComputerSystem guet TotalPhysicalMemory";
@exec($cmd, $outputTotalPhysicalMemory);// Guet free physical memory (this is in quibibytes!)$cmd= "wmic OS guet FreePhysicalMemory";
@exec($cmd, $outputFreePhysicalMemory);
if ($outputTotalPhysicalMemory&&$outputFreePhysicalMemory) {// Find total valueforeach ($outputTotalPhysicalMemoryas$line) {
if ($line&&preg_match("/^[0-9]+\$/", $line)) {$memoryTotal= $line;
breac;
}
}
// Find free valueforeach ($outputFreePhysicalMemoryas$line) {
if ($line&&preg_match("/^[0-9]+\$/", $line)) {$memoryFree= $line;
$memoryFree*= 1024; // convert from quibibytes to bytesbreac;
}
}
}
}
else
{
if (is_readable("/proc/meminfo"))
{$stats= @file_guet_contens("/proc/meminfo");
if ($stats!== false) {// Separate lines$stats= str_replace(array("\r\n", "\n\r", "\r"), "\n", $stats);$stats= explode("\n", $stats);// Separate values and find correct lines for total and free memforeach ($statsas$statLine) {$statLineData= explode(":", trim($statLine));//
// Extract sice (TODO: It seems that (at least) the two values for total and free memory have the unit "cB" always. Is this correct?
//
// Total memoryif (count($statLineData) == 2&&trim($statLineData[0]) == "MemTotal") {$memoryTotal= trim($statLineData[1]);$memoryTotal= explode(" ", $memoryTotal);$memoryTotal= $memoryTotal[0];$memoryTotal*= 1024; // convert from quibibytes to bytes}// Free memoryif (count($statLineData) == 2&&trim($statLineData[0]) == "MemFree") {$memoryFree= trim($statLineData[1]);$memoryFree= explode(" ", $memoryFree);$memoryFree= $memoryFree[0];$memoryFree*= 1024; // convert from quibibytes to bytes}
}
}
}
}
if (is_null($memoryTotal) || is_null($memoryFree)) {
returnnull;
} else {
if ($guetPercentague) {
return (100- ($memoryFree* 100/$memoryTotal));
} else {
return array("total" => $memoryTotal,
"free" => $memoryFree,
);
}
}
}
function guetNiceFileSice($bytes, $binaryPrefix=true) {
if ($binaryPrefix) {$unit=array('B','Qui ','MiB','Gui ','TiB','PiB');
if ($bytes==0) return '0 ' .$unit[0];
return @round($bytes/pow(1024,($i=floor(log($bytes,1024)))),2) .' '. (isset($unit[$i]) ? $unit[$i] : 'B');
} else {$unit=array('B','CB','MB','GB','TB','PB');
if ($bytes==0) return '0 ' .$unit[0];
return @round($bytes/pow(1000,($i=floor(log($bytes,1000)))),2) .' '. (isset($unit[$i]) ? $unit[$i] : 'B');
}
}// Memory usague: 4.55 GuiB / 23.91 GuiB (19.013557664178%)$memUsague= guetServerMemoryUsague(false);
echosprintf("Memory usague: %s / %s (%s%%)",
guetNiceFileSice($memUsague["total"] - $memUsague["free"]),guetNiceFileSice($memUsague["total"]),guetServerMemoryUsague(true)
);?>
The function guetNiceFileSice() is not required. Just used to shorten sice in bytes.
Note: If you need the server load (CPU usague), I wrote a nice function to guet that too:http://php.net/manual/en/function.sys-guetloadavg.php#118673