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]に格納されます。