php header already sent by...报错处理方法 Cannot send session cookie – headers already sent by

php  Cannot modify header information - headers already sent by (output started.....) 报错处理方法

 

近几天,对刚完成的一个小站,在本地测试没有任何问题,本地所用的开发环境为:wamp

可上传至服务器时,却出现的了:

Warning: Cannot modify header information - headers already sent by (output started.....) 

 

打开网站其它栏目页也是报出同样的错误,仔细一看内容页面的也是一样。仔细检查,发现原是有数据连接的页面都出现了此错误。花费了大半天的时间终于解决了。现分享一下。

 

报错解决: 

 

检查有<?php ... ?> 后面没有空白行,检查include或者require调用的文件。不少问题是这些空白行导致的。 

(我栽在这了)

修改php.ini配置文件中的session.auto_start; 将其默认值进行修改;

session.autp_start=0 改成 session.autp_start=1;

 

修改php.ini配置文件中的 output_buffering=off。

 

把 output_buffering=off 改为: output_buffering=on 

 

重启apache 。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

错误消息:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output ....... on line 67
Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (…….. on line 67

把出错的include 文件用写字板新建,copy源内容,竟然好了。估计是 DW 的问题。

以下是几个转帖,供大家参考。

Warning Cannot send session cookie – headers already sent…问题的解决(PHP的UTF-8 BOM引起的问题)

习惯了用edit plus进行php编程,所以有时会出现一些不为人知的错误,很麻烦;
近日,在开发项目时,某些页面总是出现以下问题:
Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at E:\web\Apache2\htdocs\index.php:1) in E:\web\Apache2\htdocs\functions\sessions.php on line 67

Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at E:\web\Apache2\htdocs\index.php:1) in E:\web\Apache2\htdocs\functions\sessions.php on line 67
经过详细搜索,得到以下原因:
我的edit plus中设置了默认的编码为utf-8,且UTF_8签名为:总是添加签名;
于是尝试以下操作:
在edit plus 的工具->参数->文件->UTF_8签名一项中,更改选项”总是添加签名”为”总是移除签名”,然后打开index.php文件,并重新另存为,重新运行脚本,终于可以正常了;

一个UTF-8 BOM引起的PHP的诡异问题

一、//—a.php
将a.php保存为utf-8格式,结果用浏览器访问这个php文件,就会出现如下错误:
Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started

at ×××.php:1) in ×××on line 2

这个问题很常见,多数是因为在session_start之前有输出了!对于老鸟来说,这个错误基本上不会发生,但是如果你是用DW或是editplus等编辑器写代码的,连高手也有可能发生这个错误!

如上面的提示:在第×××文件的第1行,×××文件的第2行,随你看,这两处是不会有任何输出语句的,很奇怪还是会出错,为什么呢
原来:Unicode 签名 (BOM) 可在文档中包括字节顺序标记 (BOM)。BOM 是位于文本文件开头的 2 到 4 个字节,可将文件标识为 Unicode,如果是这样,还标识后面字节的字节顺序。由于 UTF-8 没有字节顺序,因此可以选择添加 UTF-8 BOM。对于 UTF-16 和 UTF-32,这是必需的。
看见没有!如果选了这个选项,就会在页面的最前面输出2到4个字节!而 session_start() 要求之前没有任何输出给客户端浏览器

二、另外还有一个地方可能会出错,例如:
/–a.php–
?>
空行
空行

如果你包含a.php之后再来也会有这个问题,通常的建议是经常被包含的文件末尾不要有?>

又如:
在调用Session_Start()之前不能有任何输出.例如下面是错
误的.
==========================================
1行
2行
==========================================
已经经过试验,事实确实是如此诡异。

三、
session_start()
set_cookie()
header()
前面都加上@应该可以抑制这个警告。   @忽略报错

四、
在editplus编辑器中,如果先把utf-8的a.php文件转换为gb2312或是其他,然后再转换为utf-8这样就可以成功访问了,也就是说文件开头的BOM被去掉了,这时候的UTF-8 是无BOM类型的了。

PHP-关于utf-8编码问题引起的session_start()错误

采用默认的gb2312编码时,兼容Ansi编码,文件头部无任何附加信息,此时session_start()可以正常工作。
采用utf编码时,大部分编辑器都会在在文件头部附加一个BOM块,我的EditPlus附加的是FF FE,用16进制编辑器
可以很清楚的看到。这样,当调用session_start()时,实际上已经向浏览器输出两个字节,只不过是不可见字符浏
览器中出现如下警告:
Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at ………………….

解决方法:
1、手动去掉BOM块,可以在16进制编辑器如UltraEdit中编辑,或者采用编辑器自带的功能,好的编辑器一般提供选择是否去除BOM块。
2、自己编写脚本更正,这要针对不同的编辑器,BOM头定义:
 

代码如下: UTF-8 EF BB BF
UTF-16 Big Endian FE FF
UTF-16 Little Endian FF FE
UTF-32 Big Endian 00 00 FE FF
UTF-32 Little Endian FF FE 00 00

解决方法:
在进行PHP session 操作时,如果出现:Warning: Cannot send session cookie – headers already sent…”或者“Cannot add header information – headers already sent…”

只需对php.ini中的Output_buffering进行设置,默认值为no,修改为1即可。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

我出现的问题是,1,?>后有空格;2,session_start()没有放在最前面 3,session_start()和header()都在一个页面都需要在头部

注意 :session_start()一般放在头里,第一行。

            header()

header()跳转可修改为,如下:

echo '<html><head><Script Language="JavaScript">alert("您还没有登录,请登录");</Script></head></html>‘. "<meta http-equiv=\"refresh\" content=\"0;url=/login.html\">";

 echo "<script>;window.location.href='/efujian.php?bianhao=".$bianhao."';</script>";

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

PHP中header和session_start前不能有输出原因分析

在http传输文本中,规定必须 header和content顺序必须是:header在前content在后,并且header的格式必须满足“keyword: value\n”这种格式。

1、在header输出之前有输出内容的话,就会造成对header的错误理解(尽管现在已经能容错了),例如不是满足“keyword: value\n”的格式还好,直接错误了,但是满足“keyword: value\n”这个格式以后,客户端是否安装错误理解,还是按照正确理解?

2、session开启是会隐含的触发是否用header(“Set-Cookie: sid=xxxxxx”),也就是其实还是一个隐式的header调用 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值