PDO_DBLIB (MSSQL) na Ubuntu Server
Czasem zachodzi potrzeba skorzystania z innego sterownika baz danych niż mysql. O ile sprawa wydawać by się mogła prosta i sprowadzać do wykonania jednej komendy pecl install, o tyle w przypadku sterownika do mssql nie jest to takie oczywiste.
Zaczynamy od zainstalowania potrzebnych pakietów:
# apt-get install php5-dev freetds-dev
Następnie próbujemy zainstalować rozszerzenie PDO_DBLIB które obsługuje Mssql server
# sudo pecl install PDO_DBLIB
pear/PDO_DBLIB requires PHP extension “pdo” (version >= 1.0)
No valid packages found
install failed
Jak widać ostrzymujemy błąd mimo, że mamy zainstalowaną odpowiednią wersję PDO. Będziemy
musieli zainstalować rozszerzenie ręcznie. Pobieramy więc paczkę PDO_DBLIB-1.0.tgz, możemy to zrobić na dwa sposoby: za pomocą wget lub pecl download PDO_DBLIB.
Rozpakowujemy pobraną paczkę i próbujemy zbudować rozszerzenie.
# tar zxvf PDO_DBLIB-1.0.tgz
# pecl build
configure: error: Cannot find FreeTDS in known installation directories
`/home/mateusz/PDO_DBLIB-1.0/configure’ failed
Otrzymujemy kolejny błąd. Tym razem widzimy ze jest problem ze ściezką do biblioteki FreeTDS. U mnie biblioteka ta jest zainstalowana w ‘/usr/share/freetds’, odpalamy więc skrypt configure z odpowiednim parametrem
# cd PDO_DBLIB-1.0
# ./configure –with-pdo-dblib=/usr/share/freetds
configure: error: Directory /usr/share/freetds is not a FreeTDS installation directory
Kolejny błąd tym razem jak dla mnie mniej zrozumiały. Długo szukałem i rozwiązaniem okazało się dodanie dwóch plików:
# sudo touch /usr/share/freetds/include/tds.h
# sudo touch /usr/share/freetds/lib/libtds.a
Kolejna próba i kolejny błąd:
# ./configure –with-pdo-dblib=/usr/share/freetds
configure: error: Cannot find php_pdo_driver.h
Skrypt konfiguracyjny nie może znaleźć pliku nagłówka php_pdo_driver.h (u mnie /usr/include/php5/ext). Gdy zajrzymy do skryptu configure zobaczymy, że skrypt szuka tego pliku w złym miejscu:
... if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then ...
Dodanie linka symbolicznego do odpowiedniego katalogu załatwi sprawę:
# ln -s /usr/include/php5/ext
Teraz już wszystko powinno zadziałać.
# ./configure –with-pdo-dblib=/usr/share/freetds
# make
…
Build complete.
Teraz przechodzimy do folderu modules gdzie mamy skompilowane pdo_dblib.so i kopiujemy je do odpowiedniego folderu u mnie ‘/usr/lib/php5/20060613+lfs’ pozostaje jeszcze dopisanie extension=pdo_dblib.so do pliku php.ini i restart apacha.
Konfiguracja zenda
Jeśli używamy Zend Framework, a ja akurat w tym projekcie używam, dostaniemy pewnie taki komunikat.
Message: The mssql driver is not currently installed
Rozwiązaniem jest dodanie w konfiguracji następującej linijki:
db.config.pdoType = dblib
Dalej standardowa konstrukcja:
1 2 3 | $config = new Zend_Config_Ini( './configs/database.ini', 'mssql' ); $this->mssql = Zend_Db::factory( $config->db->adapter, $config->db->config->toArray() ); print_r($this->mssql->fetchAll("SELECT @@VERSION")); |
Podsumowanie
Instalację PDO_DBLIB przeprowadziłem na Ubuntu server 9.10, testową instalacje przeprowadziłem też na swoim desktopie Ubuntu 10.04. Oczywiście nie w każdym przypadku instalacja musi przebiegać identycznie jak u mnie i zwracać takie same komunikaty błędów. To jest tylko opis moich doświadczeń z instalacją pdo_dblib.
Powiązane wpisy: