运行没有网页的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 :
看到此链接 – 提前关闭连接