soar-PHP - SQL 语句优化器和重写器的 PHP 扩展包、 方便框架中 SQL 语句调优

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



评论/留言