2012-01-13 57 views
-3

Possible Duplicate:
Headers already sent by PHP替代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(); 
} 
+3

另一种方法是在header()之前阻止任何输出。输出任何内容是毫无意义的,以防用户**从不**看到 – zerkms 2012-01-13 02:20:20

+0

以确保我不会意外发送标题数据,因此我永远不会关闭我的''<?php'标记。 – davogotland 2012-01-13 02:24:33

回答

-2

你可以用HTML元标记尝试。第一个值是以秒为单位的延迟,第二个是您想要重新映射的网址。

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

不,如果他使用PHP,他应该在应该重定向的代码部分之前解决内容输出的问题。除此之外,meta-refreh不如服务器端重定向可靠。 – Connum 2012-01-13 09:15:39

0

你最有可能得到这个错误,因为地方调用头()函数之前,你输出的东西到浏览器,例如通过回声。您可以使用ob_start()和ob_end_flush()的组合作为快速修复,但也许您应该重新考虑应用程序的流程。对于ob(输出缓冲区)函数,请看这里:http://www.php.net/manual/en/function.ob-start.php

编辑:甚至一个空格或其他空白php打开或关闭之前可以导致相同的效果。

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

0

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