前提
- app/Console/command/MyTestShell.php作成済み
- MyTestShell.phpのmainメソッドに処理を実装
経緯
- cakephpで非同期処理を実行する必要があった
- サーバはLinuxだが、ローカルがwindowsだった
コントローラの実装
TestsController.php
// 初期作業ディレクトリ
$cwd = ROOT . '/app';
$d = [0 => 'pipe', 'r'];
// コマンド
$cmd = ROOT . '/Console/cake my_test main';
$p = proc_open($cmd, $d, $pipes, $cwd);
if (is_resource($p)) {
fwrite($pips[0], $str);
fclose($pips[0]);
proc_close($p);
}
最後に
設定の問題かもしれませんが、
popenで組んだところ、ディレクトリがappではなくエラーになりました。
そのため、proc_openで実装したところ、処理が実行されました。
他にもこんなやり方があるよ、
そのやり方はよくないよ
などあれば、ぜひ教えて頂けると助かります。