2013-07-05 2 views
1

После большого количества чтения и поиска я смог получить PDO DBLIB, работающий в Centos 6.4 32bits (имеется много документации для 64 бит, а не для 32 бит). К моему удивлению, следующий код работы с командной оболочки ($ PHP test.php)PDO DBLIB, доступ к SQL Server 2008 и 2012

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

Но при посещении файла 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

Режимы cli и sapi в PHP могут иметь совершенно разные конфигурации. сравните настройки 'php -i' (cli) и' phpinfo() '(sapi) и посмотрите, есть ли различия. –

+0

Есть ли способ сделать то же самое? –

+0

измените соответствующий файл .ini. php -i/phpinfo расскажет вам, какие (и где) файлы .ini используются. –

ответ

1

В моем случае SELinux (я использую CentOS) блокировал соединение, когда он был сделан с веб-сервера Apache в поле linux, на сервер 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 потратил впустую часы моей жизни –