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 相关文章推荐
一个多文件上传的例子(原创)
Oct 09 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
PHP获取url的函数代码
Aug 02 PHP
php笔记之:文章中图片处理的使用
Apr 26 PHP
php设计模式之命令模式的应用详解
May 21 PHP
PHP通过API获取手机号码归属地
May 28 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
Dec 19 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
Feb 10 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 PHP
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
Apr 01 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
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
关于python字符串方法分类详解
2019/08/20 Python
使用Python实现画一个中国地图
2019/11/23 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
数学高效课堂实施方案
2014/03/29 职场文书
产品设计开发计划书
2014/05/07 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
杜甫草堂导游词
2015/02/03 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript