CakePHP 1.3 系で Shell を使う方法

以下のページを参考に組み込んでみました。

他のサイトも見ましたが、どれも難しく解説してありますので、なるべくシンプルに分かりやすくまとめておきます。よろしければご参考にどうぞ。

Shell クラスを作る

/app/vendors/shells/test.php を作って以下のようなファイルを作れば良いです。今回は初期設定やモデル定義などを含めて、ただメール送信をするコードを用意しました。テストにお使いください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
App::import('Core', 'Controller');
class TestShell extends Shell
{
	public
		$uses = Array('Meta', 'Data'),
		$Controller;
 
	public function initialize()
	{
        	parent::initialize();
        	$this->Controller =& new Controller();
        }
 
	public function mail()
	{
		mail('info@example.com', 'テストメール', "メールのメッセージ");
	}
}

モデルなども使える

コントローラーと同じようにモデルを定義すれば使うことができます。

1
var $uses = Array('Meta', 'Data');

コントローラーやコンポーネントは App::import() で読み込む

以上のサンプルではコントローラーを読み込みましたが、例えばコンポーネントなんかは以下のように読み込んだあと、initialize() などで変数などにインスタンスを生成すれば使えます。

1
App::import('Component', 'Qdmail');

そうすれば普段通りにコンポーネントを使うことができます。

コマンドラインから実行する

ファイルの用意などが完了しましたら以下のようにしてコマンドラインから実行します。リモート環境なら SSH などで接続してください。

1
php5 /var/www/cake/console/cake.php test mail -app /var/www/app

ちなみに以上のコマンドを分かりやすく説明すると以下のような感じ。

1
php [cake.php ファイルの場所] [クラス名] [アクション名] -app [appディレクトリの場所]

ちょっと書き方おかしいかもしれませんが、シンプルに説明してみました。cron から定期実行したい場合は cron から実行できるようにしたり、以下のように test.sh などを作って実行すれば良いです。

1
2
3
4
#!/bin/bash
#!/usr/local/bin/php53
 
php5 /var/www/cake/console/cake.php test mail -app /var/www/app

コメント

コメントは受け付けていません。