Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用exit而不是echo更改输出mime类型_Php_Codeigniter - Fatal编程技术网

Php 使用exit而不是echo更改输出mime类型

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

我们在服务器端代码中使用CodeIgniter,并且在返回HTTP代码(而不是200)时注意到一些奇怪的事情

对于HTTP代码200,我们使用的代码

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')在控制器中,它设置输出缓冲区的内容类型。此外,如果需要,还可以设置标题。