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 に答える