PHP从CentOS 7服务器远程连接SQL Server登录超时如何解决
问题原因与解决方案
核心报错说明
返回的错误码10057、HYT00均指向网络层面无法连通目标SQL Server,不存在驱动或代码语法类错误,可按以下步骤逐一排查解决:
排查与解决步骤
1 修正配置不一致问题
当前存在IP配置不匹配的低级错误:
/etc/odbc.ini中填写的SQL Server IP为111.222.333.444- PHP连接代码中填写的服务器IP为
111.111.222.333
首先确认SQL Server的真实公网/内网IP,所有配置项的IP保持统一。
2 校验网络连通性
先在CentOS服务器上执行命令测试端口连通性:
# 未安装nc工具先执行安装 yum install -y nc # 替换为真实SQL Server IP测试1433端口连通性 nc -zv 真实SQL Server IP 1433
如果返回连接失败,按以下顺序修复:
- 确认SQL Server端已开启TCP/IP连接,SQLEXPRESS版本默认关闭TCP/IP且使用动态端口,需手动进入SQL Server配置管理器设置固定1433端口
- 确认SQL Server所在服务器的防火墙已放通1433端口入站规则,且允许CentOS服务器IP访问
- 确认CentOS服务器本身的防火墙、安全组未限制1433端口的出站请求
- 云服务器需额外检查云平台安全组规则是否放通对应端口的双向访问
3 修正PHP连接代码的实例名写法
Linux环境下反斜杠为转义符,不支持Windows风格的IP\实例名写法,可选择以下任意一种方案修正:
方案1:直接使用IP+端口连接(推荐)
// IP与端口之间用英文逗号分隔,不要加空格 $server = '真实SQL Server IP,1433'; $connectionInfo = array( "Database" => "test_data", "UID" => "test", "PWD" => "123456", ); $conn = sqlsrv_connect($server, $connectionInfo);
方案2:使用已配置的ODBC DSN连接
你已经在odbc.ini中配置了DSN,可直接调用,避免重复配置:
// 直接填写odbc.ini中配置的DSN名称 $server = 'odbc:MyMSSQLServer'; $connectionInfo = array( "Database" => "test_data", "UID" => "test", "PWD" => "123456", ); $conn = sqlsrv_connect($server, $connectionInfo);
使用DSN前可先通过命令行测试ODBC配置是否生效:
# 替换为对应DSN名称、数据库用户名、密码 isql -v MyMSSQLServer test 123456
如果isql返回连接成功,说明ODBC与网络配置均正常,只需修正PHP代码即可;如果isql连接失败,优先排查前面的网络与ODBC配置问题。
内容的提问来源于stack exchange,提问作者Amirhossein Hassani
相关产品推荐
相关产品推荐

