当前位置:  编程技术>php
本页文章导读:
    ▪php报错:Cannot send session cookie – headers already sent by的解决方法      错误消息: 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 .........
    ▪理解php dirname(__FILE__)      假设当前文件存放在(d:\www\)下,文件名为test.php。   代码如下: <?php echo __FILE__ ; // 取得当前文件的绝对地址,结果:D:\www\test.php echo dirname(__FILE__); // 取得当前文件所在的绝对目录,结果.........
    ▪php 二维数组去重的自定义函数      php的array_unique函数,可以去除数组中的重复元素,但其只适用于一维数组,对多维数组无能为力。 这里提供一个二维数组去除的函数array_unique_fb,供大家学习参考。   代码如下: <?php /** .........

[1]php报错:Cannot send session cookie – headers already sent by的解决方法
    来源: 互联网  发布时间: 2013-12-24

错误消息:
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-8 和 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-8 Big Endian FE FF
utf-8 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即可。


    
[2]理解php dirname(__FILE__)
    来源: 互联网  发布时间: 2013-12-24

假设当前文件存放在(d:\www\)下,文件名为test.php。
 

代码如下:
<?php
echo __FILE__ ; // 取得当前文件的绝对地址,结果:D:\www\test.php
echo dirname(__FILE__); // 取得当前文件所在的绝对目录,结果:D:\www\
echo dirname(dirname(__FILE__)); //取得当前文件的上一层目录名,结果:D:\
?>

说明:
dirname(__FILE__) 取到的是当前文件的绝对路径,比起相对路径,查找速度是最快的。
如果重复一次可以把目录往上提升一个层次:
比如:$d = dirname(dirname(__FILE__));
其实就是把一个目录给dirname()做参数了。因为dirname()返回最后的目录不带\\或者是/
所以重复使用的时候可以认为 dirname() 把最下层的目录当成文件名来处理了。照常返回
当前目录的上级目录,这样重复就得到了它的上一级的目录。

包含得到上一级目录的文件:
 

代码如下:
include(dirname(__FILE__).’/../filename.php’);

    
[3]php 二维数组去重的自定义函数
    来源: 互联网  发布时间: 2013-12-24

php的array_unique函数,可以去除数组中的重复元素,但其只适用于一维数组,对多维数组无能为力。
这里提供一个二维数组去除的函数array_unique_fb,供大家学习参考。
 

代码如下:
<?php
/**
  desc:二维数组去除重复
  link:www.
  date:2013/2/25
*/
function array_unique_fb($array2D){ 
     foreach ($array2D as $v){
         $v = join(",",$v);      //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
         $temp[] = $v;
     }
    $temp = array_unique($temp);   //去掉重复的字符串,也就是重复的一维数组
    foreach ($temp as $k => $v){
        $temp[$k] = explode()(",",$v);  //再将拆开的数组重新组装
    }
    return $temp;
}
?>

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
编程技术其它 iis7站长之家
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3