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