2017-05-29 108 views
1

我跟着this解决了什么似乎是完全相同的问题,但是我没有像我期望的那么多的成功。在/etc/freetds.conf通过CentOS 7上的PHP连接到远程SQL Server

  1. 首先由specifiying主机: 我设立了PDO_ODBC,unixODBC数据所需的配置文件和freetds的包

    [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(); 
} 

返回:“SQLSTATE [08S01]的SQLConnect:20009 [unixODBC数据] [freetds的] [SQL服务器]无法连接:Adaptive Server的不可用或不存在“。

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

回答

1

所以我缩小到Apache的问题服务器,通过运行我的PHP脚本通过命令行:$php /var/www/html/repo/index.php并且连接成功完成。

一位同事建议SELinux可能会干扰httpd,并且确保运行$setenforce 0允许我的PHP在通过Web浏览器请求时正常运行。

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