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();