soar-php 是一个基于小米公司开源的 soar 开发的 PHP 扩展包,方便框架中 SQL 语句调优。我在尝鲜过程中遇到了一些问题和解决方案,记录下来方便日后查阅。
下载源码:https://github.com/guanguans/soar-php
然后用composer安装:
$ composer require guanguans/soar-php --dev
下载soar:https://github.com/XiaoMi/
配置:
<?php /** * Created by 1076963452@qq.com * User: BriskLan * Date: 2019/7/13 20:45 */ if (!defined('DIR_ROOT')){ require __DIR__.'/../../../bootstrap.php';//主要我用来直接在测试系统linux命令执行查看 } error_reporting(E_ALL); ini_set('display_errors', '1'); require_once DIR_ROOT.'/task/comm/tools/soar/vendor/autoload.php'; use Guanguans\SoarPHP\Soar; $config = [ // 下载的 soar 的路径 '-soar-path' => DIR_ROOT.'/task/comm/tools/soar/soar/soar.linux-amd64',//一定要用对,否则没有输出的 // 测试环境配置 '-test-dsn' => [ 'host' => '127.0.0.1', 'port' => '3306', 'dbname' => 'test', 'username' => 'wwww', 'password' => 'wwww', ], // 日志输出文件 '-log-output' => DIR_ROOT.'/task/comm/tools/soar/soar/soar.log', // 报告输出格式: 默认 markdown [markdown, html, json] '-report-type' => 'html', ]; $soar = new Soar($config); $sql ="SELECT * FROM `o_order_shop` as a LEFT JOIN o_order_product as b ON a.orderid = b.orderid where 1 "; echo $soar->score($sql);效果如下=》
json格式:
html格式:
效果很不错。这真是神器,比自己写的日志好多了,哈哈哈。
下面是遇到的问题和解决方法:
1.Fatal error: Uncaught Guanguans\SoarPHP\Exceptions\InvalidConfigException: File does not exist, or the file is unreadable...
解决:这是因为soar.darwin-amd64(soar.linux-amd64)需要执行权限,目前权限不足会报错,具体可以通过源码查看报错位置。所以解决方法是给对应的文件添加执行权限,比如
chmod 775 soar.linux-amd64
2.Warning: shell_exec() has been disabled for security reasons
解决:这是由于我php限制了这个内置函数的执行,到php.ini把disable_function里面的shell_exec()函数去除并重启php-fpm即可解决
3.open /xxxxxxxx/soar.log: permission denied
解决:这个是日志文件无权操作了,原因是我在linux终端用root执行了后log的所有权归root,在web网站的www用户无权操作导致的,重写给soar.log文件777权限即可。
4.无输出反应
解决:soar文件不可用,修改为系统支持的版本即可。