1

我正在尝试使用 Apicli 制作从命令行运行的脚本。

这是我的测试代码(脚本在页面/命令中)

include '../../atk4/loader.php'; 
$api=new ApiCLI('reportes');
$api->addLocation('atk4-addons',array(
         'php'=>array(
            'mvc',
            'misc/lib',
            )))->setParent($api->pathfinder->base_location);

$api->dbConnect();
$db = $this->api->db->dsql()   
       ->table('test t')
       ->do_getAssoc();

这个的输出是

PHP Fatal error:  Uncaught exception 'ExceptionNotConfigured' with message 'You must  specify $config['dsn'] in your config.php' in /var/www/ossec/atk4/lib/ApiCLI.php:238
Stack trace:
#0 /var/www/ossec/atk4/lib/ApiCLI.php(276): ApiCLI->getConfig('dsn')
#1 /var/www/ossec/page/crons/reportes.php(13): ApiCLI->dbConnect()
#2 {main}
  thrown in /var/www/ossec/atk4/lib/ApiCLI.php on line 238

这不读取 config-default.php 吗?我加了

$config['dsn']='mysql://user:pass@localhost/test';

但它不起作用。

谢谢大家

4

4 回答 4

3

您可以通过更改 cron 执行的当前目录来解决问题。将这些行添加到文件的开头,该文件由 cron 执行:

$_SERVER['HTTP_HOST'] = 'site_name'; 
$_SERVER['REMOTE_ADDR'] = '127.0.0.1'; 
$_SERVER['REQUEST_METHOD'] = 'GET'; 
chdir('/home/user/...path_to_directory'); 
于 2014-05-20T19:59:38.473 回答
1

查看 ApiCli.php 并查看了 db 定义,我已经通过方法传递了参数

$api->dbConnect('mysql://user:pass@localhost/test');

现在它工作正常。

问候亚历杭德罗

于 2012-08-15T14:36:38.827 回答
0

ApiCLI 读取 config-default 然后读取 config.php 文件(来自 ApiCLI 的代码),因此它应该选择您的配置文件。很可能它正在查看错误的目录,因为它检查了当前目录:

function getConfig($path, $default_value = undefined){
    /**
     * For given path such as 'dsn' or 'logger/log_dir' returns
     * corresponding config value. Throws ExceptionNotConfigured if not set.
     */
    if(is_null($this->config)){
        $this->readConfig('config-default.php');
        $this->readConfig();
    }
    ......
}


function readConfig($file='config.php'){
    $orig_file = $file;
    if(is_null($this->config))$this->config=array();
    $config=array();
    if(strpos($file,'/')===false){
        $file=getcwd().'/'.$file;
        // ^^^^^^^
    }
    ...
}
于 2012-08-16T09:51:58.283 回答
0

我有同样的问题,但上面的解决方案没有奏效,所以像这样使用 setConfig:

$config['dsn']='mysql://root@localhost/databasename';
$api=new ApiCLI();
$api->setConfig($config);
于 2014-01-21T19:31:53.923 回答