このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0067

コマンドライン(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リクエストから抑止
  • public function __construct()
    {
        parent::__construct();

        if ( ! $this->input->is_cli_request() )     {
            return NULL;
        }
    }
  • 特定メソッドをHTTPリクエストから抑止
  • public function maintenance()
    {
        if ( ! $this->input->is_cli_request() )     {
            return FALSE;
        }
    }

コマンドラインからの実行

 コマンドラインから、CodeIgniterで作成したコントローラクラスのアクションメソッドを実行するには、
「 php 」コマンドからフロントコントローラ(index.php)を指定して実行します。

 処理するコントローラクラスとアクションメソッドのルーティングは、phpコマンドの引数によって
決定されます。
 また、アクションメソッドへの引数も、コマンドラインから指定することが可能です。

 phpのコマンドライン引数とCodeIgniterのルーティングの対応は以下の通りです。

    $ php   index.phpのパス   [コントローラ名]   [メソッド名]   [メソッド引数]

  • 例:
    • 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); } } }
    $ php htdocs/index.php backup log

ログ出力

 コマンドラインから実行する場合でも「log_message()」関数でログを出力することができますが、
ログファイル、または、ログファイルを書き込むディレクトリに、コマンドラインを実行するユーザの
書き込み権限が必要です。