2017-08-09 28 views
3

我一直在使用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

可能導致此問題的原因是什麼?

如何啓用調試,以便我可以找到錯誤「空響應頭名稱」正在創建,以便我可以修補它?

回答

0

我能跟蹤下來的問題發送頭

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替換,現在它工作正常。也許我們會在這裏得到一個更新如何正確解決它。

+0

感謝您的回答。無論如何,我通過將PHP版本從7.0恢復到5.6來解決我的問題 – site80443

6

我修改的功能和工作原理:(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); }

相關問題