Php 标题已发送?。。。哪里

Php 标题已发送?。。。哪里,php,http-headers,output-buffering,Php,Http Headers,Output Buffering,可能重复: 我的日志文件中不断出现此错误: [15-Jan-2013 00:50:04] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/usr/public_html/display.php:1) in /home/usr/public_html/display.php on line 17 所以我看了第一行的页面,没有看到任何可以发送标题的地

可能重复:

我的日志文件中不断出现此错误:

[15-Jan-2013 00:50:04] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/usr/public_html/display.php:1) in /home/usr/public_html/display.php on line 17
所以我看了第一行的页面,没有看到任何可以发送标题的地方

display.php:

<?PHP
require './err/errhandler.php';
require './assets/display.php';
require './assets/excrate.php';

$mysql_host = "sqlhost";
$mysql_database = "db";
$mysql_user = "user";
$mysql_password = "password";

$name = $_REQUEST["q"];
$type = $_GET["s"];
$timeperiod = $_POST["tp"];
$currency = $_POST["c"];

if(isset($currency)){
    setcookie("prefCur", $currency, time()+60*60*24*30*12, "/");
    $_COOKIE["prefCur"] = $currency;
} else {
    if(!isset($_COOKIE["prefCur"])){
        setcookie("prefCur", "usd", time()+60*60*24*30*12, "/");
        $_COOKIE["prefCur"] = "usd";
    }
}
...
<?PHP
function strip_name($name)
{
    return preg_replace('/\s\([a-zA-Z 0-9]*\)/', '', preg_replace('/[0-9%]+\s/', '', str_replace(":", "", str_replace("-H", "-h", $name))));
}
我仍然收到一个错误,声称已经发送了头。我现在被难住了。在第一行上发送的标题在哪里?我甚至不能启用输出缓冲,因为它在第一行


编辑:在
之前绝对没有任何内容,只需将此代码写入文件顶部即可

ob_start();

删除对
setcookie()
的调用并检查输出。仅仅使用输出缓冲并不总是最好的选择。如果包含的任何文件输出任何内容或调用的任何函数抛出任何警告/通知,则构成正在设置的标题


再次移除
setcookie()
,然后从那里开始。从外部进一步诊断是一种猜测。:)

如OP所述,他的requires没有结束标记,因此在每个require的末尾添加
?>

其他文件的内容是什么?
$\u COOKIE[“prefCur”]=$currency这是有效的代码吗?在php之前甚至没有空格或新行?甚至是普通的html?特别是在您的包含文件中?所需文件是否有任何输出代码?还是空白?检查所有包含的文件中是否存在UTF-8 BOM表。请尝试。我在errhandler.php中设置它:
您还需要结束输出缓冲
ob_end_flush()检查这个@NullPointer,不一定。输出缓冲区将在php执行结束时自动刷新<代码>ob_end_flush()
是一种很好的控制方法。是的,我知道。我尝试了这两种方法:a)启用了输出缓冲,b)也通过ob_start()手动执行。测试页面时,我将如何在浏览器中检查输出。很重要的一点是,你必须向后剥去洋葱层,直到找到问题所在。如果您删除
setcookie()
并没有看到任何可见的输出,我们可以推测我们正在处理一个非法空间。哦,我尝试通过创建另一个页面test.php来实现这一点,该页面除了OP中显示的内容外,什么都没有,它在标题中没有返回任何内容(没有空格,什么都没有)。那么rogue空间会在哪里呢?因此,需要澄清的是,当您删除
setcookie()
时,您看不到任何可见的输出?但是,当您添加
setcookie()
返回时,您会得到关于已发送的头的错误信息?是。最后,我弄不明白,用我的主机发送了一张罚单,他们在全局php中启用了输出缓冲。如果我们只在文件中编写php代码,那么就不需要结束标记。。我想我学到了一些新东西。我一直认为您必须结束标记,但我猜您不需要为php only页面结束标记。这有什么原因吗。
<?PHP $eur = 0.747807; $gbp = 0.621828; $rub = 30.227148;
php_value auto_prepend_file none
php_value auto_append_file none
Options +FollowSymLinks
...
ob_start();