2013-07-05 114 views
1

經過大量的閱讀和搜索後,我能夠在Centos 6.4 32位(有64位而不是32位的文檔)中使用PDO DBLIB。令我驚訝的下面從shell命令($ PHP test.php的)代碼工作訪問SQL Server 2008和2012的PDO DBLIB

<?php 
try { 
    $conn = new PDO('dblib:host='.$host.':1433;dbname='.$db, $user, $pass); 

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 

但是從Web瀏覽器我得到以下錯誤訪問文件test.php的時候:

ERROR: SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9)

我也能使用該命令的外殼連接到SQL服務器:

tsql -H 192.168.1.120 -p 1433 -U sa 

我缺少什麼?

+0

PHP中的cli和sapi模式可以有完全不同的配置。比較'php -i'(cli)和'phpinfo()'(sapi)設置並查看是否有任何差異。 –

+0

有什麼辦法可以使兩者都一樣嗎? –

+0

更改相應的.ini文件。 php -i/phpinfo會告訴你正在使用什麼(和哪裏).ini文件。 –

回答

1

在我的情況下,SELinux(我正在使用CentOS)阻止了連接,當從Linux框中的Apache Web服務器到Windows框中的sql服務器完成時。要允許進行連接,你有兩種選擇:

  1. 禁用SELinux

  2. 以根或sudo運行兩個命令:

setsebool -P httpd_can_network_connect 1

setsebool -P httpd_can_network_connect_db 1

要檢查SELinux禁止網絡和DB連接運行此命令:

getsebool -a | grep httpd_can_network_connect

如果結果是:

httpd_can_network_connect --> on

httpd_can_network_connect_db --> on

你好,如果是關閉然後運行這個答案的第一個命令。

+0

非常感謝這個。這是SELinux第二次浪費了我一生的時間 –