【问题标题】:alternative to PHP header? [duplicate]PHP标头的替代品? [复制]
【发布时间】:2012-01-13 02:18:15
【问题描述】:

可能重复:
Headers already sent by PHP

我有一个处理注册的类文件,成功注册后我想将它们重定向到另一个页面,但如果我使用类似的东西:

    if(!isset($_SESSION['referer'])) {
        $_SESSION['referer'] = "home.php";

        header("Location: " . $_SESSION['referer']);
        exit();
    }

我得到错误:

Warning:  Cannot modify header information - headers already sent by ...

是否有另一种(非 java 脚本)方式将用户重定向到另一个页面?

这是我当前的代码流程:

// index.php file
<?php 
include('header.php');
include_once('classes/class.signup.php');

$signUp = new SignUp();

// redirect in signup.php class
if(!isset($_SESSION['referer'])) {
    $_SESSION['referer'] = "home.php";      
    header("Location: " . $_SESSION['referer']);
    exit();
}

【问题讨论】:

  • 替代方案是防止header()之前的任何输出。万一用户永远看到,输出任何东西都是没有意义的
  • 为了确保我不会意外发送标头数据,因此我永远不会关闭我的 &lt;?php 标签。

标签: php html http-headers


【解决方案1】:

您很可能会收到此错误,因为在调用 header() 函数之前的某个地方,您向浏览器输出了一些内容,例如通过回显。您可以使用 ob_start() 和 ob_end_flush() 的组合作为快速修复,但也许您应该重新考虑应用程序的流程。对于 ob(输出缓冲区)函数,请看这里:http://www.php.net/manual/en/function.ob-start.php

编辑:即使是 php 打开或关闭之前的空格或其他空格也会导致相同的效果。

Edit2:无法真正看出您的示例中的代码是否有任何问题。尝试输出缓冲区功能,看看是否有帮助。不想使用它们?比你必须追踪你已经发送的输出。

【讨论】:

    【解决方案2】:

    您可以使用网络浏览器的“查看源代码”功能来调查异常之前是否有杂散字符写入页面输出。也许您包含的文件之一是罪魁祸首。

    【讨论】:

      【解决方案3】:

      您可以尝试使用 html 元标记。第一个值是以秒为单位的延迟,第二个是您要重定向到的 url。

      <meta HTTP-EQUIV="REFRESH" content="0; url=http://www.yourdomain.com/index.html">
      

      【讨论】:

      • 不,如果他使用 PHP,他应该在应该重定向的代码部分之前解决内容输出的问题。除此之外,元刷新不如服务器端重定向可靠。
      猜你喜欢
      • 1970-01-01
      • 2012-01-28
      • 2012-12-20
      • 2011-01-01
      • 2020-11-27
      • 2013-08-01
      • 1970-01-01
      • 2010-10-03
      • 2023-03-24
      相关资源
      最近更新 更多