为什么symfony控制器在用户关闭浏览器后继续执行?

为什么symfony控制器在用户关闭浏览器后继续执行?,symfony,Symfony,下面是我的控制器。为什么在我访问/test后关闭浏览器时控制器仍保持运行?这是正常的行为吗?我没有使用任何配置,例如忽略用户\u中止 为什么这个控制器在我关闭浏览器后仍然输出日志 /** * @Route("/test") */ public function testAction() { $logger = $this->get('exception.logger'); for ($i = 0; $i < 10

下面是我的控制器。为什么在我访问
/test
后关闭浏览器时控制器仍保持运行?这是正常的行为吗?我没有使用任何配置,例如
忽略用户\u中止

为什么这个控制器在我关闭浏览器后仍然输出日志

    /**
     * @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;
    } 
/**
*@Route(“/test”)
*/
公共函数测试(){
$logger=$this->get('exception.logger');
对于($i=0;$i<100;$i++){
$logger->info(“[{$i}]------------------------------------”;
睡眠(1);
}
$response=新的流响应(函数()使用($logger){
对于($i=0;$i<100;$i++){
$logger->info(“[{$i}]*************************************************************”);
睡眠(1);
}
});
$filename=“test.csv”;
$response->headers->set('Content-Type','application/force-download');
$response->headers->set('Content-Disposition','attachment;filename=“.”.$filename.”);
返回$response;
} 

PHP代码是服务器端的。无论是否关闭浏览器,web服务器日志记录都将在服务器上继续。这是正常的行为。请参阅此stackoverflow问题以获得更好的解释:

这是一个服务器端代码,即使您关闭浏览器(客户端),服务器继续执行requestPHP也不会检测到用户已中止连接,直到尝试向客户端发送信息。简单地使用echo语句并不能保证信息被发送,请参见flush()。那么ignore\u user\u abort有什么用呢?如果您的php脚本试图输出某些内容(到浏览器),它将注意到不再有连接
ignore\u user\u abort
将告诉php脚本继续运行(一旦它注意到您关闭了浏览器,它通常会停止,但在它尝试向您的浏览器发送某种类型的输出之前,它不会注意到)。如何在示例控制器中检测连接是否断开?我不确定您到底想实现什么,但我的建议是尝试找到一种不依赖于检查浏览器是否关闭的方法,因为您的服务器需要一段时间才能意识到连接已断开。给猫剥皮的方法几乎总是不止一种。。。。休息一下,理清思路,然后从不同的角度处理问题。我不知道有什么可靠的方法可以立即知道连接何时丢失。