PHP重定向用户并继续处理脚本

时间:2012-08-05 17:53:40

标签: php

我希望脚本尽可能快地重定向用户,并在用户重定向后继续处理数据。我在谷歌上发现了这个但是它不起作用。它在重定向之前等待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);

?>

4 个答案:

答案 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秒等待是作为“做一些工作”的一个例子。