microtime(true), 'stop' => false, 'memory_start' => function_exists('memory_get_usage') ? memory_get_usage() : 0, 'memory_stop' => false, ); } } public static function stop($name) { if (isset(self::$timers[$name]) && self::$timers[$name]['stop'] === false) { self::$timers[$name]['stop'] = microtime(true); self::$timers[$name]['memory_stop'] = function_exists('memory_get_usage') ? memory_get_usage() : 0; } } public static function get($name, $decimals = 4) { if (!isset(self::$timers[$name])) { return false; } if (self::$timers[$name]['stop'] === false) { self::stop($name); } return array( 'time' => number_format(self::$timers[$name]['stop'] - self::$timers[$name]['start'], $decimals), 'memory' => self::bytes(self::$timers[$name]['memory_stop'] - self::$timers[$name]['memory_start']), ); } public static function bytes($bytes) { $i = 0; $formats = array('B', 'KB', 'MB', 'GB', 'TB', 'PB'); while ($bytes >= 1024) { $bytes = $bytes / 1024; ++$i; } return number_format($bytes, ($i ? 2 : 0), ',', '.') . ' ' . $formats[$i]; } }