PHP标头重定向无法正常工作

时间:2013-05-16 05:47:01

标签: php redirect header

我已经完成了我的研究 - 并且已经找到了这个问题的多种解决方案,但无论出于什么原因,我仍然没有工作!

使用IIS来托管站点本地重定向工作正常,但是当我将它放在我的Web服务器上时,重定向不起作用。

以下是我的'myaccount.php'页面中的一段代码。

<?php
session_start();
if ($_SESSION['LoggedIn'] == true)
{    
    // ... Display page... lots of code here
}
else
// Session not active.
{
    // Redirect to login page.
    header("Location: http://{$_SERVER['HTTP_HOST']}/2ndassign/login.php");
}
?>

当该页面在线托管时,我只会看到一个空白的'myaccount.php'...不会发生重定向。没有空格会导致它出错。

所以,我已经将我的代码剪切到了这一点,因此它尽可能简单明了。错误报告已启用,因此它不再显示空白页面,但会吐出任何错误。

<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
header("Location:http://{$_SERVER['HTTP_HOST']}/2ndassign/login.php");
?>

您可以在www.candlesoft.com.au/2ndassign/myaccount.php上查看该网站 这可以帮助你帮助我 - 看看正在吐出的错误。

我的胆量告诉我这是我的托管服务提供商的设置。

PASSEBIN上的代码 - 这是来自www.candlesoft.com.au/2ndassign/myaccount.php的myaccount.php - 它不是整个文件的摘录。 (显示空格不会导致错误) http://pastebin.com/FUHPpT5A


原因是我需要将文件保存为UTF-8(无BOM)... PHP似乎将BOM生成的某些字符解释为空格 - 这里有更好的解释:How to fix "Headers already sent" error in PHP 感谢Billy2mates的链接!

4 个答案:

答案 0 :(得分:4)

错误描述了问题

Warning: Cannot modify header information - headers already sent by (output started at   /home/candleso/public_html/2ndassign/myaccount.php:1) in /home/candleso/public_html/2ndassign/myaccount.php on line 4

有些东西被发送到浏览器,因此php无法重定向 - 即使空格空行也会导致此问题。标题必须是发送到浏览器的第一件事。

答案 1 :(得分:3)

尝试ob_start();和ob_flush();

<?php
ob_start(); 
error_reporting(E_ALL);
ini_set('display_errors', 'On');
header("Location:http://{$_SERVER['HTTP_HOST']}/2ndassign/login.php");
ob_flush();
?>

这将有效

答案 2 :(得分:1)

标头指令必须是第一条指令之一,因为它之前不能有任何html代码

答案 3 :(得分:0)

试试此代码,您也可以这样检查..................................... ..................

<?php 
session_start();
if ($_SESSION['LoggedIn'] != true)
{    

    // Redirect to login page.
    header("Location: http://{$_SERVER['HTTP_HOST']}/2ndassign/login.php");
}
else
// Session not active.
{

}
?>