是否有人知道如何在 CodeIgniter 中使用 $config['compress_output'] = true
找到导致此“内容编码错误”的泄漏点?
我已经尝试调试这个错误好几天了,但我似乎无法找到泄漏的位置。 LogLevel
位于 debug
但发生此错误时我在日志中看不到任何信息。
那么,有什么想法可以调试这个吗?
更新
我真的不想禁用 compress_output
功能,我只想看看如何追踪错误产生的位置
更新2
我一遍又一遍地查看 Controller 中是否有任何输出......但没有,所以肯定是在其他地方引发了错误。没有模型/数据库,只有 Controller 、库、助手和 View
最佳答案
这个问题是输出缓冲开始的地方。 config 变量的检查位于 _display()
的 system/core/Output.php
中。它在大量代码已经运行后启动 gzipped 缓冲。这使得输出有可能在缓冲开始之前发生。
将 compress_output
设置为 false
没关系,因为没有任何内容被编码。将其设置为 true
您最终会得到混合内容。有些输出是编码的,有些不是,这会导致压缩错误。
有两种解决方案:
1) 您可以将 compress_output
设置为 false 并将 ob_start('ob_gzhandler');
添加到 index.php 文件的顶部。这将确保所有输出始终被压缩,包括错误。
2)另一种解决方法是在system/Output.php
中的ob_start('ob_gzhandler');
之前添加ob_flush();
.这将在没有错误时输出 gzip 并在有错误时为您提供未编码的内容。
我认为 2 是更好的解决方案,应该由 CodeIgniter 团队实现。但是,如果您不想弄乱系统代码(升级时更改会消失),那么 1 对您来说是更好的解决方案。
关于php - CodeIgniter "content encoding error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10971191/