ラボ > FuelPHP:OIL

FuelPHPをコマンドラインで実行(OIL)

FuelPHPをコマンドラインで実行するのに「OIL」ってのを使う。

作成日:2017-11-15, 更新日:2017-11-22

基本

・FuelPHPのフォルダの中に「oil」ってのがいるはず。
・コマンドラインで実行したいファイルは「app/tasks」フォルダの中にいれる。

OILファイルが無いとき

「コマンドラインからインストールしろ」だったり「FuelPHPのインストール時に○○しろ」とか・・・手っ取り早く行うなら「GitHubのFuel」からOILをコピる。
拡張子は不要っぽい。

次に自サイトのfuelディレクトリと同一階層にoilファイルを置く。

テスト・・・する前に環境

環境 Win、Xampp
FuelPHPのパス C:\xampp\htdocs\test_fuel
oilのパス C:\xampp\htdocs\test_fuel\oil
実行ファイルのあるフォルダのパス C:\xampp\htdocs\test_fuel\app\tasks\oil

テストする

コマンドラインから、oilの場所にカレントを移してphpで実行

oilの場所にカレントを移す
$ cd C:\xampp\htdocs\test_fuel
oilのヘルプや実行可能なファイルの確認
$ php oil refine
テスト(「app/tasks/robots.php」を実行)
$ php oil refine robots

変なロボットが表示されればOK

「php oil refine」でエラー

「$ php oil refine」でエラーになることがある。

'php' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

「php」のpathを通せばいい(環境変数)。
面倒だから・・・phpのpathを指定して実行(毎回path指定して実行のほうが面倒だったりするけど・・・)

xamppだと「C:\xampp\php\php.exe」ってのを実行させればいい

$ C:\xampp\php\php oil refine

ちなみに「tasks」の中にエラーのあるファイルとかあると「$ php oil refine」でエラーになる。

tasks内からmodelとか呼び出したい

頭に「\」をつけとけばよさげ
「app\classes\util\zebra.php」の「recatnap()」を実行する場合
\Util_Zebra::recatnap()

tasks内で例外を使いたい

FuelPHPでOILを使うときにtry・catchで例外処理を行おうとしたら下記のようなエラーが出てきた。

PHP Fatal error: Class ‘Fuel\Tasks\Exception’ not found in ○○○/app/tasks/○○○.php on line ○○

「\」をExceptionの前につけていないのが原因。

try {
   throw new \Exception('test Exception');
}
catch (\Exception $e) {
   echo $e->getMessage();
}

引数を使う

app\tasks\Output01.php
<?php
namespace Fuel\Tasks;
class Output01 {
   public static function run( $name='' ) {
      echo $name;
   }
}
コマンドラインで実行
$ php oil refine output01 123

引数を2つ使う

app\tasks\Output02.php
<?php
namespace Fuel\Tasks;
class Output01 {
   public static function run( $argv1='', $argv2='' ) {
      echo $argv1 . "\n";
      echo $argv2 . "\n";
   }
}
コマンドラインで実行
$ php oil refine output02 123 456