Sometimes it’s nice to know or even very important to know, how much your PHP script is using memory. This is a simple example of a class, which can be used to collect the PHP script memory usage information and to print all information. It’s easy to reformat output, if you want to use it example on web page or command line script. Or even do another function for web pages and another for command line scripts.
Memory Usage Information PHP Class
<?phpclass MemoryUsageInformation {private$real_usage;private$statistics=array();// Memory Usage Information constructorpublicfunction __construct($real_usage=false){$this->real_usage=$real_usage;}// Returns current memory usage with or without stylingpublicfunction getCurrentMemoryUsage($with_style=true){$mem=memory_get_usage($this->real_usage);return($with_style) ? $this->byteFormat($mem):$mem;}// Returns peak of memory usagepublicfunction getPeakMemoryUsage($with_style=true){$mem=memory_get_peak_usage($this->real_usage);return($with_style) ? $this->byteFormat($mem):$mem;}// Set memory usage with infopublicfunction setMemoryUsage($info=''){$this->statistics[]=array('time'=>time(),'info'=>$info,'memory_usage'=>$this->getCurrentMemoryUsage());}// Print all memory usage info and memory limit and publicfunction printMemoryUsageInformation(){foreach($this->statisticsas$satistic){echo"Time: ".$satistic['time']." | Memory Usage: ".$satistic['memory_usage']." | Info: ".$satistic['info'];echo"\n";}echo"\n\n";echo"Peak of memory usage: ".$this->getPeakMemoryUsage();echo"\n\n";}// Set start with default info or some custom infopublicfunction setStart($info='Initial Memory Usage'){$this->setMemoryUsage($info);}// Set end with default info or some custom infopublicfunction setEnd($info='Memory Usage at the End'){$this->setMemoryUsage($info);}// Byte formattingprivatefunction byteFormat($bytes,$unit="",$decimals=2){$units=array('B'=>0,'KB'=>1,'MB'=>2,'GB'=>3,'TB'=>4,'PB'=>5,'EB'=>6,'ZB'=>7,'YB'=>8);$value=0;if($bytes>0){// Generate automatic prefix by bytes // If wrong prefix givenif(!array_key_exists($unit,$units)){$pow=floor(log($bytes)/log(1024));$unit=array_search($pow,$units);}// Calculate byte value by prefix$value=($bytes/pow(1024,floor($units[$unit])));}// If decimals is not numeric or decimals is less than 0 // then set default valueif(!is_numeric($decimals)||$decimals<0){$decimals=2;}// Format outputreturnsprintf('%.'.$decimals.'f '.$unit,$value);}}?>
Example Usage of Memory Usage Information Class
<?php// Create new MemoryUsageInformation class$m=new MemoryUsageInformation(true);// Set start$m->setStart();// Create example array$a=array();// Set memory usage before loop$m->setMemoryUsage('Before Loop');// Fill array withfor($i=0;$i<100000;$i++){$a[$i]=uniqid();}// Set memory usage after loop$m->setMemoryUsage('After Loop');// Unset arrayunset($a);// Set memory usage after unset$m->setMemoryUsage('After Unset');// Set end$m->setEnd();// Print memory usage statistics$m->printMemoryUsageInformation();
Example Output of Memory Usage Information class
Time: 1321095944| Memory Usage: 768.00 KB | Info: Initial Memory Usage
Time: 1321095944| Memory Usage: 768.00 KB | Info: Before Loop
Time: 1321095951| Memory Usage: 24.25 MB | Info: After Loop
Time: 1321095951| Memory Usage: 1.25 MB | Info: After Unset
Time: 1321095951| Memory Usage: 1.25 MB | Info: Memory Usage at the End
Peak of memory usage: 24.25 MB