コマンドライン(CLI)
CodeIgniterでは、コマンドラインからCodeIgniterフレームワークアプリケーションを実行することが可能です。
Webアプリケーションのデプロイ時に実行するプログラムや、cronジョブとして定期的に実行する
プログラム、メンテナンスプルグラムなど、コマンドラインからの用途でCodeIgniterフレームワークの各機能が
利用することができ便利です。
この項では、CodeIgniterフレームワークで作成したアプリケーションをコマンドラインから
実行するための方法を解説します。
フロントコントローラ(index.php)
コマンドラインからの処理も、HTTPリクエストと同様にフロントコントローラ(index.php)がプログラム実行の起点となります。
コマンドラインからCodeIgniterで作成したプログラムを実行する場合は、少々「index.php」を
改修する必要があります。
下記の例を参考に、「$assign_to_config['uri_protocol'] = 'CLI';」の記述を追記してください。
- index.php
/* * --------------------------------------------------------------- * Resolve the system path for increased reliability * --------------------------------------------------------------- */ // Set the current directory correctly for CLI requests if (defined('STDIN')) { chdir(dirname(__FILE__)); $assign_to_config['uri_protocol'] = 'CLI'; // <- この行を追記します。 }
コントローラクラス
コントローラクラスは、通常のコントローラクラスと同様に作成することができますが、 もし、
HTTPリクエストからは実行させたくない場合は、「CI_Input」クラスの
「is_cli_request()」メソッドを
利用して、HTTPリクエストからの実行を抑止すると良いでしょう。
- クラス全体をHTTPリクエストから抑止
- 特定メソッドをHTTPリクエストから抑止
{
parent::__construct();
if ( ! $this->input->is_cli_request() ) {
return NULL;
}
}
{
if ( ! $this->input->is_cli_request() ) {
return FALSE;
}
}
コマンドラインからの実行
コマンドラインから、CodeIgniterで作成したコントローラクラスのアクションメソッドを実行するには、
「 php 」コマンドからフロントコントローラ(index.php)を指定して実行します。
処理するコントローラクラスとアクションメソッドのルーティングは、phpコマンドの引数によって
決定されます。
また、アクションメソッドへの引数も、コマンドラインから指定することが可能です。
phpのコマンドライン引数とCodeIgniterのルーティングの対応は以下の通りです。
- 例:
- application/controllers/backup.php
class Backup extends CI_Controller {
public function __construct() { parent::__construct(); if ( ! $this->input->is_cli_request() ) { return NULL; } $this->load->library('zip'); $this->load->helper('file'); } public function log() { $logs = get_filenames('../application/logs'); foreach ($logs as $log) { rename('../application/logs/'.$log, '../application/backup/logs/'.$log); } $this->zip->read_dir('../application/backup/logs', FALSE); $this->zip->archive('../application/backup/log-' . date('Y-m-d') . '.zip'); $logs = get_filenames('../application/backup/logs'); foreach ($logs as $log) { unlink('../application/backup/logs/'.$log); } } }
ログ出力
コマンドラインから実行する場合でも「log_message()」関数でログを出力することができますが、
ログファイル、または、ログファイルを書き込むディレクトリに、コマンドラインを実行するユーザの
書き込み権限が必要です。