AddThis Smart Layers

вторник, 12 октября 2010 г.

Как подключиться к MSSQL серверу из PHP

У нас появилась задача - подключаться из Magento к удаленному MSSQL серверу и тянуть с него некие данные.
Так как Magento стоит на Linux сервере, это оказалось не такой уж простой задачкой.


Нужно было установить расширение, которое позволяло бы PHP подключаться к MSSQL.
Так как Magento основана на Zend Framework, родным для нее будет подключение при помощи PDO_DBLIB драйвера, который, разумеется никогда на Linux серверах по умолчанию не устанавливается.

Чтобы установить этот драйвер для начала нужно установить сам PDO модуль. С ним проблем не возникло и при помощи

pecl install pdo
он успешно установился.

А вот
pecl install pdo_dblib
начал ругаться.

Сначала на то что он не может запустить компилятор.

Решил эту проблему радикально:

mount -o remount,exec,suid /tmp
mount -o remount,exec,suid /var/tmp

На этом он не успокоился и стал требовать чтобы был установлен пакет FreeTDS

С ним прошло все более ли менее гладко и встал он куда ему и указали.

Очередная попытка установить pdo_dblib снова не увенчалась успехом, конфигурационный файл ни в какую не хотел видеть где установлен FreeTDS, даже когда ему прописывали путь в ключе.

Помогло это:
touch {path}/freetds/include/tds.h
touch {path}/freetds/lib/libtds.a

Теперь снова нашлась причина чтобы не установиться. Видите ли ему версия PDO не нравится.

Решилось просто:

pecl install -n pdo_dblib
т.е. с игнорированием зависимости от версии PDO.

Только после этого этот несчастный драйвер позволил себя сконфигурировать и установить.

Танцы с бубном продолжались не менее 4 часов. Подопытный сервер практически не пострадал, за исключением того, что в процессе пришлось перекомпилировать apache+php чтобы убить "родную" поддержку PDO, с которой PDO_DBLIB ни в какую не хотел дружить и в последствии установить PDO через Pecl. После перекомпиляции apache нужно заново переконфигурировать Nginx. Но это уже мелочи жизни :-)

Апдейт: Данная шпаргалка действительна для PHP 5.2.x. Для PHP 5.3.x. есть новая шпаргалка, там процесс настройки сильно отличается.