こんにちは、ひろゆきです。
今日は、CodeIgniterでバッチを作成する際に行ったことをメモしていきます。
今回使用したバージョンは2.0.3なのですが、こちらの記事を見ただけでできてしまいました。
「codeIgniterで作った処理をcronから呼び出す | Web開発者の備忘録」
http://blog03.4649.me/archives/58
1. 「cron.php」の用意
以下を記載したcron.phpを用意し、applicationディレクトリと同じ階層に設置しました。
#!/usr/bin/php
define('CRON_CI_INDEX', dirname(__FILE__) . DIRECTORY_SEPARATOR . 'index.php'); // codeIgniter の index.php を指定
set_time_limit(0);
chdir(dirname(CRON_CI_INDEX));
require(CRON_CI_INDEX);
CRON_CI_INDEXの設定は、今回index.phpと同じ階層に設置したためこのままの記述でいけました。
また、
set_time_limit(0);
は、バッチの実行時間が長いと勝手に止まってしまうことを防ぐために記載しています。
2. CLI実行チェックを行う
もうこの時点でバッチを動かすことができてしまうのですが、ブラウザからのアクセスで動かないように、CLIのチェックを行いました。
以下の記述をバッチで使用するコントローラーのコンストラクタに記載しました。
(/application/controllers/batch.php)
<?php
class Batch extends MY_Controller {
/**
* コンストラクタ
*/
public function __construct() {
parent::__construct();
// CLI実行かのチェック
if (!$this->input->is_cli_request()) {
log_message('error', 'CLI以外からのアクセスがありました。');
exit;
}
}
/**
* バッチのメイン処理
*/
public function index()
{
// バッチのメイン処理
log_message('info', 'バッチが実行されました。');
exit;
}
}
?>
これで、ブラウザからのアクセスではエラーログが出力され、コマンドラインからの実行ではinfoログが出力(メイン処理が実行される)されるようになります。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。