我的问题是我有一个在其中有一个函数的类,我得到了;
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);
尝试执行标题重定向的文件只是将此文件包含在页面顶部,并将标题降低。
提前致谢。
答案 0 :(得分:8)
在调用标题函数之前,某些代码已输出到“屏幕”时会触发此错误。在输出任何内容之前必须设置标题。
中的说明请记住,在任何实际输出之前必须调用header() 通过普通HTML标记,文件中的空行或PHP发送。 使用include()或require()读取代码是一个非常常见的错误, 函数或其他文件访问函数,并且有空格或空 调用header()之前输出的行。一样的问题 使用单个PHP / HTML文件时存在。
我会说你的代码在某处产生错误。尝试设置:
ini_set('display_errors', true);
ini_set('error_reporting', ~0);
在index.php文件中作为第一组命令。
另一种可能性是,某处某处正在输出空格或行返回字符。在致电header()
函数之前,您不能拥有任何类型的任何输出。
有两种方法可以解决这个问题。
要实现解决方案1,您可以在代码的最开头(通常位于引导程序文件或index.php的顶部)调用ob_start()
。
然后,一旦完成所有逻辑并准备输出,您将调用ob_end_flush()
输出缓冲区中的所有内容。通常这将位于index.php或bootstrap文件的最后。
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我没有说禁用错误,只禁用警告 无法修改标题信息表示您在标题之前输出了一些内容。删除标题()之前的所有空格;