2017-10-10 11 views
0

以下は私のコントローラです。私が/testに行った後、私がブラウザを閉じてもコントローラが稼働し続けるのはなぜですか?それは正常な動作ですか? ignore_user_abortのような設定は使用していませんか?symfonyコントローラがブラウザを閉じた後に実行を続ける理由を教えてください。

ブラウザを閉じた後でもこのコントローラがログを出力し続けるのはなぜですか?

/** 
    * @Route("/test") 
    */ 
    public function testAction() { 

     $logger = $this->get('exception.logger'); 

     for ($i = 0; $i < 100; $i++) { 
      $logger->info("[{$i}] ------------------------------- "); 

      sleep(1); 
     } 

     $response = new StreamedResponse(function() use($logger) { 

      for ($i = 0; $i < 100; $i++) { 
       $logger->info("[{$i}] ******************************************* "); 

       sleep(1); 
      } 
     }); 


     $filename = "test.csv"; 

     $response->headers->set('Content-Type', 'application/force-download'); 
     $response->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"'); 

     return $response; 
    } 
+1

あなたのブラウザ(クライアント側)を閉じてもサーバがリクエストを実行しても、 – CodeIsLife

+0

PHPはユーザが接続を中断したことを試みるまで検出しません情報がクライアントに送信されます。単純にecho文を使っても、情報が送られることは保証されません。flush()を参照してください。 – CodeIsLife

答えて

1

PHPコードはサーバー側です。ブラウザーを閉じるかどうかに関係なく、Webサーバーのロギングはサーバー上で続行されます。これは正常な動作です。 Can closing the browser terminate the PHP script on the server?

+0

ignore_user_abortの使用は何ですか? – PMoubed

+1

PHPスクリプトが(ブラウザに)何かを出力しようとすると、もはや接続がないことがわかります。 'ignore_user_abort'はPHPスクリプトにとにかく実行し続けるように指示します(通常、ブラウザが閉じたことを通知すると停止しますが、ブラウザに出力するまでは通知しません)。 – turtlechief

+0

サンプルコントローラーが切断された場合、どのように検出されますか? – PMoubed

関連する問題