1、session_start();执行前不能有输出,或者漆面有ob_start();并php.ini配置output_buffering = On;

2、如果是utf8文件的话,要注意前面是否有bom。

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

网上资料

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的诡异问题2007-06-30 14:29一、
//---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()错误

2007-02-15 14:55:01

大中小 
采用默认的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

php 关于session_start()总是提示错误的更多相关文章

  1. maven project中,在main方法上右键Run as Java Application时,提示错误:找不到或无法加载主类XXX.XXXX.XXX

    新建了一个maven project项目,经过一大堆的修改操作之后,突然发现在main方法上右键运行时,竟然提示:错误:找不到或无法加载主类xxx.xxx.xxx可能原因1.eclipse出问题了,在 ...

  2. .NET读取Excel数据,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序

    解决.NET读取Excel数据时,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序的操作: 1. 检查本机是否安装Office Access,如果未安装去去h ...

  3. Eclipse创建Maven时提示错误could not resolve archetype

    今天用Eclipse创建Maven多模块项目的时候提示错误: could not resolve archetype ******release from any of the configured ...

  4. android Eclipse执行项目提示错误: unable to execute dex: GC orerhead limit exceeded

    Eclipse执行项目提示错误: unable to execute dex: GC orerhead limit exceeded 解决方法: 找到Eclipse安装目录的文件,\eclipse\e ...

  5. SourceTree不出现用户登录窗口,提示错误fatal: unable to access'...'; error setting certificate verify locations

    SourceTree不出现用户登录窗口,提示错误fatal: unable to access'...'; error setting certificate verify locations; .. ...

  6. 发布b3log-solo后,访问http://localhost:8080/b3log-solo/提示错误为staticServePath Error。

    发布b3log-solo后,访问http://localhost:8080/b3log-solo/提示错误为staticServePath Error. latke.props内容为: serverS ...

  7. Oracle登录时提示错误,导致用户无法登录

    Oracle登录时提示错误,导致用户无法登录,错误如下 ------------------------------------------------------------------------ ...

  8. SHELL syntax error:unexpected end of file 提示错误

    SHELL syntax error:unexpected end of file 提示错误 if [ -n "$1" ] then " else " fi e ...

  9. WCF 在VS中,添加服务引用,地址输入http://ip/Service.svc,点击前往,提示错误,内容如下:

    WCF的service端的webconfig如下: <?xml version="1.0"?> <configuration> <system.ser ...

随机推荐

  1. XUtils框架的学习(一)

    一  xutils框架引入到AndroidStudio工程,最简单的方法:① 在APP的build.gradle里面加入 compile 'org.xutils:xutils:3.3.36'.② 一定 ...

  2. WCF开发时如何选择正确的实例模式(InstanceMode)?

    WCF开发时如何选择正确的实例模式(InstanceMode)?   在使用WCF实例模型时,你是否思考过这几个的问题: ”WCF中的实例模式如何正确应用”? ”使用WCF中的实例模式有何原则可以遵循 ...

  3. 转换时间为 “XX分钟之前”

    public static string getTimeAgo(string strDate) { string strTime = string.Empty; if (clsCommon.IsDat ...

  4. 33、多线程断点下载的实现&界面的更新

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  5. [原]我的CentOS设置

    [Date]2013-10-06 [Keywords]Linux.CentOS.Fedora [Environment]CentOS 6.3 Final . Wiz [Content]: 1.安装Fl ...

  6. TCP/IP 子网掩码浅析

    定义 是一种用来指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码.子网掩码不能单独存在,它必须结合IP地址一起使用.子网掩码只有一个作用,就是将某个IP地址划分成网络地址和 ...

  7. 6.1 CUDA: pinned memory固定存储

    CPU和GPU内存交互 在CUDA编程中,内存拷贝是非常费时的一个动作. 从上图我们可以看出:1. CPU和GPU之间的总线bus是PCIe,是双向传输的. 2. CPU和GPU之间的数据拷贝使用DM ...

  8. Spark常用RDD操作总结

    aggregate 函数原型:aggregate(zeroValue, seqOp, combOp) seqOp相当于Map combOp相当于Reduce zeroValue是seqOp每一个par ...

  9. 28个MongoDB NoSQL数据库的面试问答

    MongoDB是目前最好的面向文档的免费开源NoSQL数据库.如果你正准备参加MongoDB NoSQL数据库的技术面试,你最好看看下面的MongoDB NoSQL面试问答.这些MongoDB NoS ...

  10. C#基础系列(一)

    1.vs中F5(调试)和Ctrl + F5(直接运行不调试)的区别: Ctrl+F5是直接运行生成的程序,不进行重新编绎,所以运行起来比较快F5是重新编绎后再运行,这样可以在程序代码中设置断点跟踪来调 ...