Ниже речь пойдет о конфигурации FreeTDS и драйвера PDO_DBLIB для подключения к MSSQL сервера CentOS 6.5 64bit и PHP 5.3.x.
Шпаргалка сисадмина
Сначала надо установить FreeTDS.
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-stable.tgz# Скачать последнюю версию дистрибутива
tar -zxvf freetds-stable.tgz# Распаковать ее
cd freetds-*# Перейти в папку дистрибутива. * поменять на номер текущей версии
./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib --with-gnu-ld# Сконфигурировать
make && make install# Скомпилировать и установить
ln -s /usr/local/freetds/lib/libsybdb.so.5 /usr/lib64/libsybdb.so.5# Так как у нас 64-х битная система, нужно создать symlink
touch /usr/local/freetds/include/tds.h# Все тот же старый глюк, без этого работать не будет
touch /usr/local/freetds/lib/libtds.a# Аналогично
После этого устанавливаем сам PDO_DBLIB.
wget http://pecl.php.net/get/PDO_DBLIB-1.0.tgz# Скачать последнюю версию дистрибутива
tar -zxvf PDO_DBLIB-1.0.tgz# Распаковать ее
cd PDO_DBLIB-1.0# Перейти в папку дистрибутива
phpize# Подготовить почву
./configure --with-pdo-dblib=/usr/local/freetds# Сконфигурировать. Без этого ключа будет ругаться
make && make install# Скомпилировать и установить
Хоть в PHP 5.3 поддержка PDO и является частью ядра, по умолчанию он не включен.
Надо зайти в файл конфигурации php.ini и добавить строчку
extension = pdo.so
В нашем же случае речь идет о сервере где установлена Magento, поэтому поддержка PDO уже была включена.
Ну и сразу же добавить свежеустановленный модуль
extension = pdo_dblib.so
Перезапустить апач
# service httpd restart
И проверить что получилось
# php -i | grep PDO
У меня ответ был таким:
PDO PDO support => enabled PDO drivers => sqlite, sqlite2, mysql, dblib PDO Driver for FreeTDS/Sybase DB-lib => enabled PDO Driver for MySQL => enabled PDO Driver for SQLite 3.x => enabled
Проверим установку FreeTDS:
# /usr/local/freetds/bin/tsql -C
Я получил следующий ответ:
Compile-time settings (established with the "configure" script) Version: freetds v0.91 freetds.conf directory: /usr/local/freetds/etc MS db-lib source compatibility: yes Sybase binary compatibility: no Thread safety: yes iconv library: yes TDS version: 5.0 iODBC: no unixodbc: no SSPI "trusted" logins: no Kerberos: no
Обращаем внимание на строчку TDS version: 5.0.
Теперь можно попробовать подключиться к удаленному MSSQL серверу прямо из командной строки:
# /usr/local/freetds/bin/tsql -H-p -U
Если удаленный сервер отвечает, система попросит ввести пароль. Ок, дадим ей пароль.
И внезапно
locale is "C" locale charset is "ANSI_X3.4-1968" using default charset "ISO-8859-1" Error 20017 (severity 9): Unexpected EOF from the server OS error 115, "Operation now in progress" Error 20002 (severity 9): Adaptive Server connection failed There was a problem connecting to the server
Почему ошибка? Смотрим выше на строчку TDS version: 5.0.
Решается проблема просто - нужно в файле настроек FreeTDS глобально указать используемую версию.
Открываем для редактирования файл
# nano /usr/local/freetds/etc/freetds.conf
Находим в нем
# TDS protocol version tds version = 5.0
Меняем его на 8.0
И да будем нам счастье :-)
Все вышеописанные операции делаются с правами root. Данная шпаргалка не претендует на универсальность.
Предыдущую ревизию этой шпаргалки можно найти в моем старом блоге на Livejournal.
Комментариев нет :
Отправить комментарий