qdPM Symfony 1.4 500内部服务器错误 - 空响应头名称,中止请求
我一直在使用PHP 7.0的Centos 6.7服务器上使用qdPM v9.0(来自qdpm/core/apps/qdPM/config/app.yml)。 6和apache 2.2.x和MariaDB 5.5.x一年多没有任何问题。 它似乎在使用传统的Symfony 1.4。qdPM Symfony 1.4 500内部服务器错误 - 空响应头名称,中止请求
我试图安装让我们加密SSL证书,并且这升级了Apache/httpd到2.2.15,PHP或MariaDB版本没有变化。
在SSL证书安装后重新启动httpd的,我突然获得500内部服务器错误和httpd的错误日志显示:
...
[Wed Aug 09 14:55:22 2017] [error] [client x.x.x.x] Empty response header name, aborting request
[Wed Aug 09 14:55:32 2017] [error] [client x.x.x.x] Empty response header name, aborting request
...
而且,这不是SSL /阿帕奇的错误配置,因为在其他项中的其他应用程序 - 域名可以继续正常工作,无论是否加密SSL证书。
谷歌不只是德国的一些讨论,帮助建议使用PHP 5.3: https://www.php.de/forum/webentwicklung/php-frameworks/1508593-installation-symfony-framework
的Symfony 1 geht努尔麻省理工学院最大的PHP 5.3 ... Deswegen sagte ICH多奇HOL目录Symfony的3!
我清除了缓存几次。 我删除了所有让我们加密SSL配置以及恢复旧的自签名SSL证书并将Apache配置恢复到较早的工作状态。
因为我们每天都进行备份,所以我甚至在几个小时之前恢复了整个代码备份。
这应该肯定有效。
我仍然得到相同的错误,并没有线索/提示如何调试它。 Symfony日志记录文档是针对其当前版本而不是针对1.4
可能导致此问题的原因是什么?
如何启用调试,以便我可以找到错误“空响应头名称”正在创建,以便我可以修补它?
我能跟踪下来的问题发送头
core/lib/vendor/symfony/lib/response/sfWebResponse.class.php
on line 357
东西是错误的价值观
但我其实不知道,是什么原因造成了这个问题。 qdPM 9.0在PHP7上运行良好,历时一年多,直到Ubuntu 16.04的apache2更新出现。
发现问题: E_WARNING:的preg_replace():本/ e修饰符不再支持,使用preg_replace_callback代替 ... /核心/ lib中/供应商/ symfony的/ lib目录/响应/ sfWebResponse.class.php上线409
,但我不明白的旧线: 回报的preg_replace( '/-(.)/ E', “ ' - ' strtoupper( '\ 1')”,strtr函数的效率(ucfirst(用strtolower( $ name)),'_',' - '));
转换成它可以工作。据我了解,它将用大写字母代替短划线后面的任何东西。但不能得到它与preg_replace_callback
return preg_replace_callback('\-(.)', function($m) { return '-'.strtoupper($m[1]); } , strtr(ucfirst(strtolower($name)), '_', '-'));
的anonymus功能不会被调用在所有的工作。我完全删除了preg替换,现在它工作正常。也许我们会在这里得到一个更新如何正确解决它。
我修改的功能和工作原理:(PHP 7.0+)
... /核心/ lib中/供应商/ symfony的/ LIB /响应/ sfWebResponse.class.php上线407
/** * Retrieves a normalized Header. * * @param string $name Header name * * @return string Normalized header */ protected function normalizeHeaderName($name) { $out = []; array_map(function($record) use (&$out) { $out[] = ucfirst(strtolower($record)); }, explode('-',$name)); return implode('-',$out); }
感谢您的回答。无论如何,我通过将PHP版本从7.0恢复到5.6来解决我的问题 – site80443