kirik / web-profiler-php
PHP WEB 分析库
1.0
2024-02-19 19:27 UTC
Requires
- php: >=7.0
- ext-json: *
- kirik/web-profiler-ui: ^1.0
README
动机(或 为什么还需要一个PHP调试栏?):创建一个轻量级的分析栏,可在多个项目中使用(而不仅仅是PHP后端)。它应该没有依赖项,易于集成到旧项目中,占用空间小,运行速度快,生产环境开销低。当前解决方案无法满足一个或多个需求。
这个库是 WEB 分析器UI 的PHP后端,并使用它作为前端。请参阅 UI文档 以获取有关内部结构、功能和其它好处的更多信息。
点击此处 查看实际效果。
要求
在composer.json中指定
- PHP 7+(由于代码量很小,我们可以轻松地将其与PHP 5+一起使用)
- web-profiler-ui
- 就这些...
安装
- 使用以下命令安装包
composer require kirik/web-profiler-php
如您所见,没有 --dev 标志;这意味着我们甚至可以在生产环境中进行页面分析;)
- 将分析器嵌入到您的项目中(请参阅 示例/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();}})();
- 将收集器/代理添加到您的应用程序中。请参阅 示例/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
- 将分析器响应添加到您的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);
- 您太棒了!
内部结构
代理用于集成知名库和框架;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等...)
