我有一些基本的网站跟踪软件,发送JSON object
和jQuery AJAX
从跨页面的网页到数据由php
脚本处理的服务器。这在window.onbeforeunload
上触发。运行PHP脚本没有网页等待它完成
当对我的php
脚本进行基准测试时,我发现不同域上的客户端网站仍然在等待php脚本在加载下一页之前完成运行。例如,客户站点的访问者可以导航到另一个页面。我们发送JSON object
跨域到服务器来处理它。如果我将sleep(30);
添加到我的php
脚本中,客户端网站将不会加载下一页,直到此php
脚本完成(30+秒)。
运行此脚本后,我不需要返回任何值,因此如何确保此php
脚本在不影响客户端网站的情况下运行?
我希望我已经解释得很清楚了。如果我没有问任何问题,谢谢。
SOLUTION:
这是对我工作(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
谢谢你,从我的理解,这看起来像一个很好的解决方案。但是我收到一个错误:'调用未定义函数fastcgi_finish_request()'。任何想法为什么?谢谢。 – 2014-08-30 14:55:06
可能你使用的是Apache而不是nginx + fpm,我认为这个函数只适用于fpm。 – Casey 2014-08-30 14:58:05
也许这是有用的:http://stackoverflow.com/questions/138374/close-a-connection-early – 2014-08-30 15:10:03