我正在寻找可能触发以下 PHP 警告的事情:
PHP 警告:无法修改标头 信息 - 标头已发送 第 0 行未知
命令,这通常没问题,但在开始发送内容后就不行了(在这种情况下可能只是一个空格)。使用
通过缓冲来阻止输出立即出去。所以这是一个潜在的解决方案,或者至少是诊断它来自哪里的方法,正如zodeus 所说的那样。 导致这些空间丢失的一个常见原因就是在这种情况下。
<?php
$variable = 1;
$database = 'something else';
?> <-- A space here
<-- Or here
<?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()
ob_start();
callYourFunction();
ob_end_clean();
一次执行此一个函数,当错误消失时,您就会知道哪个函数导致了您的问题,然后您可以提交错误报告或将其作为黑客保留。但至少你知道是什么功能导致了问题。编辑:事实上,您的输出发生在第 0 行,这意味着它是一个 C 级函数执行输出,而不是使用 PHP 编写的任何代码。
我发现的最常见问题是标题中的文本。可见:
<?php // myfile.php
include 'header.php';
?>
并在 header.php 中:
<?php // header.php
....
?>
您在这里看不到的是在结束符“
?>
”之后有一个空格 - 要么是空格,要么是 CR/LF。这是输出,因为 php 标准规定 php 标签之外的任何内容都会输出为 html。
解决方案是确保在关闭“
?>
”后删除所有内容