1、php本身有个缓冲区,大小由php.ini中的output_buffering 参数决定,默认情况下,服务器先将网页内容输出到这个默认的缓冲区,当缓冲区满或页面已经执行结束,才通过tcp将缓冲区内容输出到浏览器;
2、在使用session_start()或setcookie()等函数时,需要该函数之前浏览器未有任何输出,如果之前有输出,这些函数就不能正常工作;
如以下代码:
<?php
echo "aaaaaaaaaa";
session_start();
?>
如果php.ini的缓冲区设置很小,装不下aaaaaaaaaa,那么aaaaaaaaaa必然会在session_start()前输出,此时页面会报错。
解决方案:
1、修改php.ini的output_buffering使之变大;
2、在页面开头的地方使用ob_start();函数,ob_start()相当于手动设置缓冲区,不受php.ini中指定的缓冲区大小限制,ob_start()后所有的内容都被缓存,直到使用ob_end_flush()或flush()或页面结束时输出内容到浏览器,这样页面就不会报错。