我已安装Flarum并尝试创建我的第一个扩展程序。我已经按照教程和"要求"我通过根文件夹的composer.json扩展并运行" composer update"。它出现在我的Flarum管理员仪表板中,一旦启用它,我就在整个网站上出现了这个错误:
RuntimeException由于标头有,因此无法启动会话 已经被>发送了 " /srv/users/serverpilot/apps/myapplication/public/workbench/flarum-ext-yogi/bootstrap.php"在第4行。
扩展文件夹只包含两个文件:composer.json和bootstrap.php
这是bootstrap.php的内容:
<?php return function () { echo 'Hello world!'; };
这是我的callstack信息:http://i.imgur.com/myayCyt.png
一旦我删除&#34; echo&#34;从bootstrap.php我的网站再次开始工作。我尝试清理我的cookie和缓存,但它没有帮助。
这可能是什么原因?为什么简单的回声会破坏整个网站?
答案 0 :(得分:0)
如果您输出类似
的内容echo 'Hello world!';
之前
`header("something");`
您需要将代码放在后面。您可能包含一个包含标题
的页面答案 1 :(得分:0)
您已经通过bootstrap.php
找到问题解决了自己的问题。
删除bootstrap.php
中的匿名函数。当应用程序仍在加载过程中时,它是echo
的内容。如果您想在页面上echo
进行某些操作,请在正确的位置进行操作,应用程序需要您这样做。
这里有一个原则。 HTTP内容必须在内容之前包含HTTP标头。由于这一原则,使用echo
发送内容,因此也会强制PHP随之发送标头。
有很多关于已经发送的标题的文档&#39;错误。我只能提供快速解释,以节省您的阅读时间。
基本上,PHP会在检测到您生成HTTP内容时自动发送HTTP标头。这正是你echo
的时候。
这一切都很好,花花公子,乐于助人。但许多应用程序喜欢在发送之前手动更改HTTP标头。
应用程序在文件加载/初始化期间执行此操作。
您跳过此步骤并过早提供输出。
因此,一些编写得不好的软件过早使用echo
,它会强制PHP通过强制PHP发送带有echo
ed内容的标题,而不是在应用程序需要之前。
因此,当应用程序到达它想要更改标头的位置时,PHP会停止应用程序,并说明未来的stackoverflow用户在所有内容都已正确初始化之前尝试echo
(也就是说。标题已经发送)。