You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PLESK CentOS7上PHP7.2+sqlsrv连接SQL Server报错求助

Plesk CentOS7 下PHP7.2 sqlsrv扩展无法识别已安装ODBC驱动的排查与解决

问题背景

在Plesk CentOS7环境中,使用PHP7.2的sqlsrv/pdo_sqlsrv扩展连接SQL Server时,始终报错提示缺少Microsoft ODBC Driver,但实际上已完成以下配置:

  • 安装了msodbcsql包
  • 安装了unixODBC-devel、make、gcc-c++等依赖
  • 通过/opt/plesk/php/7.2/bin/php -m | grep sqlsrv确认pdo_sqlsrv和sqlsrv模块已加载
  • 重新读取PHP handlers及组件属性,模块在Plesk GUI中可见
  • 重启了PHP-FPM主进程
  • 确认unixODBC版本为2.3.11
  • 在/opt/plesk/php/7.2/etc/php.d路径配置了odbc.ini

报错信息:

string(237) "SQLSTATE[IMSSP]: This extension requires the Microsoft ODBC Driver for SQL Server to communicate with SQL Server. Access the following URL to download the ODBC Driver for SQL Server for x64: https://go.microsoft.com/fwlink/?LinkId=163712"

连接代码:

$params = [
    "UID" => $username,
    "PWD" => $password,
    "Database" => $database,
    "TrustServerCertificate" => true
];
if(sqlsrv_connect($host, $params)) {
    echo "connected..";
} else {
    echo "Connection could not be established. DO not know why..sick!<br />";
    echo "<pre>";
    die( print_r( sqlsrv_errors(), true));
    echo "</pre>";
}

同一服务器上的PHP8.0环境(不同站点)运行该代码可正常连接,已排除SQL Server远程访问问题,确认问题出在本地服务器配置。

排查与解决步骤

1. 验证ODBC驱动与PHP7.2的兼容性

sqlsrv扩展对ODBC驱动版本有严格匹配要求,PHP7.2需搭配特定版本的ODBC驱动(Driver 17适配性最佳,Driver 18可能与旧版PHP存在兼容问题)。执行以下命令查看已安装的msodbcsql版本:

rpm -qa | grep msodbcsql

若版本不匹配,卸载现有包后安装适配版本:

yum remove msodbcsql
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
ACCEPT_EULA=Y yum install msodbcsql17

2. 配置PHP7.2-FPM的环境变量

Plesk的PHP隔离环境可能未正确加载ODBC驱动的环境变量,需手动指定:

  • 编辑PHP7.2的FPM配置文件(路径通常为/opt/plesk/php/7.2/etc/php-fpm.d/www.conf,或对应站点的独立配置文件)
  • 在文件末尾添加:
env[ODBCSYSINI] = /opt/plesk/php/7.2/etc/php.d
env[LD_LIBRARY_PATH] = /opt/microsoft/msodbcsql17/lib64:$LD_LIBRARY_PATH
  • 重启PHP7.2-FPM进程:
systemctl restart plesk-php72-fpm

3. 跳过PHP直接测试ODBC连接

使用isql命令验证ODBC驱动本身是否可正常工作,排除PHP层面的问题:

isql -v <你的ODBC数据源名称> <SQL用户名> <SQL密码>

若isql也无法连接,检查odbc.ini中的驱动路径是否正确:

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.2.1
UsageCount=1

可通过find /opt/microsoft -name libmsodbcsql*.so命令确认实际驱动文件路径,同步修改odbc.ini。

4. 重新编译适配的sqlsrv扩展

若使用预编译的扩展包存在兼容性问题,手动编译适配当前环境的版本:

  1. 下载对应PHP7.2的sqlsrv源码:
cd /tmp
git clone https://github.com/microsoft/msphpsql.git
cd msphpsql
git checkout v5.9.0 # PHP7.2对应的稳定版本
cd source/sqlsrv
  1. 用PHP7.2的phpize编译:
/opt/plesk/php/7.2/bin/phpize
./configure --with-php-config=/opt/plesk/php/7.2/bin/php-config
make && make install
  1. 同样编译pdo_sqlsrv:
cd ../pdo_sqlsrv
/opt/plesk/php/7.2/bin/phpize
./configure --with-php-config=/opt/plesk/php/7.2/bin/php-config
make && make install
  1. 重新启用模块并重启PHP-FPM。

5. 检查Plesk站点的PHP隔离配置

进入Plesk面板对应站点的「PHP设置」,确认:

  • 站点确实使用PHP7.2版本
  • 没有自定义php.ini覆盖ODBC相关环境变量配置

内容的提问来源于stack exchange,提问作者ButcherFromHell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:20:58