相信不少小伙伴在使用swoole混合使用php8支持的业务代码感到了满意的性能提升,但新手观察日志会看到不少和平时php写业务时不一样的报错。处理逻辑的时候, 笔者通常会在response对象后调用end()这个方法, 这个之后, 接着在response对象中再调用header() status() 等一众方法,日志会报Warning级别的错误, 表示http不再可用。报错信息类似:
PHP Warning: Swoole\Http\Response::setStatusCode(): http response is unavailable (maybe it has been ended or detached)
怎么解决呢?
检查业务逻辑, 是不是调用了end()之后逻辑没用return;退出, 还在继续操作reponse对象。比如你在swoole传进来的response对象中调用了redirect()方法, 之后再调用end()方法就会报这个错, 因为redirect()方法中已经包含了end()方法的逻辑。