PHP:重定向到同一页面,更改$ _GET

时间:2010-05-28 23:32:21

标签: php redirect

我有这段PHP代码获取$ _GET ['id'](一个数字)并用它做一些事情。 完成后我需要增加该数字($ _GET ['id'])并重定向到同一页面但使用新号码(也使用$ _GET ['id'])。

我正在做这样的事情:

$ID = $_GET['id'];

// Some stuff here

// and then:

$newID = $ID++;

header('Location: http://localhost/something/something.php?id='.$newID);
exit;

这里的问题是浏览器阻止我这样做,我从浏览器(Firefox)收到此错误:“页面没有正确重定向。Firefox已检测到服务器正在重定向此地址的请求一种永远无法完成的方式。“

请帮忙!

注意:有些人建议做一个内部循环,我的意思是一个简单的'for'循环,但是当我这样做时,我得到一个时间限制错误(60秒),因为循环将花费更多的时间来完成.. < / p>

6 个答案:

答案 0 :(得分:4)

这是一个无限循环,每次页面加载时,它都会更改$_GET['id']并再次重定向到自身。您需要一种方法来检测值是否符合您的要求(最终)并跳过重定向。

我建议您在递增id之后添加第二个参数,例如final,这样当第二次加载页面时,它会跳过重定向,因为final已设置。

即:

if ($_GET['final'] != 1)
{
    header('Location: http://localhost/something/something.php?id=' . $newID . '&amp;final=1');
}

答案 1 :(得分:1)

我认为因为浏览器是无限循环

如果您发布的代码也在something.php,那么它将始终增加数字。

此外,没有理由执行$newID = $ID++,因为++运算符会自动增加该操作数($ID)。

你想要的是某种形式的逻辑来阻止循环。也许...

if ($ID > 3) {
   // don't redirect
}

然而,我无法真正看到重定向作为一个循环是一个好主意,除非你试图做一些可能通过后台进程或cron作业更好地实现的东西。

答案 2 :(得分:1)

我建议你重新设计你正在做的事情。重定向回自我应该不会发生多次,没有继续循环所需的用户输入。

一旦浏览器看到即使是无限循环的最轻微的可能性,它也会崩溃。即使您在达到100时有if($ ID == 100){.. STOP ..},浏览器也会破坏您的循环,仅仅因为按照行业标准,这被认为是糟糕的设计,这就是为什么你的浏览器已被编程为停止这样的事情。

你能分享你实际上想要用这个循环做什么。我相信有人可以通过这种方式实现你想要的目标。

更新评论

然后你可能想要研究AJAX或PHP API。我明白你的意思和想做的事情,需要在受控环境中完成,而不是循环。浏览器永远不会允许这种循环。所以,有几种方法可以做到这一点。您可以使用客户端方法来执行此操作,其中php为您提供了一个页面,以便将内容从一个源传输到另一个源。或严格的PHP使用PHP API方法来获取内容并将其直接带回服务器。然而,这两种情况都不是初学者的概念。 :)如果你知道我的意思。

答案 3 :(得分:0)

ob_start();     在session_start();

if (  $_SESSION["id_old"] == $_GET['id']){ return false;}

 $ID = $_GET['id'];
 $newID = ++$ID;

 $_SESSION["id_old"]= $newID;


 header('Location: http://localhost/something/something.php?id='.$newID);

exit;

测试localhost / something / something.php?id = 22 - &gt; localhost / something / something.php?id = 23 return false;

答案 4 :(得分:0)

看起来你正试图从外部来源抓取大量数据。为什么不在自己的计算机上而不是通过浏览器将其作为本地脚本运行?然后,您不必担心脚本超时或浏览器检测到无限重定向。

答案 5 :(得分:0)

答案是在我的localhost本地执行,使用'for'循环和set_time_limit(0)将PHP的60秒限制设置为0(无限),而不是重定向到同一页面上再一次。