2018-09-07 11:52:59 6253次浏览 4条回答 0 悬赏 10 金钱

控制器当中echo或者var_dump获取到的数据的时候,数据没有全部输出,出现报错如下:

An Error occurred while handling another error:
yii\web\HeadersAlreadySentException: Headers already sent

此问题多处出现,请求大神指导

完整报错如下

An Error occurred while handling another error:
yii\web\HeadersAlreadySentException: Headers already sent in 
D:\phpStudy\WWW\fccms\backend\controllers\TestController.php on line 40.

in D:\phpStudy\WWW\fccms\vendor\yiisoft\yii2\web\Response.php:366

Stack trace:
#0 D:\phpStudy\WWW\fccms\vendor\yiisoft\yii2\web\Response.php(339):
yii\web\Response->sendHeaders()

#1 D:\phpStudy\WWW\fccms\vendor\yiisoft\yii2\web\ErrorHandler.php(135):
yii\web\Response->send()

#2 D:\phpStudy\WWW\fccms\vendor\yiisoft\yii2\base\ErrorHandler.php(111): 
yii\web\ErrorHandler->renderException(Object(yii\web\HeadersAlreadySentException))

#3 [internal function]: 
yii\base\ErrorHandler->handleException(Object(yii\web\HeadersAlreadySentException))

#4 {main}
Previous exception:
yii\web\HeadersAlreadySentException: 
Headers already sent in 
D:\phpStudy\WWW\fccms\backend\controllers\TestController.php on line 40. 
in D:\phpStudy\WWW\fccms\vendor\yiisoft\yii2\web\Response.php:366

Stack trace:
#0 D:\phpStudy\WWW\fccms\vendor\yiisoft\yii2\web\Response.php(339): yii\web\Response->sendHeaders()

#1 D:\phpStudy\WWW\fccms\vendor\yiisoft\yii2\base\Application.php(392): yii\web\Response->send()

#2 D:\phpStudy\WWW\fccms\backend\web\index.php(17): yii\base\Application->run()

#3 {main}
补充于 2018-09-07 11:57

百度了一下,输出结尾添加exit()可以解决(到处添加exit()有点…………),另外有没有其他解决方法

最佳答案

  • 刘师傅 发布于 2018-09-20 11:13 举报

    是你更新了yii2的新版本导致的吧,我记得好像是yii2.0.14好像在send方法里增加了一个检测是否输出header的功能,如果已经发送header,那么就抛出异常。直接exit吧。

    1 条回复
    回复于 2018-10-31 16:46 回复

    yii\web\Response::send() 方法使用以下步骤来发送响应:

    触发 yii\web\Response::EVENT_BEFORE_SEND 事件。
    调用 yii\web\Response::prepare() 来格式化 response dataresponse content。
    触发 yii\web\Response::EVENT_AFTER_PREPARE 事件。
    调用 yii\web\Response::sendHeaders() 来发送注册的HTTP头
    调用 yii\web\Response::sendContent() 来发送响应主体内容
    触发 yii\web\Response::EVENT_AFTER_SEND 事件。
    

    貌似如此,还是不太能理解,暂时先以exit()替代解决

  • 回答于 2021-04-28 12:11 举报

    如果是打印测试,无所谓了;
    如果是json接口,使用辅助类use yii\helpers\Json; 然后return
    `return Json::encode(['status'=>1,'message'=>'操作成功']);`

    现在的yii2在action操作使用return来返回

  • 回答于 2018-09-13 18:01 举报

    在接口返回前,应该已经输出过了。查看从进入接口到返回 中间有没有过打印输出

  • 回答于 2018-09-07 15:01 举报

    如果你只是调试,用exit;没毛病,如果是接口 请参考接口开发的相关教程就好。

您需要登录后才可以回答。登录 | 立即注册
yiiartisan
经理

yiiartisan

注册时间:2017-12-22
最后登录:2023-06-27
在线时长:25小时19分
  • 粉丝1
  • 金钱1210
  • 威望0
  • 积分1460

热门问题