2017-08-07 11 views
1

私は、Symfonyプロジェクトのシェルスクリプトからライブフィードバックを得たいと考えています。通常、私は(filename.php中)のような何かをするだろう:symfonyのPHPからのライブフィードバック

<html> 
    <head> 
    </head> 
    <body> 
    <?php echo getTheStuff(); ?> 
    </body> 
</html> 

<?php 

function getTheStuff() { 
    while (@ ob_end_flush()); // end all output buffers if any 

    $cmd = './test.sh'; 

    $proc = popen($cmd, 'r'); 
    echo '<pre>'; 
    while (!feof($proc)) 
    { 
    echo fread($proc, 4096); 
    @ flush(); 
    } 
    echo '</pre>'; 

    return "OK"; 
} 

このコードは、スクリプトファイルに見て、として利用可能なデータを通じて送信し続けます。これは、ブラウザが処理されたときにtest.shの出力を表示することを意味します。

Symfonyはビューを出力に使用するため、コントローラが処理を終了してからhtmlを出力するまで待機します。 symfonyにこのようなことをする方法はありますか?

+0

ルック:[XMLHttpRequestを持つ小枝テンプレートからストリーミングsymfonyの応答](HTTP://www.inanzzzを。 symfonyコントローラからのストリーミングコンソールコマンド出力](http://www.inanzzz.com/index.php)を参照してください。/post/stkb/streaming-console-command-output-from-symfony-controller) – BentCoder

答えて

1

YMMVしかし、Symfonyには、あなたが必要とする可能性のあるStreamedResponseが含まれています。必ずしもHTMLビューを返す必要はありません。実際、いくつかの応答のタイプがあります - JsonResponseFileResponseなど

注意のob_start()がまたはにoutput_bufferingのphp.iniの オプションを有効にする前に、あなたは(ob_flush呼び出す必要がありますと呼ばれてきた場合

)その前に流す()。

これは非常によくあるケースですので、これを以下のコードに追加しました。あなたはob_flush()行を削除して動作させることができます。上記のリンクのドキュメントを1として

use Symfony\Component\HttpFoundation\StreamedResponse; 

// etc. 

public function getTheStuffAction(): StreamedResponse 
{ 
    $response = new StreamedResponse(); 
    $response->setCallback(function() { 
     var_dump('Hello World'); 
     ob_flush(); 
     flush(); 
     sleep(2); 
     var_dump('Hello World'); 
     ob_flush(); 
     flush(); 
    }); 

    return $response->send(); 
} 

・ホープ、このことができます:)あまりにもこれらの

+0

ob_flush()の編集を追加しました。デフォルトのベンダーライブラリの1つがob_start()を使うと信じているので、これを使用しなければなりませんでしたので、デフォルトでこれが必要になります(私はチェックし、php.iniでoutput_bufferingを使用しています)。 – MicWit

+0

よかった、聞いてうれしいです:) –

+0

編集が@peteとNigel Renによって拒否された理由は分かりません。 ob_start()が呼び出された場合(通常はSymfonyにある)、またはoutput_bufferingのphp.iniオプションが有効な場合は、すべてのflush()の前にob_flush()を追加する必要があります。 – MicWit

関連する問題