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.
Autor: Mateusz Dąbrowski
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, że 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:
1
2
3
...
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: