我有一些基本的网站跟踪软件,可以将JSON object
jQuery AJAX
从网页跨域发送到服务器,其中数据由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
答案 0 :(得分:1)
对于PHP-fpm:
要关闭与客户端的连接(发送响应),但继续运行脚本并处理一些数据,此功能可以帮助您 - fastcgi_finish_request
对于apache :
请参阅此链接 - close a connection early