标头已经发送,文件缓存,修改不适用,如何刷新?

时间:2017-05-13 08:15:53

标签: php url caching header

我正在尝试在我的服务器上安装Chamilo,但是我收到警告并且安装被取消了...我认为警告不是错误而不会失败,但要么这个警告很重要,要么其他是错了,我不知道。

警告是“已发送的标头”。 我已经按照步骤解决它无济于事(我用回声评论了这些行,使用了ob函数甚至php.ini缓冲区设置,但它仍然显示这个完全相同的警告)。 它来自脚本,否则在我的WAMP测试服务器上工作正常,我发现在chamilo线程上没有任何关于它的抱怨...我甚至不确定这会导致整个安装崩溃......

Warning:  Cannot modify header information - headers already sent by (output started at /var/www/new_chamilo/main/install/index.php:391) in /var/www/new_chamilo/main/inc/lib/template.lib.php on line 1038, referer: XXX/new_chamilo/main/install/index.php?running=1&installType=new&updateFromConfigFile=

[...] header()/var/www/new_chamilo/main/inc/lib/template.lib.php:1038

所以这里提到的两行是:

header()/var/www/new_chamilo/main/inc/lib/template.lib.php:1038(结束})

  if ($sendHeaders) {
                header('Content-Type: text/html; 
    charset='.api_get_system_encoding());
                header(
                    'X-Powered-By: '.$_configuration['software_name'].' 
   '.substr($_configuration['system_version'], 0, 1)
                );
            }

和 index.php第390行

success: function(datos) {
                        if (datos == 'required_field_error') {
                            message = "<?php echo get_lang('FormHasErrorsPleaseComplete') ?>";
                        } else if (datos == '1') {
                            message = "<?php echo get_lang('ContactInformationHasBeenSent') ?>";
                        } else {
                            message = "<?php echo get_lang('Error').': '.get_lang('ContactInformationHasNotBeenSent') ?>";
                        }
                        alert(message);
                        $('#license-next').trigger('click');
                        $('#loader-button').html('');
                    }

我已经尝试评论这些错误回声,使用ob函数或使用php.ini进行缓冲,没有任何作用,我仍然收到警告并且安装失败(我不确定安装是否因为它而失败,但我没有任何其他消息)。 另外,php.ini说display_errors = Off但我仍然得到了

我甚至在发布这里之前就已经按照标题发送了教程,但它没有改变。 正如你在代码中看到的那样,有“echo”,我怀疑它是问题,所以我评论了整个函数(它只是关于向chamilo发送联系信息,所以它没用)但是完全相同的错误,指向评论的行,仍然会发生。 我想知道我的文件是否未被缓存。有没有办法强制刷新此文件?我看到htcacheclean可以清除缓存中的特定URL,但是我找不到如何执行此操作的示例。任何人都知道如何提供URL作为此命令的参数? Actualy我知道我必须安装一些缓存来缓存脚本以提高效率,因为它的缺失引发了许多警告。是否有多个缓存服务器端?

对此非常欢迎...... 提前感谢您的时间!

1 个答案:

答案 0 :(得分:0)

首先,Headers already sent消息通常是出现其他错误的症状。实际上,Headers already sent仅在某些内容(在PHP中)尝试发送HTTP标头但是......已经发送时才出现。问题通常是标题是在它们不应该发送时发送的,因此查看错误触发的位置通常是不正确的。

其次,display_errors = Off实际上可能会阻止您查看真正的问题,但发送标头并不总是错误的结果。

如果您可以访问服务器的error_log,那么错误可能更清楚(通常,对于Chamilo的安装过程,PHP版本应该是5.4或更高的问题) ,或未设置的date.timezone设置,或任何不匹配的依赖项)。了解出现的安装过程的哪一页也很有趣。它可能使调试更容易。 鉴于你提到了AJAX调用的块,它可能链接到联系表单,不是必须填写和发送(所以你可以完全跳过它)。

Headers already sent消息是警告,因此它可能不会完全阻止安装。也许你可以忽略它。

最后,如果您要从以前版本的Chamilo升级而不是安装新版本,您可能需要清除模板缓存(您可以使用rm -rf app/cache/twig/*在1.10及更高版本中执行此操作。