2012-08-15 65 views
1

我正在嘗試使用Apicli來製作從命令行運行的腳本。atk4 - 簡單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 

這不讀取配置,如default.php?我已添加

$config['dsn']='mysql://user:[email protected]/test'; 

但它不起作用。

感謝所有

回答

1

看着ApiCli.php,看到該數據庫的定義,我已經通過該方法

$api->dbConnect('mysql://user:[email protected]/test'); 

傳遞的參數,現在是工作的罰款。

問候 亞歷

0

ApiCLI讀取配置默認然後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; 
     // ^^^^^^^ 
    } 
    ... 
} 
+0

羅馬人感謝您的回答。 Alejandro – 2012-08-21 19:52:25

0

我有同樣的問題,但上述方案沒有奏效,那麼使用調用setConfig這樣的:

$config['dsn']='mysql://[email protected]/databasename'; 
$api=new ApiCLI(); 
$api->setConfig($config); 
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'); 
+0

我建議在「chdir」中使用相對文件夾。 – romaninsh 2014-05-21 16:04:01