Web開発フレームワーク「CodeIgniter」でバッチ作成をする方法

Web開発フレームワーク「CodeIgniter」でバッチ作成をする方法

ひろゆき

ひろゆき

こんにちは、ひろゆきです。
今日は、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サイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

エンジニアのひろゆきや。大阪生まれの大阪育ち。LIGを代表するエンジニアになるため、頑張るで。ほんま、よろしくやで。

このメンバーの記事をもっと読む
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL