运行没有网页的PHP脚本等待它完成

我有一些基本的网站跟踪软件,它使用jQuery AJAX从网页跨域发送JSON object到服务器,其中数据由php脚本处理。 这是在window.onbeforeunload上触发的。

在对我的php脚本进行基准测试时,我意识到在加载下一页之前,不同域上的客户端网站仍在等待php脚本完成运行。 例如,客户端站点的访问者导航到另一个页面。 我们将JSON object跨域发送到服务器以进行处理。 如果我加sleep(30); 到我的php脚本,客户端网站将不会加载下一页,直到这个php脚本完成(30+秒)。

运行此脚本后,我不需要返回任何值,因此如何确保此php脚本运行而不会对客户端站点产生任何影响?

我希望我已经很好地解释了自己。 如果我没有,请问任何问题,谢谢。

解:

这对我有用 ( http://php.net/manual/en/features.connection-handling.php#93441 ):

 ob_end_clean(); header("Connection: close\r\n"); header("Content-Encoding: none\r\n"); ignore_user_abort(true); // optional ob_start(); echo ('Text user will see'); $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); // Strange behaviour, will not work flush(); // Unless both are called ! ob_end_clean(); //do processing here sleep(5); echo('Text user will never see'); //do some processing 

  • 对于PHP-fpm:

    要关闭与客户端的连接(发送响应),但继续运行脚本并处理一些数据,这个函数可以帮到你 – fastcgi_finish_request

  • 对于apache

    看到此链接 – 提前关闭连接