【问题标题】:Can't redirect to another page at the end of the PHP script无法在 PHP 脚本末尾重定向到另一个页面
【发布时间】:2011-11-16 16:58:19
【问题描述】:

以下几行:

echo '<br/><br/>'.$_SERVER["SCRIPT_NAME"]."?page=".$pager->GetVariableC."&threadID=".$threadID;
header("Location:".$_SERVER["SCRIPT_NAME"]."?page=".$pager->GetVariableC."&threadID=".$threadID);

给我这个:

/PoliticalForum/Thread/thread.php?page=2&threadID=6 警告:无法修改标头信息 - 标头已由第 348 行 C:\xampp\htdocs\PoliticalForum\Thread\thread.php 中的(输出开始于 C:\xampp\htdocs\PoliticalForum\Thread\cmets.php:42)发送

如何在脚本末尾重定向?

【问题讨论】:

  • 您是否检查了 C:\xampp\htdocs\PoliticalForum\Thread\cmets.php 中第 42 行的内容?
  • 注释回显语句,在headers发送前不允许打印任何内容。
  • 是的,我可以,但我在脚本末尾执行此操作.. 在重定向发生之前需要完成一些 sql 语句
  • @SeRPRo 即使不检查该行的内容,header() 行之前也有一个 echo 语句。

标签: php url header


【解决方案1】:

发生此错误时,您已经通过使用 echo 或在结束 php 标记后添加几行新行向浏​​览器发送了一些内容。确保在重定向之前不要有任何新行或回显某些内容。

【讨论】:

  • 在您执行一些操作并在最后重定向的 PHP 脚本中,输出某些内容(回声)是没有意义的。因此,您必须确保在重定向之前不回显某些内容。如果你遗漏了什么,请检查脚本的逻辑。
  • 我不会使用那个重定向.. 太糟糕了没有办法,在 asp.net 中有 Server.Redirect 或 Response.Redirect ... :(
  • 您始终可以使用 PHP 的输出缓冲 (php.net/manual/en/book.outcontrol.php),或者使用一个简单的变量来连接所有输出,如果重定向不会发生,请回显这个变量。
【解决方案2】:

使用 PHP 的 header() 将输出发送到客户端浏览器后,您无法重定向。

你可以做的是使用meta标签:

<meta http-equiv="refresh" content="2;url=http://www.destination.com/"> 

其中2 是重定向前的时间(以秒为单位),url 是目标。你可以找到更多关于它的信息here(你应该阅读drawbacks部分)。

【讨论】:

  • 不错的方法..但这不是我想要的..因为你可以看到我需要攻击 url 的变量并且需要在脚本末尾执行标头跨度>
  • @DmitryMakovetskiyd 你仍然可以使用 PHP echo 目标 url。另一种可能的解决方案是在 header() 函数调用之前不输出 anything ,因为对于 echo 任何由于重定向而不会被用户读取的内容都没有多大意义.
  • 那是真的..但是脚本确实涉及回显..我明白你的意思..我有条件地使用标题..用户在其他时间读取 cmets 我希望重定向发生跨度>
【解决方案3】:

在您已经向浏览器发送任何数据后,您无法重定向,在这种情况下,第一行就是这样做的。你为什么要打印一些你永远看不到的东西(浏览器会立即被重定向)?

如果可能,请删除重定向上方的输出行,或者如果您无法修改周围的代码,请考虑使用输出缓冲区。

【讨论】:

  • 我要执行一个insert语句,执行完后我希望用户被重定向到另一个页面
  • 那为什么不直接插入然后重定向呢?如果您不输出任何内容,则可以正常工作
【解决方案4】:

如果您想要输出和重定向,那么您需要使用 javascript 重定向。 http://www.tizag.com/javascriptT/javascriptredirect.php 您在此处执行的操作称为 HTTP 重定向(HTTP 302),它是作为响应发送到浏览器的 HTTP 标头之一。 此错误消息是由于您回显了具有发送所有缓冲 HTTP 标头的效果的内容,然后尝试设置标头(但它已经发送)。为了更好地了解这一点,我建议所有 Web 开发人员安装 firebug 并监视“网络”选项卡,您将真正更好地掌握标题及其含义。

干杯

【讨论】:

  • 我明白你的意思,但我不想使用 javascript.. 太糟糕了我不能使用这个功能
猜你喜欢
  • 1970-01-01
  • 2018-01-07
  • 2015-04-24
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多