3

CakePHP でシェルの出力をキャプチャする方法はありますか?

CakePHP 2.x アプリケーションのレポートを生成するシェルをいくつか作成しました。コマンド ラインでシェルを実行して出力を表示することはできますが、これらのシェルの結果を電子メールで送信したいと考えています。

別のシェルをラッパーとして使用$this->dispatchShell('shellname')し、その出力をキャプチャすることを考えましdispatchShellたが、シェルを実行して出力を CLI にダンプするだけのようです。

4

1 に答える 1

2

Shellをファイルに出力するには、Shellのコンストラクターで出力ストリームを宣言します。これは、stdoutをCakePHPのTMPディレクトリ(通常はapp/tmp/)にある次の名前のファイルのログファイルにする例shell.outです。

<?php
class FooShell extends AppShell {

    public function __construct($stdout = null, $stderr = null, $stdin = null) {
        // This will cause all Shell outputs, eg. from $this->out(), to be written to
        // TMP.'shell.out'
        $stdout = new ConsoleOutput('file://'.TMP.'shell.out');

        // You can do the same for stderr too if you wish
        // $stderr = new ConsoleOutput('file://'.TMP.'shell.err');

        parent::__construct($stdout, $stderr, $stdin);
    }

    public function main() {
        // The following output will not be printed on your console
        // but be written to TMP.'shell.out'
        $this->out('Hello world');
    }
}
于 2012-07-23T03:44:15.633 に答える