2017-05-29 62 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腳本創建網絡連接。