Warning: session_start(): Cannot send session cookie – headers already sent by (output started
at /www/users/honglousky.com/config.php:1) in /www/users/honglousky.com/index.php on line 5Warning: session_start(): Cannot send session cache limiter – headers already sent (output started
at /www/users/honglousky.com/config.php:1) in /www/users/honglousky.com/index.php on line 5
安装一个php程序时,我遇到了上面的错误提示。通过Google搜索相关的资料,得知:发生这一类问题的原因是因为在程序中使用 session_start()时,之前已经有实际的html内容输出了。或许你会说,我没有啊,我只不过是echo或print一条消息了。——很抱歉,你的echo或print语句所产生的输出,就是实际的html内容输出。解决此类问题的办法是,将你的session_start()调到程序的第一行。
但是,我查看了相关的php文件,session_start()前面并没有任何输出。这也就意味着,我遇到的问题,并不是因为session_start()之前有输出,应该还有其他的原因。
之后我也看了月光博客上面的相关介绍,发现那些方法也不是我所想要找寻的理想解决方法。于是继续摸索着,终于,在经过几个小时的测试之后,我发现了问题的真正所在——编码格式问题。
如上图,使用记事本打开php文件,将文件编码保存为ANSI,问题便解决了。
大家以后如果遇到类似的问题,可以参考如下处理步骤:
第一步、查看session_start()之前是否有输出,如果有,将session_start()提到最前。
第二步、查看相关文件的编码格式,如果编码格式是UTF-8或者其他,需将其改为ANSI。
第三步、如果以上步骤还不能解决你的问题,那么就请参考月光博客提供的方法,具体如下:
1)适用于有权限编辑php.ini的人
打开php.ini文件(你应试比我清楚你的php.ini在哪里),找到 output_buffering =,改为on或者任何数字。如果是IIS6,请一定改为on,不然你的php效率会奇慢。
2)使用虚拟主机,不能编辑php.ini,怎么办?
简单:在你的空间根目录下建立一个.htaccess文件,内容如下:
AllowOverride All
PHP_FLAG output_buffering On不幸的情况是:还是不行?全部网页都不能显示啦?
那么,你可以打电话骂一通空间商,然后让他给你把apache的 .htaccess AllowOverride 打开
3)在php文件里解决
ob_start()
启用output buffering机制。 Output buffering支持多层次,例如:可以多次调用 ob_start() 函数。ob_end_flush()
发送output buffer(输出缓冲)并禁用output buffering机制。ob_end_clean()
清除output buffer但不发送,并禁用output buffering。ob_get_contents()
将当前的output buffer返回成一个字符串。允许你处理脚本发出的任何输出。原理:output_buffering被启用时,在脚本发送输出时,php并不发送HTTP header。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中(只能在PHP 4.0中使用,它具有中央化的输出机制)。你仍然可以修改/添加header,或者设置cookie,因为header 实际上并没有发送。当全部脚本终止时,php将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容。
【版权声明】
禁止转载本站含有照片的文章(包括但不限于本人及本人亲友的照片)
禁止转载本站涉及中国大陆现状的描述、本人的政治评论等相关文章
其余文章允许非商用性质的转载,但请保留链接 http://400.tw
- « 上一篇:这个社会,对老年人到底做了什么?
- 被联通忽悠了…..:下一篇 »