勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

CodeIgniter3でCronを実行する方法

   2024/01/30  PHP CodeIgniter

CodeIgniter3系で特定の処理をCronで自動実行したかった。以下に設定方法をメモ。尚、Codeigniter4系の場合はこちらの記事を参照。

 

設定

applicationとかsystemとかが置いてあるディレクトリのindex.phpに以下の通り追記する。

if (defined('STDIN'))
{
    chdir(dirname(__FILE__));
    $assign_to_config['uri_protocol'] = 'CLI'; //この行を追記
}

 

Cronで実行したい処理

コントローラーで普通に関数を書く。

public function hoge()
{
    //Cronでしたい処理を書く。
}

ただ、上記の場合にルーティング設定をしているとHTTPリクエストからでも実行されてしまう。 もし実行したくない場合は、以下のように記述する。

public function hoge()
{
    if( $this->input->is_cli_request() ){
        //成功時の処理。Cronでしたい処理を書く。
    } else {
        //失敗時の処理。HTTPリクエストの場合はこちらになる。
    }
}

 

Cronの記述

以下の通り記述する。

#[時間設定] [ユーザー名] [PHPパス] [codeigniter/index.phpへの絶対パス] [コントローラー名] [メソッド名] [必要なら引数]
0 * * * * root /usr/bin/php /var/codeigniter/index.php cron hoge

上記の場合は「1時間に1回コントローラーのCron.php内のhogeメソッドをrootユーザーで実行する」という形になる。

 

その他

HTTPリクエストの許可拒否をメソッド単位で変更できるのは便利。基本的には自動処理だけど、たまに手動処理したいとかいう場合に使える。

 

参考サイト

http://www.ci-guide.info/extension/cli/

 - PHP CodeIgniter

  関連記事

CodeIgniter4.4.4のインストールからHello Worldページ表示まで行う方法

以前CodeIgniter3を勉強したことがあったが新バージョンの4系がリリース ...

Codeigniter4でエラーログ設定、出力及び確認方法

Codeigniter4.4.4でエラーログの設定を行い特定のファイルに出力させ ...

CodeIgniter4でフォームからファイルをアップロードし保存する方法

CodeIgniter4.4.4でformから画像等のファイルをアップロードし、 ...

Codeigniter3で異なるデータベースを使用する

Codeigniterで2つのコンテンツがあって、それぞれ別のデータベースを使用 ...

Codeigniter4で外部ファイル(CSS / JS)の読み込みと共通パーツ化する方法

Codeigniter4.4.4でCSS及びJavaScriptファイルを設置し ...