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


Posted in PHP onNovember 16, 2016

在PHP中用header("location:test.php")进行跳转要注意以下几点:

1、location和“:”号间不能有空格,否则会出错。

2、在用header前不能有任何的输出,包括include的页面中标签“?>”后不能有空格!!

3、header后的PHP代码还会被执行。

续:

问题:header函数前输入内容

一般来说在header函数前不能输出html内容,类似的还有setcookie() 和 session 函数,这些函数需要在输出流中增加消息头部信息。如果在header()执行之前有echo等语句,当后面遇到header()时,就会报出 “Warning: Cannot modify header information ? headers already sent by ….”错误。就是说在这些函数的前面不能有任何文字、空行、回车等,而且最好在header()函数后加上exit()函数。例如下面的错误写法,在 两个php代码段之间有一个空行:

//这里应该是一个空行

原因:

PHP脚本开始执行 时,它可以同时发送http消息头部(标题)信息和主体信息. http消息头部(来自 header() 或SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中. 这样就可以允许你修改标题信息,包括缺省的标题(例如Content-Type 标题).但是,一旦脚本发送了任何非标题的输出(例如,使用 HTML 或 print()调用),那么PHP就必须先发送完所有的Header,然后终止 HTTPheader.而后继续发送主体数据.从这时开始,任何添加或修改Header信息的试图都是不允许的,并会发送上述的错误消息之一。

解决方法:

修改php.ini打开缓存(output_buffering),将output_buffering=0修改成output_buffering=4096

或 者在程序中使用缓存函数ob_start(),ob_end_flush() 等。原理是:output_buffering被启用时,在脚本发送输出时,PHP并不发送HTTPheader。相反,它将此输出通过管道(pipe) 输入到动态增加的缓存中(只能在PHP4.0中使用,它具有中央化的输出机制)。你仍然可以修改/添加header,或者设置cookie,因为 header实际上并没有发送。当全部脚本终止时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容。

以上这篇PHP Header失效的原因分析及解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
浅析php与数据库代码开发规范
Aug 08 PHP
PHP中的str_repeat函数在JavaScript中的实现
Sep 16 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
用PHP代码给图片加水印
Jul 01 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
PHP基于socket实现客户端和服务端通讯功能
Jul 13 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
php服务器的系统详解
Oct 12 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
php中用unset销毁变量并释放内存
May 10 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 #PHP
php导出csv文件,可导出前导0实例代码
Nov 16 #PHP
PHP制作登录异常ip检测功能的实例代码
Nov 16 #PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
Nov 16 #PHP
Smarty模板常见的简单应用分析
Nov 15 #PHP
Smarty日期时间操作方法示例
Nov 15 #PHP
Fleaphp常见函数功能与用法示例
Nov 15 #PHP
You might like
PHP数据库操作面向对象的优点
2006/10/09 PHP
php 从数据库提取二进制图片的处理代码
2009/09/09 PHP
PHP闭包函数详解
2016/02/13 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
Python随机数random模块使用指南
2016/09/09 Python
Python使用django搭建web开发环境
2017/06/09 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
详解python:time模块用法
2019/03/25 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
对Python生成器、装饰器、递归的使用详解
2019/07/19 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
jupyter 添加不同内核的操作
2021/02/06 Python
2014年大学生自我评价
2014/01/19 职场文书
海飞丝广告词
2014/03/20 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
总经理年会致辞
2015/07/29 职场文书