PHPHeader失效的原因分析及解决⽅法
在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如何运行代码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失效的原因分析及解决⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论