Phalconでバッチ処理を実装して、cronに設定する方法についてです。
おおまかに以下の流れになります。
1) CLI(コマンドラインアプリケーション)の作成
2) taskの作成(コマンドラインから実行されるファイル)
3) crontabの設定
バッチ処理の実装
CLIの作成
Phalconのエントリポイントであるpublic/index.phpですが、バッチ処理用のエントリポイントを別途作成します。
projectフォルダ/publicフォルダ配下にcli.phpを作成しましょう。中身は以下になります。
<?php
use Phalcon\Di\FactoryDefault\Cli as CliDI;
use Phalcon\Cli\Console as ConsoleApp;
use Phalcon\Loader;
// Using the CLI factory default services container
$di = new CliDI();
/**
* Register the autoloader and tell it to register the tasks directory
*/
$loader = new Loader();
$loader->registerDirs(
[
'../app/tasks/', // tasksフォルダ内にバッチファイルを作成します
'../app/models/',
]
);
$loader->register();
// Load the configuration file (if any)
//$configFile = __DIR__ . '/config/config.php';
$configFile = '.app/config/config.php';
if (is_readable($configFile)) {
$config = include $configFile;
$di->set('config', $config);
}
// Create a console application
$console = new ConsoleApp();
$console->setDI($di);
/**
* Process the console arguments
*/
$arguments = [];
foreach ($argv as $k => $arg) {
if ($k === 1) {
$arguments['task'] = $arg;
} elseif ($k === 2) {
$arguments['action'] = $arg;
} elseif ($k >= 3) {
$arguments['params'][] = $arg;
}
}
/*
* DB接続設定 ご自身の設定に適宜変えてください
*/
$di->set('db', function () {
return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
"host" => "localhost",
"username" => "root",
"password" => "****",
"dbname" => "****",
"charset" => "utf8"
));
});
try {
// Handle incoming arguments
$console->handle($arguments);
} catch (\Phalcon\Exception $e) {
// Do Phalcon related stuff here
// ..
fwrite(STDERR, $e->getMessage() . PHP_EOL);
exit(1);
} catch (\Throwable $throwable) {
fwrite(STDERR, $throwable->getMessage() . PHP_EOL);
exit(1);
} catch (\Exception $exception) {
fwrite(STDERR, $exception->getMessage() . PHP_EOL);
exit(1);
}
tasksの作成
バッチファイルの格納フォルダになります。
projectフォルダ/appフォルダ配下にtasksフォルダを作成しましょう。
tasksフォルダを作成したらバッチファイルの作成です。
テストファイルとしてMainTask.phpをtasksフォルダ内に作成します。
<?php
class MainTask extends Task
{
public function mainAction()
{
echo 'This is the default task and the default action' . PHP_EOL;
}
/**
* @param array $params
*/
public function testAction(array $params)
{
echo sprintf('hello %s', $params[0]);
echo PHP_EOL;
echo sprintf('best regards, %s', $params[1]);
echo PHP_EOL;
}
}
実装については以上です。
次は、これらを実行してみましょう。
実行方法
コマンドラインから実行
※絶対パスで指定してますが、コマンドラインからの実行はカレントディレクトリからのパスの指定も勿論できます。要はcli.phpをphpコマンドで実行してあげればよい。
# php /var/www/html/プロジェクトフォルダ/public/cli.php クラス名 アクション名 パラメータ
ちなみに引数を配列にするときや、複数引数を持ちたいときは以下の形で対応できます。
# php /var/www/html/プロジェクトフォルダ/public/cli.php クラス名 アクション名 パラメータ1 パラメータ2
crontabの設定
cronttabで指定する際は以下のようにcronに追記してあげましょう。
# crontab -e
分 時間 日 月 曜日 php /var/www/html/プロジェクトフォルダ/public/cli.php クラス名 アクション名 パラメータ1 パラメータ2
以上となります。