温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

headersalreadysent错误会产生的原因是什么

发布时间:2021-09-22 17:09:01 来源:亿速云 阅读:173 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关headersalreadysent错误会产生的原因是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

  headersalreadysent发送或者修改HTTP头信息的方法必须在任何输出被输出之前被调用。否则调用将会出错Warning:Cannotmodifyheaderinformation-headersalreadysent(outputstartedatscript:line)这些方法可以修改(modify)HTTP头信息。

  为什么headersalreadysent错误会产生

  为了理解为什么HTTPheader必须在输出之前发送出去,我们有必要了解看一下一个典型的HTTP相应。PHP脚本主要用来生成HTML,但它也会发送一系列的HTTP/CGI头信息到web服务器

  HTTP/1.1200OK

  Powered-By:PHP/5.3.7

  Vary:Accept-Encoding

  Content-Type:text/html;charset=utf-8

  <html><head><title>PHPpageoutputpage</title></head>

  <body><h2>Content</h2><p>Somemoreoutputfollows...</p>

  and<ahref="/"><imgsrc=internal-icon-delayed></a>

  页面或者输出总是紧跟在头信息后面。PHP必须先把头信息发送给web服务器,并且它只能发送一次,在这之后就再也不能修改头信息了。

  当PHP第一次接收到输出时(print,echo,<html>)它会清掉所有收集到的头信息。在此之后它能把输出所有想输出的内容,但是再想发送HTTP头信息就不可能了。

  怎么找到到底是哪里headersalreadysent?

  header()头信息包含所有与问题产生相关的信息:

  Warning:Cannotmodifyheaderinformation-headersalreadysentby(outputstartedat/www/usr2345/htdocs/auth.php:52)in/www/usr2345/htdocs/index.phponline100

  在上面的警告中,line100指向调用header()失败的脚本行数。

  圆括号里的outputstarted这条信息更加重要。它指出了先于header()前的输出的源头。在这个例子中是auth.php的第52行,这就是你要去找的过早的输出的地方。

  典型的原因有这些:

  print,echo

  有意的print和echo语句输出将会中断输出HTTP头信息的机会。应用程序流必须重组以避免这种行为,可以使用function和模版来重组,从而保证header()调用是在信息被写出之前。

关于“headersalreadysent错误会产生的原因是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI