此问题已在此处有答案:
How to fix "Headers already sent" error in PHP(16个回答)
6天前关闭
下面是我的PHP代码的一个简单的例子(我希望如此)是自我解释。我尝试做的是更新会话变量。但是脚本的输出如下:
警告:session_start()[function.session-start]:Cannot send session cookie -header already sent by(output started at /Library/WebServer/Documents/facebook/test.php:8)in/Library/WebServer/Documents/facebook/test. php on line 11
当然,警告是由第8行和第9行中的echo
语句引起的。有没有简单的方法来阻止这个警告?
<?php
session_start();
$_SESSION['percent'] = 0;
$iterations = 50;
for ($i = 0; $i <= iterations; $i++) {
$percent = ($i / $iterations) * 100;
echo "Hello World!";
echo "<br />";
// update session variable
session_start();
$_SESSION['percent'] = number_format($percent, 0, '', '');
session_commit();
}
?>
5条答案
按热度按时间oaxa6hgo1#
从for循环中删除session_start()。
将session_commit()放在for循环的最后。
这两个函数在一个脚本中只能调用一次。
p3rjfoxz2#
在输出开始后,不可能设置cookie(或发送任何其他标头)。您可以在第1行添加ob_start()来缓冲输出。
正确的解决方案是将逻辑与输出分离。检查例如。http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=21
nuypyhwy3#
如果在session-start()语句之前没有任何previeus输出,则尝试将.php文件重新保存为ansi文件或不带BOM文件的utf-8。在某些情况下,编辑器本身会将内容作为输出写入文件。
它对我起作用
1rhkuytd4#
session_start()
函数只需要执行一次。所以只要把循环中的一个去掉。你也不需要手动做
session_commit()
,在大多数情况下,PHP会自动为你处理。g2ieeal75#
正如其他人所说,错误的原因是您正在使用的第二个
session_start()
。然而,它抛出错误的实际原因是因为您试图在发送输出后设置头。由于session_start()函数设置了会话cookie,它试图设置cookie头,这是在你已经回显内容之后。