习惯了用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
<?php
header("Content-Type: image/BMP");
session_start();
................
?>
将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行<?PHP
3行 Session_Start();//之前在第一行已经有输出
4行.....
5行?>
==========================================
已经经过试验,事实确实是如此诡异。
三、
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 FE 00 00
相关推荐
标题 "node-v12.17.0-headers.tar.gz" 暗示了这是一个针对 Node.js 版本 12.17.0 的头文件压缩包。这个压缩包通常用于开发人员编译和创建与 Node.js C++ 扩展模块相关的项目。Node.js 是一个基于 Chrome V8 引擎的 ...
标题“kernel-headers-3.10.0-957.el7.x86_64”指的是Linux内核头文件的一个特定版本,用于RPM(Red Hat Package Manager)包管理系统的环境。在这个案例中,它是针对Linux内核版本3.10.0-957,适配于EL7...
标题中的"node-v10.21.0-headers.tar.gz"表明这是一款与Node.js相关的软件包,具体是Node.js版本10.21.0的头文件集合,存储格式为tar.gz,这是一种常见的在Linux和Unix系统中使用的归档和压缩格式。头文件在编程中...
kernel-headers-4.19.0-372.26.3.el8.bclinux.x86_64
kernel-headers-3.10.0-957.el7.x86_64.rpm kernel-devel-3.10.0-957
带xenomai补丁的linux内核源码。 sudo dpkg -i linux-headers-4.9.38-xenomai-3.1_4.9.38-xenomai-3.1-10.00.Custom_amd64.deb进行安装
glibc-headers-2.17-260.el7.x86_64.rpm
centos出现Missing Dependency :kernel-header 的解决方法: “Error: Missing Dependency: kernel-headers is needed by package glibc-headers-2.5-81.el5_8.2.x86_64” 安装kernel-headers即可解决问题
Centos7 el7.x86_64 官方离线安装包,安装指令为 sudo rpm -ivh kernel-headers-3.10.0-1160.119.1.el7.x86_64.rpm
centos7.7 kernel-headers-3.10.0-1062.el7.x86_64包
标题中的"kernel-headers-3.10.0-957.el7.x86_64.zip"和描述中的"kernel-headers-3.10.0-957.el7.x86_64.rpm"均指向了这个关键组件的一个具体版本,适用于Red Hat Enterprise Linux (RHEL)的衍生版——CentOS 7。...
centos出现Missing Dependency :kernel-header 的解决方法, ‘Error: Missing Dependency: kernel-headers is needed by package glibc-headers-2.5-81.el5_8.2.x86_64’ 安装kernel-headers即可解决问题
kernel-3.10.0-327.el7.x86_...kernel-headers-3.10.0-327.el7.x86_64.rpm kernel-tools-3.10.0-327.el7.x86_64.rpm kernel-tools-libs-3.10.0-327.el7.x86_64.rpm kernel-tools-libs-devel-3.10.0-327.el7.x86_64.rpm
《深入理解Linux内核开发与优化:以kernel-headers-3.10.0-1160.zip为例》 在Linux系统的世界里,内核是操作系统的核心,它负责管理和调度系统的硬件资源,为上层应用程序提供服务。本文将围绕"kernel-headers-...
kernel-lt-headers-4.4.190-1.el7.elrepo.x86_64.rp kernel-lt-doc-4.4.190-1.el7.elrepo.noarch.rpm kernel-lt-tools-4.4.190-1.el7.elrepo.x86_64.rpm kernel-lt-tools-libs-4.4.190-1.el7.elrepo.x86_64.rpm
kernel-headers-3.10.0-957.el7.x86_64.rpm 有的系统安装后缺少这个rpm,导致后续软件不能安装
CentOS 7内核rpm包kernel-headers-3.10.0-1127.19.1.el7.x86_64.rpm
kernel-headers-3.10.0-123.el7.x86_64.rpm 有的系统安装后缺少这个rpm,导致后续软件不能安装 安装后可以正常编译驱动模块、程序等。
kernel-headers-2.6.18-274.el5.x86_64.rpm 安装包linux