* @package trace * @link https://www.zentao.net */ class trace { /** * @var array */ public $trace = array(); protected $app; protected $dao; public function __construct() { global $app, $dao; $this->app = $app; $this->dao = $dao; } /** * 获取请求信息。 * Get request info. * * @return void */ public function getRequestInfo() { $this->trace['request'] = array( 'start' => date('Y-m-d H:i:s', (int)$this->app->startTime), 'url' => $this->app->getURI(true), 'protocol' => $this->app->server->server_protocol, 'method' => $this->app->server->request_method, 'timeUsed' => round(getTime() - $this->app->startTime, 4) * 1000, 'memory' => round(memory_get_peak_usage() / 1024, 1), 'querys' => count(dbh::$queries), 'caches' => 0, 'files' => count(get_included_files()), 'session' => session_id(), 'php' => phpversion() ); } /** * 获取请求加载的文件。 * Get request files. * * @return void */ public function getRequestFiles() { $this->trace['files'] = get_included_files(); } /** * 获取请求的 SQL 语句。 * Get request SQLs. * * @return void */ public function getRequestSqls() { $this->trace['sqlQuery'] = dbh::$queries; } /** * 获取请求的 SQL profiles。 * Get request SQL profiles. * * @return array */ public function getSQLProfiles() { $this->trace['profiles'] = $this->dao->getProfiles(); } /** * 生成请求 Trace。 * Generate request trace. * * @return array */ public function getTrace() { $this->getRequestInfo(); $this->getRequestFiles(); $this->getRequestSqls(); $this->getSQLProfiles(); return $this->trace; } public function __toString(): string { return json_encode($this->getTrace()); } }