kirik/web-profiler-php

1.0 2024-02-19 19:27 UTC

This package is auto-updated.

Last update: 2024-09-06 03:23:42 UTC


README

动机(或 为什么还需要一个PHP调试栏?):创建一个轻量级的分析栏,可在多个项目中使用(而不仅仅是PHP后端)。它应该没有依赖项,易于集成到旧项目中,占用空间小,运行速度快,生产环境开销低。当前解决方案无法满足一个或多个需求。

这个库是 WEB 分析器UI 的PHP后端,并使用它作为前端。请参阅 UI文档 以获取有关内部结构、功能和其它好处的更多信息。

点击此处 查看实际效果。

Docked mode

要求

在composer.json中指定

  • PHP 7+(由于代码量很小,我们可以轻松地将其与PHP 5+一起使用)
  • web-profiler-ui
  • 就这些...

安装

  1. 使用以下命令安装包
composer require kirik/web-profiler-php

如您所见,没有 --dev 标志;这意味着我们甚至可以在生产环境中进行页面分析;)

  1. 将分析器嵌入到您的项目中(请参阅 示例/main.php
// include composer autoloader
require('vendor/autoload.php');

// right after including composer, start profiling
\WebProfilerPhp\Profiler::start($_SERVER['REQUEST_URI'], []);

// application code
// ----

// at the very end of the application lifecycle, stop the profiler and render UI
echo \WebProfilerPhp\Profiler::render([]);

直到调用 Profiler::start,不会收集任何跨度,并且 Profiler::render 将返回一个空字符串。考虑到这一点,您可以在几乎没有任何开销的情况下安全地运行它。我个人更喜欢使用cookie+IP条件来启用分析

if (isset($_COOKIE['__profiler']) && $_SERVER['REMOTE_ADDR'] === '127.0.0.1') {
    \WebProfilerPhp\Profiler::start($_SERVER['REQUEST_URI'], []);
}

然后使用浏览器书签切换分析器

javascript:(function(){const parts=`; ${document.cookie}`.split('; __profiler=');let enabled=(parts.length===2)?parseInt(parts.pop().split(';').shift()):0;document.cookie='__profiler='+(enabled>0?'0':'1')+'; path=/';if(confirm('Profiler has been '+(enabled>0?'disabled':'enabled')+'. Reload this page?')){document.location.reload();}})();
  1. 将收集器/代理添加到您的应用程序中。请参阅 示例/main.php。支持的 收集器
  • 数据库 - 由PDO代理使用,但您也可以自己使用
  • 日志 - 简单的记录器
  • PhpInfo - 将phpinfo()打印到分析器

调用数据库收集器的基例

$span = \WebProfilerPhp\Collector\Database::start('SELECT * FROM users WHERE id = 123');

// run query

// stopping span PHP7 style  
if ($span !== null) {
    $span->stop(1);
}
// stopping span PHP8+ style using the null-safe operator  
$span?->stop(1);

支持的 代理

  • PDO
  1. 将分析器响应添加到您的AJAX响应中
$ajaxResponse = [/*some application response*/];

// adding __profiler key to the response (NOTE this will be added ONLY if the profiler was started)
$ajaxResponse = \WebProfilerPhp\Profiler::addProfilerToJson($ajaxResponse);

echo json_encode($ajaxResponse);
  1. 您太棒了!

内部结构

代理用于集成知名库和框架;PDO是唯一支持的代理。请毫不犹豫地向我们提交PR以添加代理。

收集器是用于测量/记录事件的实体;它们可以轻松继承/扩展以提供您自己的度量。

代理

PDO

使用 \WebProfilerPhp\Proxy\PDO 类作为 PDO 的代理类。

$dbh = new \WebProfilerPhp\Proxy\PDO($dsn, $user, $password);
// ...

编写您自己的收集器

请扩展 \WebProfilerPhp\Collector\Base 并覆盖属性。您还可以扩展数据库或日志收集器以实现相同的逻辑。请参阅 示例/own_collectors.php;

路线图

  • 添加Guzzle代理
  • 添加MongoDB代理
  • 添加ClickHouse代理
  • 添加框架支持(Laravel、Symfony等...)

替代方案