-3

可能重复:
PHP 已发送的标头

我的网站运行良好,直到我转移到 hostgator 服务器,但切换后我发现每个页面都有错误。

Cannot modify header information - headers already sent by (output started at /home/flip/public_html/index.php)

我打开了我的代码,我读了一些以前不放 html 的地方<?php ?>

我的代码是这样开始的

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<?php 
@session_start();
include_once("includes/connection.php");
$id=$_SESSION['user_id'];
    if(!isset($_SESSION['user_id']))
    {
      header("location:index.php");
    }
        if (!isset($_GET["event"])) {
            $caseVar = "share";
        } else {
            $caseVar = $_GET["event"];
        }
?>

它在以前的服务器中运行良好,但是当我切换到新服务器时,它开始在每一页中给出标题错误。但后来我把它放在doctype后面<?php ?>,它开始像以前一样工作。我真的很想知道为什么会发生这种情况。以前不能编写 html <?php ?> ,每次从服务器切换到服务器时我都必须更改代码吗?

4

3 回答 3

2

header()输出开始后不能调用函数。如果要确保在调用 a 之前没有输出开始,请header()使用输出缓冲区ob_start()然后ob_end_flush()打印输出并清除缓冲区。

仅供参考,session_start()是一种header()功能。

于 2012-08-16T18:43:47.990 回答
1

在 php 页面顶部调用 session_start() 之前,不能有任何 html。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">在结束 php 标记之后放置?>

于 2012-08-16T18:42:58.213 回答
1

你应该只搜索错误,这是一个非常常见的问题

问题是:您只能发送一次标头,如果您输出任何内容,则需要标头。

所以你的线

header("location:index.php");

如果你先输出一些东西(比如空格,或者在你的情况下是这个完整的行:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

会话也是如此:它需要发送标头。

于 2012-08-16T18:43:07.553 回答