天天看點

10054: An existing connection was forcibly closed by the remote host

打開頁面,PHP-CGI退出,Nginx錯誤日志如下:

打開其它頁面都沒問題,隻有這個頁面有問題,應該是那個頁面的PHP代碼的問題。

通過排除法,确定是下面紅色的代碼導緻:

if ($name == self::INPUT_HIDDEN) {            

} elseif($name == self::INPUT_LARGE_FILE_UPLOAD) {            

} elseif (isset(self::BEYOND_WIDGET[$name])) {            

} elseif ($name == self::INPUT_RICH_EDIT) {            

} else {            

}

常量BEYOND_WIDGET定義如下:

const INPUT_JSON = 'jsonEditor';            

const INPUT_RICH_EDIT = 'richEdit';            

const INPUT_HTML_CODE_EDITOR = 'htmlCodeEditor';            

const BEYOND_WIDGET = [            

self::INPUT_JSON => 'common\widgets\jsonEditor\JsonEditor',            

self::INPUT_IMAGE => 'common\widgets\inputImage\InputImage',            

self::INPUT_HTML_CODE_EDITOR => 'common\widgets\htmlCodeEditor\HtmlCodeEditor',            

];

另外,這個問題在PHP 7下是沒有的,在PHP 5.6下出現。

簡單總結一下,就是在PHP 5.6下,條件語句中通路常量數組會出問題(未有全面測試,僅從本案例得到結論,不一定準确)。

既然常量不行,那就把常量改成變量:

private $BEYOND_WIDGET = [              

self::INPUT_JSON => 'common\widgets\jsonEditor\JsonEditor',              

self::INPUT_IMAGE => 'common\widgets\inputImage\InputImage',              

self::INPUT_HTML_CODE_EDITOR => 'common\widgets\htmlCodeEditor\HtmlCodeEditor',              

} elseif (isset($this->BEYOND_WIDGET[$name])) {            

本文轉自 tywali 51CTO部落格,原文連結:http://blog.51cto.com/lancelot/1954846,如需轉載請自行聯系原作者