是否有任何机构知道如何在CodeIgniter中找到导致{“1}}”内容编码错误的泄漏位置?
我试图将此错误调试好几天,但我似乎无法找到泄漏的位置。 $config['compress_output'] = true
位于LogLevel
,但发生此错误时,我在日志中看不到任何信息。
那么,任何想法如何调试呢?
我真的不想禁用debug
功能,我只是想看看如何追踪错误产生的位置
我一遍又一遍地看着控制器中是否有任何输出......并且没有输出,所以其他一些必须是错误引发的。没有模型/数据库,只有控制器,库,帮助器和视图
答案 0 :(得分:17)
此问题是输出缓冲开始的地方。对配置变量的检查位于system/core/Output.php
中的_display()
。在很多代码运行后,它启动gzipped缓冲。这样就可以在缓冲开始之前发生输出。
将compress_output
设置为false
并不重要,因为没有任何内容编码。将其设置为true
,您最终会得到混合内容。有些输出是编码的,有些不是导致压缩错误的。
有两种解决方案:
1)您可以将compress_output
设置为false,并将ob_start('ob_gzhandler');
添加到index.php文件的顶部。这将确保所有输出始终被gzip压缩,包括错误。
2)另一种解决方案是在ob_flush();
ob_start('ob_gzhandler');
之前添加system/Output.php
。这将在没有错误时进行gzip输出,并在出现错误时为您提供未编码的内容。
我认为2是更好的解决方案,应该由CodeIgniter团队实施。但是如果你不想破坏系统代码(升级时更改会消失)那么1对你来说是更好的解决方案。
答案 1 :(得分:2)
这可能是一个很长的镜头,但是如果您直接从控制器回显/打印数据库输出而不是将其发送到模型,您可能会收到与输出缓冲有关的错误消息。你是从你的控制器回应吗?
答案 2 :(得分:2)
在config.php中添加以下行:
$config['compress_output'] = FALSE;
解决它。我的问题是我发了帖子,但它没有识别FILLCATEGORIAS
功能。通过更改$ config [ 'compress_output'] = FALSE;
解决它。
当我们使用POST请求发送数据时发生了这个问题:
无法加载资源:net :: ERR_CONTENT_DECODING_FAILED
<script type="text/javascript">
$(document).ready(function() {
$("#idEmpresa").change(function() {
$("#idEmpresa option:selected").each(function() {
id = $('#idEmpresa').val();
$.post("<?php echo base_url();?>Admin/fillCategorias", {
idEmpresa : id
}, function(data) {
$("#idCategoria").html(data);
});
});
});
});
</script>
&#13;
答案 3 :(得分:1)
PHP中的任何错误都会破坏压缩。
要测试这一点,请在index.php中更改:
error_reporting(E_ALL);
到
error_reporting(E_ALL ^ E_NOTICE);
不要回显/打印以显示控制器的输出。
请勿使用“?&gt;”在控制器文件的末尾。
我希望它有所帮助。
<强>更新强>
要在开始缓冲之前检查输出是否为空,可以打开core / Output.php并添加
ob_flush();
前
ob_start('ob_gzhandler');
如果有空格或空行,压缩将失败。 (检查来自浏览器的页面源)。这是因为$ config ['compress_output'] = true,执行ob_start('ob_gzhandler')(Output.php中的第379行),这将导致“无法修改标题信息 - 标题已经发送... “警告。此警告是压缩失败的原因。
所以基本上,Output类之外的任何回显(包括 json输出)都会向客户端发送标题,这将导致“无法修改标题信息 - 标题已经发送... “警告,这将导致”内容编码错误“。
答案 4 :(得分:1)
我遇到了同样的问题。搜索之后,我发现我的控制器在文件末尾有?>
。所以我删除它,它完美地工作。这是link以获取更多详细信息。
答案 5 :(得分:0)
更兼容的解决方案:
$this->output->set_output($data);
答案 6 :(得分:0)
某些CPanel lightspeed扩展名更新会造成此问题。您可以尝试将此代码添加到.htaccess
文件中:
php_flag zlib.output_compression ON