无法修改标头信息

时间:2011-08-08 08:28:00

标签: php

  

可能重复:
  Headers already sent by PHP

我的问题是我有一个在其中有一个函数的类,我得到了;

Warning: Cannot modify header information - headers already sent by (output started at /home/user/public_html/inc/class.php:105) in /home/user/public_html/inc/facebook/login.php on line 21

当我正在使用它的页面重定向用户头();标签。班级是;

class mysql {
private $user;
private $pass;
private $db;

public function __construct($user1, $pass1, $db1) {
    $this->user = $user1;
    $this->pass = $pass1;
    $this->db = $db1;
    $this->connect();
}

public function connect() {
    $this->connection = mysql_connect('localhost', $this->user, $this->pass);
    $select = mysql_select_db($this->db, $this->connection);
}

public function query($x) {
    return mysql_query($x);
}

public function fetch($x) {
    return mysql_fetch_array($x);
}

public function num($x) {
    return mysql_num_rows($x);
}
}

第105行是;

return mysql_fetch_array($x);

尝试执行标题重定向的文件只是将此文件包含在页面顶部,并将标题降低。

提前致谢。

4 个答案:

答案 0 :(得分:8)

什么是触发此错误?

在调用标题函数之前,某些代码已输出到“屏幕”时会触发此错误。在输出任何内容之前必须设置标题。

请参阅header() PHP manual page

中的说明
  

请记住,在任何实际输出之前必须调用header()   通过普通HTML标记,文件中的空行或PHP发送。   使用include()或require()读取代码是一个非常常见的错误,   函数或其他文件访问函数,并且有空格或空   调用header()之前输出的行。一样的问题   使用单个PHP / HTML文件时存在。

我没有输出任何东西,所以给出了什么?

我会说你的代码在某处产生错误。尝试设置:

ini_set('display_errors', true);
ini_set('error_reporting', ~0);

在index.php文件中作为第一组命令。

另一种可能性是,某处某处正在输出空格或行返回字符。在致电header()函数之前,您不能拥有任何类型的任何输出。

可能的解决方案

有两种方法可以解决这个问题。

  1. 在设置标题之前使用输出缓冲来捕获可能被回应的任何内容
  2. 停止代码过早输出任何内容,尽管这有点脆弱
  3. 选项1

    要实现解决方案1,您可以在代码的最开头(通常位于引导程序文件或index.php的顶部)调用ob_start()

    然后,一旦完成所有逻辑并准备输出,您将调用ob_end_flush()输出缓冲区中的所有内容。通常这将位于index.php或bootstrap文件的最后。

    选项2

    Zend Framework在其编码指南中有以下内容,以帮助减轻新行和空格的意外输出。见http://framework.zend.com/manual/en/coding-standard.php-file-formatting.html#coding-standard.php-file-formatting.general

      

    对于仅包含PHP代码的文件,绝不允许使用结束标记(“?>”)。 PHP不需要它,省略它可以防止意外注入尾随空白区域。

答案 1 :(得分:0)

  

当我正在使用它的页面重定向用户头();标签。班级是;

这就是问题所在。您需要使用ob_start();header();放在文件的开头。

答案 2 :(得分:0)

该行不应该输出任何内容,因此这意味着输出已启动,因为打印了警告或通知。解决问题。

或者,您使用了错误的源文件。

答案 3 :(得分:-2)

在php.ini上禁用wanrings。这是警告,如果您在php.ini中有权访问,请修改以下内容

error_reporting = E_ALL& ~E_NOTICE& 〜E_DEPRECATED

正在开发中

display_errors = On

当你在制作时不要忘记

display_errors = Off

当您更改php.ini

时,不要忘记重启apache

我没有说禁用错误,只禁用警告 无法修改标题信息表示您在标题之前输出了一些内容。删除标题()之前的所有空格;