PHP错误Warning: Cannot modify header information - headers already sent by解决方法

今天在测试以下代码时遇到该错误:

代码如下:

session_start();
$_SESSION['username']=$username;
echo "<script language='javascript'>location.href='../admin.php';</script>";
exit();

出现错误:

代码如下:

Warning: Cannot modify header information - headers already sent by...

看了一些网上的方法也没解决,最后在php.ini配置output_buffering默认为4096就没有遇到这个错误了:

output_buffering设置说明:

Off: 表示关闭PHP输出缓存
    On: 打开无限大的输出缓存
    4096: 打开大小为4096Byte的输出缓存

默认情况下,php buffer是开启的,而且该buffer默认值是4096,即4kb。你可以通过在php.ini配置文件中找到output_buffering配置.当echo,print等输出用户数据的时候,输出数据都会写入到php output_buffering中,直到output_buffering写满,会将这些数据通过tcp传送给浏览器显示。你也可以通过ob_start()手动激活php output_buffering机制,使得即便输出超过了4kb数据,也不真的把数据交给tcp传给浏览器,因为ob_start()将php buffer空间设置到了足够大。只有直到脚本结束,或者调用ob_end_flush函数,才会把数据发送给客户端浏览器。

关于output_buffering详细介绍可以参考:

http://www.jb51.net/article/55707.htm

补充:当然你也可以通过去除BOM解决这个问题,建议以UTF-8无BOM格式编码。感谢 @ihipop 童鞋
关于BOM,简单的来说,软件通过BOM来识别这个文件是否是UTF-8编码。在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。

其中有提到另一个麻烦:“受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。”这个应该就是Wordpress后台出现空白页面的原因了,因为任何一个被执行的文件包含了BOM,这三个字符都将被送出,导致依赖cookies和session的功能失效,所以你也可能遇到如下错误:

代码如下:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at E:\web\index.php:1) in E:\web\functions\sessions.php on line 39

(0)

相关推荐

  • PHP中Header使用的HTTP协议及常用方法小结

    本文实例总结了PHP中Header使用的HTTP协议及常用方法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: <?PHP function https($num) { $http = array ( 100 => "HTTP/1.1 100 Continue", 101 => "HTTP/1.1 101 Switching Protocols", 200 => "HTTP/1.1 200 OK", 201 =

  • php中get_headers函数的作用及用法的详细介绍

    get_headers() 是PHP系统级函数,他返回一个包含有服务器响应一个 HTTP 请求所发送的标头的数组.如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息(可用来判断远程文件是否存在). 函数定义 array get_headers ( string $url [, int $format = 0 ] ) 参数 url 目标 URL format 如果将可选的 format 参数设为 1,则 get_headers() 会解析相应的信息并设定数组的键名. 示例

  • 探讨php中header的用法详解

     header() is used to send raw HTTP headers. See the HTTP/1.1 specification for more information on HTTP headers. 范例一: 复制代码 代码如下: <?PHPHeader("Location: http://www.jb51.net";); exit;//在每个重定向之后都必须加上"exit",避免发生错误后,继续执行.?> 复制代码 代码如下:

  • php输出xml必须header的解决方法

    本文实例讲述了php输出xml必须header的解决方法.分享给大家供大家参考.具体方法如下: 问题描述: 最近在做一个xml输出时发现我们直接使用echo输入的xml文档会提示Error: Object # has no method 'load'错误的了,后改用了header()输出xml头文件就解决了,下面记录一下. 解决方法: 由于xml长的和txt文件太相似,所以导致我总和txt混为一谈. 现来看看如下代码: 复制代码 代码如下: echo '<?xml version="1.0

  • PHP中header用法小结

    本文实例总结了PHP中header用法.分享给大家供大家参考,具体如下: PHP 中 header()函数的作用是给客户端发送头信息. 什么是头信息? 这里只作简单解释,详细的自己看http协议. 在 HTTP协议中,服务器端的回答(response)内容包括两部分:头信息(header) 和 体内容,这里的头信息不是HTML中的<head></head>部分,同样,体内容也不是<BODY>< /BODY>.头信息是用户看不见的,里面包含了很多项,包括:服务

  • PHP利用header跳转失效的解决方法

    本文实例讲述了PHP利用header跳转失效的解决方法,分享给大家供大家参考.具体方法分析如下: 一.问题: 今天header(\"Location: $url\"),以往跳转总是可以的,今天却不动,只是输出结果,以往自己要确认检查,$url的值获取的是否正确,所以在前面加了echo $url:来调试用,结果就导致了header函数的无效. 二.解决方法: 在PHP中用header("location:test.php")进行跳转要注意以下几点: 1.locatio

  • PHP中header函数的用法及其注意事项详解

    void header ( string $string [, bool $replace = true [, int $http_response_code ]] ) : Send a raw HTTP header 下面有一些使用header的几种用法: 1.使用header函数进行跳转页面: header('Location:'.$url); 其中$url就是将要跳转的url了. 这种用法的注意事项有以下几点: •Location和":"之间不能有空格,否则会出现错误(注释:我刚

  • PHP错误Warning: Cannot modify header information - headers already sent by解决方法

    今天在测试以下代码时遇到该错误: 复制代码 代码如下: session_start(); $_SESSION['username']=$username; echo "<script language='javascript'>location.href='../admin.php';</script>"; exit(); 出现错误: 复制代码 代码如下: Warning: Cannot modify header information - headers a

  • PHP提示Cannot modify header information - headers already sent by解决方法

    本文实例讲述了PHP提示Cannot modify header information - headers already sent by解决方法,是进行PHP程序设计过程中经常会遇到的问题.本文对此以实例形式分析解决方法.分享给大家供大家参考.具体方法如下: 现来看看这段代码: <?php ob_start(); setcookie("username","test",time()+3600); echo "the username is:&qu

  • PHP setcookie() cannot modify header information 的解决方法

    使用setcookie()函数时总是报以下错误: Warning: Cannot modify header information - headers already sent by.... 解决办法如下: 方法一: 在PHP里Cookie的使用是有一些限制的. 1.使用setcookie必须在<html>标签之前 2.使用setcookie之前,不可以使用echo输入内容 3.直到网页被加载完后,cookie才会出现 4.setcookie必须放到任何资料输出浏览器前,才送出 .....

  • Cannot modify header information错误解决方法

    <?php ob_start(); setcookie("username","宋岩宾",time()+3600); echo "the username is:".$HTTP_COOKIE_VARS["username"]."\n"; echo "the username is:".$_COOKIE["username"]."\n"; pr

  • 完美解决PHP中的Cannot modify header information 问题

    我就遇到这种问题,网上找到这个解决的方案,就收藏下写PHP的朋友们肯定遇到过这样一个问题:通过header函数改变http协议头的时候,会出现一个类似下面格式的warning: 复制代码 代码如下: Warning: Cannot modify header information - headers already sent by 这是为什么呢?因为在使用header函数之前,您不能输出任何东西,包括用echo或var_dump等输出函数的输出,还有在<?php之前的空格.不过有的时候,我们并

  • PHP Header失效的原因分析及解决方法

    在PHP中用header("location:test.php")进行跳转要注意以下几点: 1.location和":"号间不能有空格,否则会出错. 2.在用header前不能有任何的输出,包括include的页面中标签"?>"后不能有空格!! 3.header后的PHP代码还会被执行. 续: 问题:header函数前输入内容 一般来说在header函数前不能输出html内容,类似的还有setcookie() 和 session 函数,这些

  • php出现Cannot modify header information问题的解决方法大全

    这样的语句,很显然,造成这个原因是因为setcookie造成的,查了一下网上,有如下的解释:      cookie本身在使用上有一些限制,例如:        1.呼叫setcookie的敘述必須放在<html>标签之前        2.呼叫setcookie之前,不可使用echo        3.直到網頁被重新載入後,cookie才會在程式中出現        4.setcookie函数必須在任何資料輸出至浏览器前,就先送出        5.--        基於上面這些限制,所以

  • HTTP 错误 403.1禁止访问:禁止执行访问的完美解决方法

    HTTP 错误 403.1 - 禁止访问:执行访问被拒绝. 解决方法该页无法显示 您试图从目录中执行 CGI.ISAPI 或其他可执行程序,但该目录不允许执行程序. 请尝试以下操作: 如果您认为该目录应该允许执行访问权限,请与网站管理员联系. HTTP 错误 403.1 - 禁止访问:执行访问被拒绝. 技术信息(为技术支持人员提供) 转到 Microsoft 产品支持服务并搜索包括"HTTP"和"403"的标题. 打开"IIS 帮助"(可在 II

  • 解析错误富文本json字符串(带双引号)的快速解决方法

    公司的项目,通过json传回来的是这么个东西: NewsId":"94f52614-8764-46d7-a5fe-d0da1fe878ed","NewsTitle":"大型公选课<可持续发展与未来>系列二之现代经济(绿色经济)开始网上选课报名","NewsContent":"<span style="font-size:12pt;font-family:宋体;color:blac

  • python错误提示:Errno 2] No such file or directory的解决方法

    目录 1.问题描述: 2.解决方法: 3.小结: 总结 1.问题描述: 在学习北京大学曹健老师的tensorflow2.0笔记的时候,遇到了 [Errno 2] No such file or directory: './mnist_image_label/mnist_train_jpg_60000.txt' 这个没有查找到子文件或者子文件夹的问题. 2.解决方法: 首先,确定所写的路径中包含相应的文件夹或者文件. 其次,如果文件名字或者路径没写错,查看自己是否使用相对路径(绝对路径一般不会报错

随机推荐