PHP 警告:标头已以未知方式发送[重复]

问题描述 投票:0回答:5

我正在寻找可能触发以下 PHP 警告的事情:

PHP 警告:无法修改标头 信息 - 标头已发送 第 0 行未知

php error-reporting
5个回答
9
投票

原来是这条线

ob_start("ob_gzhandler");

这导致了警告。这个问题似乎已经在 2001 年被报道并修复了,但由于某种原因它不断出现。


3
投票

header()

 命令,这通常没问题,但在开始发送内容后就不行了(在这种情况下可能只是一个空格)。
使用

ob_start()

 通过缓冲来阻止输出立即出去。所以这是一个潜在的解决方案,或者至少是诊断它来自哪里的方法,正如 
zodeus 所说的那样

导致这些空间丢失的一个常见原因就是在这种情况下。

global.php

<?php $variable = 1; $database = 'something else'; ?> <-- A space here <-- Or here

index.php

<?php require('global.php'); $var = dosomething(); header('Location: http://www.example.com/'); ?>

解决此问题的一种方法是删除 global.php 文件末尾的 ?> 。您不需要这些,只有当您开始在 PHP 代码后面添加 HTML 时,它们才有用。所以你会:

<?php $variable = 1; $database = 'something else';

并且当您执行
require()

时,

header()
之前不会输出空格。

为了说明输出内容和标题的问题,其他常见情况也会出现类似的错误。当您使用
header()

进行重定向后忘记停止处理时,就会发生这种情况。


if ($notLoggedIn) { header('Location: http://www.example.com/login.php'); } echo 'Welcome to my website'; // this will be outputted, // you should have an exit() // right after the header()



3
投票

ob_start(); callYourFunction(); ob_end_clean();

一次执行此一个函数,当错误消失时,您就会知道哪个函数导致了您的问题,然后您可以提交错误报告或将其作为黑客保留。但至少你知道是什么功能导致了问题。

编辑:事实上,您的输出发生在第 0 行,这意味着它是一个 C 级函数执行输出,而不是使用 PHP 编写的任何代码。


1
投票
UTF-8 BOM


0
投票

我发现的最常见问题是标题中的文本。可见:

<?php // myfile.php include 'header.php'; ?>

并在 header.php 中:

<?php // header.php .... ?>

您在这里看不到的是在结束符“
?>

”之后有一个空格 - 要么是空格,要么是 CR/LF。这是输出,因为 php 标准规定 php 标签之外的任何内容都会输出为 html。


解决方案是确保在关闭“

?>

”后删除所有内容

    

© www.soinside.com 2019 - 2024. All rights reserved.