相信不少小夥伴在使用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()方法的邏輯。