4

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

使用 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 查看该站点,这可能会帮助您帮助我 - 查看正在吐出的错误。

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

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


原来的错误是我需要将文件保存为 UTF-8(没有 BOM)...... PHP 似乎将 BOM 生成的某些字符解释为空格 - 在这里更好地解释:如何修复 PHP 中的“标头已发送”错误 感谢 Billy2mates 的链接!

4

4 回答 4

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 无法重定向 - 即使是空格空行也会导致此问题。标头必须是最先发送到浏览器的内容之一。

于 2013-05-16T05:49:54.273 回答
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();
?>

这将起作用

于 2013-05-16T06:06:03.407 回答
1

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

于 2013-05-16T05:50:29.017 回答
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.
{

}
?>
于 2013-05-16T06:30:36.827 回答