5

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

4 回答 4

1

其他答案似乎没有抓住重点,为什么浏览器在重定向之前等待整个响应完成。

我对此并不肯定,但是浏览器是否会在收到 Location 标头后立即重定向?还是在连接终止时完成?使用 Firebug 查看网络连接在做什么,看看它是在 10 秒之前打印这些标题,还是在 10 秒后出现。

在 Ruby on Rails 世界中,首选的解决方案是将作业发送到“延迟作业”或“resqueue”服务器运行;这避免了尝试在需要可用于处理 Web 请求的 Web 服务器中运行长进程。

于 2012-08-05T18:08:25.817 回答
0

它等待的原因是因为 line sleep(10)。删除它,它应该以您期望的速度运行。

于 2012-08-05T17:56:11.503 回答
0

sleep(10)代码接近尾声可能就是原因。

如果您希望在后台完成工作,您有多种选择。

可能最好的方法是使用客户端站点的 AJAX 来执行繁重的 PHP 脚本,并在完成后返回结果。

单独的 PHP 不能像你想要的那样做异步工作。

于 2012-08-05T17:56:25.043 回答
-1
 Sleep(10)

导致 10 秒的等待。我不确定它在那里做什么。但是删除它,你会没事的!

我认为 10 秒的等待是“做一些工作”的一个例子。

于 2012-08-05T18:00:43.343 回答