【问题标题】:Prevent apache web server from processing stopped ( by browser ) request防止 apache web 服务器处理停止(由浏览器)的请求
【发布时间】:2014-06-26 11:20:58
【问题描述】:

最近我在php中编写了一个导入脚本,它将从远程服务器导入一些批量数据。

我从浏览器启动导入操作,一切正常。但是有一段时间远程服务器需要一些时间来响应,所以我使用浏览器的“停止”按钮停止了请求。

但我的 apache 似乎仍在处理请求。

那么有没有办法在相应请求停止的时候停止apache进程呢?

【问题讨论】:

  • 尝试手动终止进程....这可能是一个小故障,所以有时您需要手动终止进程...您怎么知道即使您停止了 apache 仍然保留该进程通过浏览器处理..
  • @LeoPrince - 您确实通过浏览器停止服务器端进程,因此预计它会继续运行。您能否更具体地说明这种“故障”是如何发生的?有关正在发生的事情的解释,请参阅我的答案。

标签: php apache browser httprequest


【解决方案1】:

我认为这是不可能的。当您在浏览器中按停止时,您只需停止侦听/处理来自服务器的响应。如果服务器在发送响应之前正忙于处理,您按stop 不会向服务器发送更多信息,因此它将继续处理直到完成,然后尝试回复。

请记住,HTTP 是无状态的。您提出请求,等待响应,仅此而已。在您想要的行为中,您需要在处理/提供响应时向同一进程发出另一个请求,这不符合模式。

我认为您可以实现此目的的唯一方法是实现另一种方法,该方法将采用一些可用于定位和终止长时间运行的进程的参数。当然,这将是一个新的、单独的请求。

【讨论】:

  • 知道了,不能通过浏览器。谢谢你的解释。
【解决方案2】:

尝试在php中使用ignore_user_abort()函数。

试试这个代码

<?php
ignore_user_abort(false);
set_time_limit(0);

echo 'Testing connection handling in PHP';

while(1) {
    if(connection_status() != CONNECTION_NORMAL)  {
        break;
    }

    sleep(10);
}

?>

更多参考请查看http://www.php.net/manual/en/function.ignore-user-abort.php

【讨论】:

  • 在我的情况下,我遇到了相反的问题,当客户端断开连接时脚本会停止(浏览器停止 / curl / wget 停止等)。 ignore_user_abort() 似乎不适用于 PHP 5,没有效果,没有任何值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
相关资源
最近更新 更多