为什么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脚本继续运行(一旦它注意到您关闭了浏览器,它通常会停止,但在它尝试向您的浏览器发送某种类型的输出之前,它不会注意到)。如何在示例控制器中检测连接是否断开?我不确定您到底想实现什么,但我的建议是尝试找到一种不依赖于检查浏览器是否关闭的方法,因为您的服务器需要一段时间才能意识到连接已断开。给猫剥皮的方法几乎总是不止一种。。。。休息一下,理清思路,然后从不同的角度处理问题。我不知道有什么可靠的方法可以立即知道连接何时丢失。