シェルスクリプトからFuelPHPで組んだ処理を呼び出す

fuelphpでコマンドラインプログラムを作る方法 - ぎじゅっやさん

フレームワークのないPHPなんてもう触ってられないですよ。一度知った味は忘れられない。
(と言いながら、今週はフレームワーク無しのPHPプログラムをメンテナンスしてました。このソース、オブジェクト指向にもなってないのでほんとうに大変。リファクタリングしようにもテストコード書けないし…)

cronから呼んで自動実行させたい処理があり、シェルスクリプトからFuelPHPを呼べないかと調べてみて、目からウロコ。
そうですよね、oilがまさにその役目をしてるんですよね。最初に気づくべきでした orz


…気を取り直して。
はじめにご紹介したURLを参考に、処理を実装。


ファイルは「fuel/app/tasks」以下に配置することになります。

例えばこんなかんじで処理を書いてみる。

fuel/app/tasks/hello.php

<?php
namespace Fuel\Tasks;

class Hello
{
public static function run($name = null)
{
if ( is_null($name) )
{
$name = 'hoge';
}

\Cli::write('Hello, '. $name. '!');
}
}

不要ファイルの削除とかをしていなければ「robots.php」があるはずなのでそれで書き方を確認するも良し。

呼び出しと結果はこんな感じ。

$ oil r hello*1
Hello, hoge!
$ oil r hello asano
Hello, asano!

最終的には、crontabやシェルスクリプト内から

/usr/bin/php (対象のFuelPHPプロジェクトディレクトリ)/oil r hello >> 2>&1

で呼び出せばOK。
対象のFuelPHPプロジェクトディレクトリにあるoilのパスを明示的に指定しないとエラーになります。(当たり前といえば当たり前ですが)


これでPHPシェルスクリプトからのDB接続もメール送信もラクラクですね。積極的に使っていこうと思います。

*1:r は refine の省略形