我希望脚本尽可能快地重定向用户,并在用户重定向后继续处理数据。我在谷歌上发现了这个但是它不起作用。它在重定向之前等待10秒。似乎用户需要等到脚本完成才能直接浏览器。
<?PHP
store data
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$user_ip=$_SERVER['REMOTE_ADDR'];
//Redirect to google
header("Location: http://www.google.com");
//Erase the output buffer
ob_end_clean();
//Tell the browser that the connection's closed
header("Connection: close");
//Ignore the user's abort (which we caused with the redirect).
ignore_user_abort(true);
//Extend time limit to 30 minutes
set_time_limit(1800);
//Extend memory limit to 10MB
ini_set("memory_limit","10M");
//Start output buffering again
ob_start();
//Tell the browser we're serious... there's really
//nothing else to receive from this page.
header("Content-Length: 0");
//Send the output buffer and turn output buffering off.
ob_end_flush();
//Yes... flush again.
flush();
//Close the session.
session_write_close();
//After redirection no need to send any data to user anymore.
//User would It's seem that user need to wait till script is finish before browser can be direct.
//Do some work
//sleep(10);
$matched = $wurflObj->getDeviceCapabilitiesFromAgent($userAgent);
$org = geoip_org_by_name($user_ip);
?>
答案 0 :(得分:1)
其他答案似乎忽略了这一点,为什么浏览器会在重定向之前等待整个响应完成。
我对此并不乐观,但是在接收到Location标题后,浏览器会立即重定向吗?或者在连接终止时完成?使用Firebug查看网络连接正在执行的操作,并查看它是否在10秒启动之前打印这些标头,或者是否在10秒后显示。
在Ruby on Rails世界中,首选的解决方案是将作业发送到“延迟作业”或“重新队列”服务器来运行;这可以避免尝试在需要可用于处理Web请求的Web服务器中运行长进程。
答案 1 :(得分:0)
它等待的原因是由于行sleep(10)
。删除它,它应该以你期望的速度运行。
答案 2 :(得分:0)
代码附近的sleep(10)
可能只是可能 。
如果您希望在后台完成工作,您有几种选择。
可能最好的方法是从客户端站点使用AJAX来执行繁重的PHP脚本,并在结束时返回结果。
单凭PHP不能像你想要的那样进行异步工作。
答案 3 :(得分:-1)
Sleep(10)
造成10秒等待。我不确定它甚至在那里做什么。但删除它,你会没事的!
我认为10秒等待是作为“做一些工作”的一个例子。