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

简介:
现象

打开页面,PHP-CGI退出,Nginx错误日志如下:

2017/08/09 15:13:31 [error] 8140#19268: *1 WSARecv() failed (10054: An existing connection was forcibly closed by the remote host) while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /siteManager/template/templateEdit.html?id=1 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9090", host: "localhost:8202", referrer: http://localhost:8202/siteManager/template/templateList.html

原因

打开其它页面都没问题,只有这个页面有问题,应该是那个页面的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下,条件语句中访问常量数组会出问题(未有全面测试,仅从本案例得到结论,不一定准确)。

解决

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

const INPUT_JSON = 'jsonEditor';            
const INPUT_RICH_EDIT = 'richEdit';            
const INPUT_HTML_CODE_EDITOR = 'htmlCodeEditor';            
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',              
];

if ($name == self::INPUT_HIDDEN) {            
elseif($name == self::INPUT_LARGE_FILE_UPLOAD) {            
elseif (isset($this->BEYOND_WIDGET[$name])) {            
elseif ($name == self::INPUT_RICH_EDIT) {            
else {            
}






本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/1954846,如需转载请自行联系原作者

目录
相关文章
|
人工智能 前端开发 JavaScript
webpack-dev-server代理后端一直报CORS跨域或500错误
在Vue项目中使用Webpack的devServer代理后端接口时,遇到500错误。问题根源在于浏览器请求中携带的Origin头导致服务器报错,而Postman测试正常。通过分析发现,调整或移除Origin头可解决问题。解决办法包括:1) 在代理配置中添加正确的Origin头;2) 删除请求中的Origin头。文章还深入解析了Origin头的作用及changeOrigin配置的实际意义,并附带相关文档链接,帮助开发者更好地理解与解决类似跨域问题。
1002 20
|
8月前
|
监控 NoSQL JavaScript
1-JeecgBoot介绍
JeecgBoot是一款基于代码生成器的低代码开发平台,采用SpringBoot2.x、Vue、Ant Design等主流技术,实现前后端分离。支持分布式、微服务架构,集成Shiro、JWT、Redis、Nacos等组件,提供高效开发能力。
|
8月前
|
存储 弹性计算 固态存储
阿里云服务器ESSD Entry和Entry云盘等云盘选择指南,不同类型云盘性能区别与应用场景参考
阿里云服务器提供了丰富多样的云盘类型,以满足不同用户在不同业务场景下的需求。每种云盘都有其独特的性能特点和适用场景,为了帮助用户更好地理解和选择云盘,本文将详细解析阿里云服务器各个云盘的定义、区别、选择参考以及常见问题。让大家对阿里云服务器的云盘产品有更全面的了解,并能够根据自己的需求做出合适的选择,解决“阿里云服务器云盘怎么选”这一关键问题。
714 4
|
SQL NoSQL 前端开发
MySQL 连接数过多的处理方法合集 - Too many connections - 卡拉云
碰到`Can not connect to MySQL server. Too many connections”-mysql`错误着实令人抓狂。这基本等于失去了对 MySQL 的控制权。本教程将详细讲解多种处理此错误的方法。 sudo mysql -uroot -p ERROR 1040 (00000): Too many connections
26355 1
|
SQL 存储 缓存
SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
2105 0
|
安全 UED
麒麟的版本 V10 (Lance) V10 (Tercel) 有什么区别
【6月更文挑战第26天】麒麟的版本 V10 (Lance) V10 (Tercel) 有什么区别
14038 2
idea启动java服务报错OutOfMemoryError: GC overhead limit exceeded解决方法
idea启动java服务报错OutOfMemoryError: GC overhead limit exceeded解决方法
9648 3
|
安全 PHP 数据库
laravel中模型中$fillable的用法
通过正确使用 `$fillable`属性,开发者可以有效地保护应用免受批量赋值漏洞的影响。它使得只有指定的字段可以被外部用户输入影响,为应用数据的安全性提供了一道防线。在开发使用Laravel框架的应用时,恰当地设置 `$fillable`或 `$guarded`属性是一项最佳实践。
526 1
|
弹性计算 安全 Windows
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?