无法解决 "header have already been sent" 错误
Can't solve "header have already been sent" error
我已经安装了 Flarum 并尝试创建我的第一个扩展。我通过根文件夹的 composer.json 和 运行 "composer update" 按照教程和 "required" 我的扩展进行了操作。它出现在我的 Flarum 管理面板中,一旦我启用它,我就在整个网站上遇到了这个错误:
RuntimeException Failed to start the session because headers have
already been >sent by
"/srv/users/serverpilot/apps/myapplication/public/workbench/flarum-ext-yogi/bootstrap.php" at line 4.
扩展文件夹仅包含两个文件:composer.json 和 bootstrap.php
这是bootstrap.php的内容:
<?php return function () { echo 'Hello world!'; };
这是我的调用堆栈信息:http://i.imgur.com/myayCyt.png
一旦我从 bootstrap.php 中删除 "echo",我的网站就会重新开始工作。我尝试清理我的 cookie 和缓存,但没有帮助。
这可能是什么原因?为什么一个简单的回声会破坏整个网站?
如果你输出类似
的东西
echo 'Hello world!';
之前
`header("something");`
你需要把你的代码放在后面。您可能包含一个包含 header
的页面
好消息
您已经解决了自己的问题,发现问题在 bootstrap.php
。
解决方案
删除bootstrap.php
中的匿名函数。当应用程序仍在加载过程中时,它 echo
的内容。如果您想 echo
在页面上做一些事情,请在应用程序希望您做的正确位置进行。
等等,为什么?
这里有一个原则在起作用。 HTTP内容必须在内容之前有HTTPheaders。由于这个原则,使用echo
发送内容,因此也强制PHP发送header随之而来。
有大量关于 'Headers Already Sent' 错误的文档。我只能提供一个快速的解释,以节省您的阅读时间。
基本上,当它检测到您生成了 HTTP 内容时,PHP auto-sends HTTP headers。这正是你 echo
的时候。
这一切都很好,很漂亮,很有帮助。但是许多应用程序喜欢在发送之前对 HTTP header 进行手动更改。
应用程序在文件加载/初始化期间执行此操作。
您跳过了这一步,过早地交付了输出。
进入 Joe Shmoe Web 开发人员
所以一些写得不好的软件过早地使用 echo
,它通过强制 PHP 发送带有 echo
ed 内容的 headers 来搞砸整个事情,但它是申请前要.
因此,当应用程序到达它喜欢进行 header 更改的位置时,PHP 停止应用程序并说 未来的 Whosebug 用户 尝试了 echo
在一切都正确初始化之前(又名。Headers 已发送)。
现实世界的例子
这就像给祖母写了一封信,却没有经过深思熟虑。您将通常的特别版 Brazzers post 邮票放在信封上。然后您对信的内容感到非常满意,以至于您将信合上并丢在 post-office 处。第二天你 return 到办公室对 post-man 说你犯了一个严重的错误,想换信封。 post 办公室会告诉你它已经发送了。你昨天把你的内容寄给了信封。
我已经安装了 Flarum 并尝试创建我的第一个扩展。我通过根文件夹的 composer.json 和 运行 "composer update" 按照教程和 "required" 我的扩展进行了操作。它出现在我的 Flarum 管理面板中,一旦我启用它,我就在整个网站上遇到了这个错误:
RuntimeException Failed to start the session because headers have already been >sent by "/srv/users/serverpilot/apps/myapplication/public/workbench/flarum-ext-yogi/bootstrap.php" at line 4.
扩展文件夹仅包含两个文件:composer.json 和 bootstrap.php
这是bootstrap.php的内容:
<?php return function () { echo 'Hello world!'; };
这是我的调用堆栈信息:http://i.imgur.com/myayCyt.png
一旦我从 bootstrap.php 中删除 "echo",我的网站就会重新开始工作。我尝试清理我的 cookie 和缓存,但没有帮助。
这可能是什么原因?为什么一个简单的回声会破坏整个网站?
如果你输出类似
的东西echo 'Hello world!';
之前
`header("something");`
你需要把你的代码放在后面。您可能包含一个包含 header
的页面好消息
您已经解决了自己的问题,发现问题在 bootstrap.php
。
解决方案
删除bootstrap.php
中的匿名函数。当应用程序仍在加载过程中时,它 echo
的内容。如果您想 echo
在页面上做一些事情,请在应用程序希望您做的正确位置进行。
等等,为什么?
这里有一个原则在起作用。 HTTP内容必须在内容之前有HTTPheaders。由于这个原则,使用echo
发送内容,因此也强制PHP发送header随之而来。
有大量关于 'Headers Already Sent' 错误的文档。我只能提供一个快速的解释,以节省您的阅读时间。
基本上,当它检测到您生成了 HTTP 内容时,PHP auto-sends HTTP headers。这正是你 echo
的时候。
这一切都很好,很漂亮,很有帮助。但是许多应用程序喜欢在发送之前对 HTTP header 进行手动更改。
应用程序在文件加载/初始化期间执行此操作。
您跳过了这一步,过早地交付了输出。
进入 Joe Shmoe Web 开发人员
所以一些写得不好的软件过早地使用 echo
,它通过强制 PHP 发送带有 echo
ed 内容的 headers 来搞砸整个事情,但它是申请前要.
因此,当应用程序到达它喜欢进行 header 更改的位置时,PHP 停止应用程序并说 未来的 Whosebug 用户 尝试了 echo
在一切都正确初始化之前(又名。Headers 已发送)。
现实世界的例子
这就像给祖母写了一封信,却没有经过深思熟虑。您将通常的特别版 Brazzers post 邮票放在信封上。然后您对信的内容感到非常满意,以至于您将信合上并丢在 post-office 处。第二天你 return 到办公室对 post-man 说你犯了一个严重的错误,想换信封。 post 办公室会告诉你它已经发送了。你昨天把你的内容寄给了信封。