cakephperの日記(CakePHP, Laravel, PHP)


継続的WebセキュリティテストサービスVAddyを始めました!

2008-09-06

cakePHPのコマンドラインプログラムでバッチ処理

cakePHP1.2rc2の環境をベースにしてます。

DBを絡めたバッチ処理とか、cake使うと簡単にできます。

cakeである程度WEB画面まで実装してれば、modelファイルとかもあるだろうから、コントローラーっぽいプログラムを実装するだけ。

基本は、app/vendors/shells/以下にプログラムを設置するだけです。

下記は、app/vendors/shells/hoge_test.phpの例です。モデルはhogeモデルを利用。hogeモデルはapp/models/hoge.phpで実装。

<?php 
class HogeTestShell extends Shell {
	
    var $uses = array('Hoge');

    function main() {

	$filename = $this->args[0];

        $insert_data = array("hoge1" => 'hohoho',
                             "hoge2" => $filename);


	$this->Hoge->create();
	if( $this->Hoge->save($insert_data) ){

        }

    }
}
?>

上記のプログラムは、$this->args[0]でコマンドラインから呼び出された際の引数の値を$filenameにいれて、$this->Hoge->saveでDBにデータを格納しているサンプルプログラムです。

このプログラムは、下記のように呼び出し可能です。

先ほど作ったプログラムが、/home/hoge/www/app/vendors/shells/hoge_test.phpにある時を前提にしています。


/home/hoge/www/cake/console/cake -app /home/hoge/www/app hoge_test hogehoge.txt

絶対パスcakeを呼び出す場合は、-appでcakeのappフォルダを指定しないとうまく動かなかったのでつけてます。

そしてその後にhoge_testを指定すると、先ほど作ったhoge_test.phpが呼ばれ、その後に続くhogehoge.txtという文字列が、hoge_test.phpの$this->args[0]に格納されます。