在 CentOS 7 上通过 PHP 连接到远程 SQL 服务器

Connecting to remote SQL Server through PHP on CentOS 7

我已经遵循 this 解决方案来解决似乎完全相同的问题,但是我并没有像我希望的那样取得成功。 我为 PDO_ODBC、unixODBC 和 FreeTDS 包设置了所需的配置文件:

  1. 首先在/etc/freetds.conf中指定主机:

    [mssql]
    host = DBHost
    port = 1433
    tds version = 7.3
    
  2. 然后通过在 /etc/odbcinst.ini 中指定 FreeTDS 驱动程序位置:

    [freetds]
    Description = Ms SQL database access with Free TDS
    Driver64 = /usr/lib64/libtdsodbc.so.0
    Setup64 = /usr/lib64/libtdsS.so.2
    FileUsage = 1
    UsageCount = 1
    
  3. 然后在/etc/odbc.ini中指定DSN:

    [mssql]
    Description = mssql server
    Driver = FreeTDS
    Database = CET_PhonesDB
    ServerName = mssql
    TDS_Version = 7.3
    

最后是我的 PHP:

 try {
        $pdo = new PDO('odbc:mssql', 'dbuser', 'dbpass');
 }
 catch(Exception $e){
        echo $e->getMessage();
 }

哪个 returns: "SQLSTATE[08S01] SQLConnect: 20009 [unixODBC][FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist".

我已经尝试使用 $tsql -S mssql -U dbuser -P dbpass(测试 FreeTDS)和 $isql mssql dbuser dbpass(测试 unixODBC)进行故障排除,两者都连接成功。这让我相信问题出在 PDO_ODBC 或 PHP 配置中的其他东西。非常感谢任何帮助:)

我遇到了同样的问题,并通过使用自定义端口解决了它:port = XXXXX in freetds.conf。此端口应在 SQL Server Configuration Mgnt 中配置 SQL 服务器网络配置 -> TCP/IP(已启用) -> IP 地址 -> IPAll -> TCP 动态端口 https://msdn.microsoft.com/en-us/library/ms177440.aspx

因此,我通过命令行 运行 连接我的 PHP 脚本,将问题缩小到 Apache 服务器:$php /var/www/html/repo/index.php 并成功建立了连接。

一位同事建议 SELinux 可能会干扰 httpd,果然 运行ning $setenforce 0 允许我的 PHP 正确地 运行 通过网络请求它们浏览器。

由于永久禁用 SELinux 是一个非常糟糕 的想法,我做了一些摆弄和挖掘,感谢 this 手册我发现 $sudo setsebool -P httpd_can_network_connect 1 允许 Apache 运行 的脚本创建它们自己的网络连接。现在 SELinux 应该让 httpd 执行的任何 PHP 脚本创建网络连接。