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文件不可用,修改为系统支持的版本即可。