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

在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失效的原因分析及解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2016-11-13

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

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

Session 失效的原因汇总及解决丢失办法

昨天去GTSC面试,有面试官问我关于Session丢失之后怎么查的问题,说老实话,开发到现在很少碰到这样的情况,唯一想到的就是Session超时,还有就是做Session读写日志,发觉面试官听了之后不是很满意,汗! 不管怎么说,是个学习的好机会,今天抽空查了一下网上关于这些问题的处理方法,总结一下,希望对大家有所帮助. 顺便提一下asp中Session的工作原理: asp的Session是具有进程依赖性的.ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序.所以

$.getJSON在IE下失效的原因分析及解决方法

复制代码 代码如下: $.ajaxSetup({ cache: false }); $.getJSON("/MyQueryUrl",function(data,item) { // do stuff with callback data $.ajaxSetup({ cache: true }); }); 原因:getJson在IE下IE下默认会使用浏览器缓存,所以导致数据不显示 解决:让其不要使用缓存 这里有更多的解决方法 http://stackoverflow.com/questi

jquery submit ie6下失效的原因分析及解决方法

ie6中, $('a.btn').click(function(){ form.submit(); }) 点击失效: 分析: 微软低版本浏览器会先执行link标签的自身事件也就是href事件,这样就中断了form的submit事件,"return false;"的意思是中断link标签的的自身事件执行. 解决办法:换思路,用jquery直接处理图片.文字等的click $('a.btn').click(function(){       $('form').get(0).submit(

iframe跨域与session失效问题的解决办法

何为跨域跨域session/cookie? 也就是第三方session/cookie.第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, 会被存储在访客的计算机上.第三方session/cookie指的是当前访问的网站中会加载(嵌入)另外第三方的网站代码,例如促销广告,那么第三方网 站也会在访客的计算机上添加session/cookie,这种就是第三方session/cookie. 我的问题 在开发讯息在线产品(http://iap.p

Ajax请求session失效该如何解决

一般来说我们的项目都有登录过滤器,一般请求足以搞定.但是AJAX却是例外的,所以解决方法是设置响应为session失效. 一共分为过滤器和页面JS两个部分的设置,先看过滤器的修改: import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletExcep

关于动态生成dom绑定事件失效的原因及解决方法

之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试了一下: 1. 事件失效的原因: (1)bind事件绑定只对dom中存在的元素有效,对于我们后来动态增加的元素是监测不到,所以绑定不了 (2)同样,当你使用var aa = document.getElementsByTagName("动态生成的元素");来获取动态生成的元素的时候也是获取

完美解决ajax访问遇到Session失效的问题

最近由于一个项目,模块切换为ajax请求数据,当Session失效后,ajax请求后没有返回值,只有响应的html:<html><script type='text/javascript'>window.open('http://192.168.0.118:8080/welcomeAction/loginUI.do','_top');</script></html> 现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求

浏览器关闭使session失效的问题多种解决方式

如果用户不点击网站的"退出"链接,而直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,解决方式如下: 方式1:在每个页面中加入隐藏的IFrame,以异步刷新的方式定期刷新iframe页面,如每隔10S刷新一次,当服务器在一定的时间内未收到用户的刷新请求,则认为用户已经退出 优点:能在短时间内判断出用户是否已经退出 缺点:增加用户请求次数,所消耗的服务器资源较大 方式2:使用cookie保存用户登录信息,不要设置cookie的过期时间,当关闭浏览器时,c

ajax 操作全局监测,用户session失效的解决方法

ajax 操作全局监测,用户session失效的解决方法 jQuery(function ($) { // 备份jquery的ajax方法 var _ajax = $.ajax; // 重写ajax方法,先判断登录在执行success函数 $.ajax = function (opt) { var _success = opt && opt.success || function (a, b) { }; var _opt = $.extend(opt, { success: functio