Php 使用exit而不是echo更改输出mime类型
我们在服务器端代码中使用CodeIgniter,并且在返回HTTP代码(而不是200)时注意到一些奇怪的事情 对于HTTP代码200,我们使用的代码Php 使用exit而不是echo更改输出mime类型,php,codeigniter,Php,Codeigniter,我们在服务器端代码中使用CodeIgniter,并且在返回HTTP代码(而不是200)时注意到一些奇怪的事情 对于HTTP代码200,我们使用的代码 echo $output; 并允许附加更多输出 对于HTTP代码403(例如),我们使用的代码有: exit($output); 我们的服务器通常返回JSON响应,因此mime类型被显式设置为application/JSON 对于状态代码为200的情况(在客户端上),这可以正常工作,但是当使用错误(和exit)版本时,mime类型将重置为tex
echo $output;
并允许附加更多输出
对于HTTP代码403(例如),我们使用的代码有:
exit($output);
我们的服务器通常返回JSON响应,因此mime类型被显式设置为application/JSON
对于状态代码为200的情况(在客户端上),这可以正常工作,但是当使用错误(和exit
)版本时,mime类型将重置为text/html
有人知道为什么CodeIgiter会在这种情况下重置mime类型吗?我的猜测是,CodeIgniter使用输出缓冲来捕获所有要回显的内容,并设置mimetype,在编写完整的响应主体后发送输出 在exit()情况下,您完全终止了所有内容,因此,如果CodeIgniter在控制器逻辑之后执行任何此类操作,它将永远不会有机会首先设置正确的mime类型
一般来说,您应该避免调用
exit()
,除非您有非常具体的原因。虽然我不能确认这一点,但这与我的想法是一样的。好的。这证实了我的怀疑。感谢您的反馈,非常感谢。我会把它留到明天再开始,以防有人带着另一个想法回来。“明天”终于来了(只是一个站点说明,您不应该在echo
之后使用括号,因为它不是一个函数,而是一个语言构造。请参阅::-)是的,我不是在复制代码,只是想让它看起来漂亮。我将其编辑为正确的(实际代码已经是)。Peter,通常“正确”是最漂亮的做事方式。:-)非常同意。您可以使用$this->output->set_content_type('application/json')代码>在控制器中,它设置输出缓冲区的内容类型。此外,如果需要,还可以设置标题。