解决Warning: Cannot modify header information - head

近几天正冰在测试有关跨域名cookies存储问题,在某个php测试页面里的header函数一直遭遇:Warning: Cannot modify header information - headers already sent by错误提示。为了解决该问题,翻山越岭地用google查询了相关资料,形成该问题的缘由是:函数 header(),setcookie() 和 session 函数须要在输出流中增长头信息。可是头信息只能在其它任何输出内容以前发送。在使用这些函数前不能有任何(如 HTML)的输出。函数 headers_sent() 可以检查您的脚本是否已经发送了头信息。php

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

解决方案以下(须保证出错函数以前没有任何输出):cookie

一、若是说这条仅仅只是错误提示,并不影响你程序正常运做,那么只须要“屏蔽”它便可。在页面顶部的php标签中加入ob_start();,在返回的信息下面加入ob_end_flush();,这样就能够屏蔽错误信息。session

<?php ob_start(); ?>函数

... HTML codes ...测试

<?phpgoogle

... PHP codes ...spa

header ("Location: ....");code

ob_end_flush();orm

?>

二、反之要完全解决,正冰是经过Notepa

相关文章
相关标签/搜索