【问题标题】:PHP ignore_user_abort is Not working on IIS 10PHP ignore_user_abort 不适用于 IIS 10
【发布时间】:2021-01-26 15:11:52
【问题描述】:

即使 Ajax 会话从用户端关闭,我也想完成 PHP 请求。我设法通过将ignore_user_abort(True) 添加到我的 php 文件中来在 Apache 上执行此操作,但它不适用于带有 FASTCGI 的 IIS 10。试图在没有运气的情况下搜索任何解决方案。我在 windows server 2019 上使用 PHP v7.4 和 IIS v10。

以下只是打开文件并打印连接状态的测试代码。它在 Apache 上运行完美,但在 IIS 上,它停止写入 ponce 会话关闭。

<?php
ignore_user_abort ( TRUE );
echo "hello\n";

$x=0;
$log_filename = ".\\test.txt";
while (@ ob_end_flush());
while ($x<100)
{
  echo($x ."\n");
  $status = connection_aborted();
  file_put_contents($log_filename, $x ." - " .$status ."\n", FILE_APPEND);
  $x++;
  @ flush();
  sleep(1);
}
?>

【问题讨论】:

  • 这似乎是一个老错误(自 2011 年以来):bugs.php.net/bug.php?id=60586#1378935714。但它仍被标记为打开。
  • @Magnus 我看到了那个错误,但那是针对 V5.3,我正在使用 V7.4
  • 是的,但问题仍然可能相同。同一问题的最后一条评论来自 2017 年。

标签: php ajax apache iis fastcgi


【解决方案1】:

您可以尝试使用fastcgi_finish_request() 这个函数将所有响应数据刷新到客户端并完成请求。这允许在不打开与客户端的连接的情况下执行耗时的任务。

https://www.php.net/manual/en/install.fpm.php

【讨论】:

  • 感谢您的回答,但我不想关闭连接,因为我在运行时返回数据。这里的主要目标是向用户返回实时数据,如果他关闭选项卡或浏览器,脚本会一直运行到最后。
猜你喜欢
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 2013-07-29
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 2012-10-29
相关资源
最近更新 更多