我遇到一个问题,我的 Yii2 项目在托管时出现以下错误。在本地运行良好。
Fatal error: Uncaught yii\web\HeadersAlreadySentException:
Headers already sent in/home8/nakkadka/public_html/amirulaina/vendor/yiisoft/yii2/web/View.php on line 191.
in /home8/nakkadka/public_html/amirulaina/vendor/yiisoft/yii2/web/Response.php:369
Stack trace:
#0 /home8/nakkadka/public_html/amirulaina/vendor/yiisoft/yii2/web/Response.php(342): yii\web\Response->sendHeaders()
#1 /home8/nakkadka/public_html/amirulaina/vendor/yiisoft/yii2/web/ErrorHandler.php(136): yii\web\Response->send()
#2 /home8/nakkadka/public_html/amirulaina/vendor/yiisoft/yii2/base/ErrorHandler.php(323): yii\web\ErrorHandler->renderException(Object(yii\base\ErrorException))
#3 [internal function]: yii\base\ErrorHandler->handleFatalError()
#4 {main} thrown in /home8/nakkadka/public_html/amirulaina/vendor/yiisoft/yii2/web/Response.php
on line 369
我尝试了一些找到的解决方案,例如下面的示例,但我仍然遇到这个错误。一个奇怪的行为是,当我重新加载页面时,它就消失了,一旦再次重新加载,它就在那里。所以它会在出现特定错误和消失之间来回切换。我查找了这个错误,发现两个最常讨论的解决方案是控制器中没有“echo”,或者确保 php 开始标记之前或 php 结束标记之后没有空白。我已经对我的所有文件执行了这两项操作,包括仔细检查它们并且它仍然发生。任何见解将不胜感激。因为我现在不确定在哪里重新启动调试
我也主要在这里阅读这篇文章彻底的解决方案,因为它给出了彻底的解释,但没有帮助。它在某种程度上与 yii2 如何呈现一些修改 HTTP 标头的函数有关吗?
下面是 view.php 文件,它是供应商文件。这是从第 181 行开始的函数
public function endPage($ajaxMode = false)
{
$this->trigger(self::EVENT_END_PAGE);
$this->isPageEnded = true;
$content = ob_get_clean();
echo strtr($content, [
self::PH_HEAD => $this->renderHeadHtml(),
self::PH_BODY_BEGIN => $this->renderBodyBeginHtml(),
self::PH_BODY_END => $this->renderBodyEndHtml($ajaxMode),
]);
$this->clear();
}
因为我现在不确定在哪里重新启动调试
看起来无论触发 endPage() 对于想要在远程系统(但不是本地)上发送标头的部分来说都为时过早。
这可能是配置问题。比较两个系统之间的输出缓冲区的大小。如果远程的温度低于本地的,这可能表明情况确实如此。然后做出有根据的猜测,如果您自己确定这可能是罪魁祸首,请更改远程配置并进行测试。
如果这没有帮助,请恢复远程配置。您能做的最好的事情就是记录整个过程,这样您就已经捕获了两个系统上的那部分配置。