为什么 php 在打印数据时在客户端断开连接时中止,否则不会

Why does php abort on client disconnecting when printing data but not otherwise?

本文关键字:断开 打印 php 数据 客户端 为什么 连接      更新时间:2023-09-26

我正在使用使用php和javascript的SSE。

我有一个循环(出于开发目的,生命周期为 15 秒),它贯穿并添加"开始连接"、"仍然在这里"(休眠 1 秒后)和"结束连接"到数据库用于调试目的。

我发现当 php 脚本在没有"print"ing/"echo"ing/"var_dump()"任何信息的情况下运行时,无论客户端是否终止连接,脚本(读取"循环")都会运行完成。

但是,当我打印/回显/var_dump任何东西时 - 脚本会在用户终止后立即终止。

为什么存在这种差异?

通常,当客户端断开连接时,脚本应中止。有几种方法可以覆盖它:

  • php.ini 中设置ignore_user_abort选项。
  • httpd.conf 中设置php_value ignore_user_abort选项。
  • 在 PHP 脚本中调用ignore_user_abort()
  • 在 PHP 脚本中使用 register_shutdown_function() 注册关闭函数。