PECL modüllerinin nereye yüklendiğini bul
Bu komut ile sqlsrv ve pdo_sqlsrv gibi modül dosyalarının sistemde nerelere kurulduğunu görebilirsin:
sudo find / -type f ( -name "sqlsrv.so" -o -name "pdo_sqlsrv.so" ) 2>/dev/null
Bu, sistemdeki tüm sqlsrv.so ve pdo_sqlsrv.so dosyalarının tam yolunu gösterir.
/usr/lib/php/20240924/sqlsrv.so
/usr/lib/php/20240924/pdo_sqlsrv.so
PHP'nin yüklü modül dizinini öğren
php -i | grep extension_dir
extension_dir => /usr/lib/php/20230831 => /usr/lib/php/20230831
Not: Bu dizin PHP'nin hangi API versiyonuna göre derlendiğini de gösterir (20230831 gibi).
Eğer modül farklı dizinde ise, doğru yere kopyala
Farz edelim sqlsrv.so şurada:
/usr/lib/php/20240210/sqlsrv.so
Ama PHP'nin extension_dir dizini şu:
/usr/lib/php/20230831/
Bu durumda:
sudo cp /usr/lib/php/20240210/sqlsrv.so /usr/lib/php/20230831/
sudo cp /usr/lib/php/20240210/pdo_sqlsrv.so /usr/lib/php/20230831/
PHP modül olarak etkinleştir
Aşağıdaki dosyaları oluştur:
sudo nano /etc/php/8.3/mods-available/sqlsrv.ini
İçeriği:
extension=sqlsrv.so
Aynı şekilde:
sudo nano /etc/php/8.3/mods-available/pdo_sqlsrv.ini
İçeriği:
extension=pdo_sqlsrv.so
Modülü aktif et
sudo phpenmod sqlsrv
sudo phpenmod pdo_sqlsrv
Apache ya da PHP-FPM kullanıyorsan servisi yeniden başlat
sudo systemctl restart apache2
# veya
sudo systemctl restart php8.3-fpm
PHP Uzantıları Klasörü Yolu
PHP uzantılarının bulunduğu yerin tipik yolları şunlardır:
Apache (CLI) için: /usr/lib/php/20230831/
FPM için: /usr/lib/php/20230831/
Ayrıca, /usr/lib/php/ içinde veya /usr/local/lib/php/ gibi dizinlerde de bulunabilir.
PHP'nin uzantılar dizinini öğrenmek için şu komutu kullanabilirsin:
php -i | grep extension_dir
Bu komut, PHP'nin uzantılarının bulunduğu dizini gösterecektir. Örneğin:
extension_dir => /usr/lib/php/20230831 => /usr/lib/php/20230831
Modüllerin Kurulumu
Eğer modüller doğru yerde değilse, PECL ile yeniden kurulum yapman gerekebilir.
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
Yukarıdaki komutlar, modülleri doğru dizine yükleyecektir.
Hata oluşursa
sudo pecl install sqlsrv
pecl/sqlsrv requires PHP (version >= 8.1.0), installed version is 7.4.33
No valid packages found
install failed
şunu söylüyor: sqlsrv
uzantısının PECL sürümü en az PHP 8.1 gerektiriyor, fakat sizde PHP 7.4.33 kurulu.
Sistemde birden fazla PHP sürümü yüklüyse, hangi sürümün varsayılan olarak kullanılacağını aşağıdaki adımlarla değiştirebilirsiniz.
sudo update-alternatives config php
Hata
compilation terminated.
make: *** [Makefile:208: conn.lo] Error 1
ERROR: make' failed
Bu hata, pecl install sqlsrv
komutu sırasında derleme (compilation) aşamasında bir sorun yaşandığını gösterir.
Çözüm
sudo apt update
sudo apt install unixodbc-dev gcc g++ make autoconf libc-dev pkg-config
sudo apt install php8.x-dev
Tekrar deneyin
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
Modülleri Manuel Olarak Taşıma
Eğer PECL yüklemesi başarılı olsa da, modüller yanlış dizine yüklenmişse, manuel olarak taşımayı deneyebilirsin.

Örneğin:
sudo cp /path/to/sqlsrv.so /usr/lib/php/20230831/
sudo cp /path/to/pdo_sqlsrv.so /usr/lib/php/20230831/
Yol, PHP'nin uzantılar diziniyle uyumlu olmalı.
php.ini'ye Doğru Yolu Ekleme
Sonrasında, php.ini dosyasına şu satırları eklemelisin (PHP'nin uzantılar dizininde doğru dosya yolu olduğundan emin olduktan sonra):
extension=sqlsrv.so
extension=pdo_sqlsrv.so
5. Web Sunucusunu Yeniden Başlat
Web sunucusunu yeniden başlatmalısın:
sudo systemctl restart apache2 # Apache için
sudo systemctl restart php8.3-fpm # PHP-FPM için
pdo_sqlsrv.so ve sqlsrv.so Modüllerini php.ini'ye Ekleme
PHP'nin php.ini dosyasını açarak, pdo_sqlsrv.so ve sqlsrv.so modüllerini eklemelisin. Örneğin:
sudo nano /etc/php/8.4/fpm/php.ini
Veya apache2 kullanıyorsan:
sudo nano /etc/php/8.4/apache2/php.ini
Bu dosyada, aşağıdaki satırları ekleyin veya varsa, doğru şekilde etkinleştirin:
extension=sqlsrv.so
extension=pdo_sqlsrv.so
veya
/etc/php/8.4/mods-available adresine gidip ini dosya oluştur (içinde zaten bunlar yazılı)
ini uzantılı bir dosya içine extensionu yazıyoruz.


Modülleri aktif et
PHP modlarını etkinleştirmek için:
sudo phpenmod sqlsrv pdo_sqlsrv
PHP-FPM veya Apache'yi Yeniden Başlatma
Yapılandırma dosyasındaki değişikliklerin geçerli olması için PHP-FPM veya Apache'yi yeniden başlatmalısın:
PHP-FPM için:
sudo systemctl restart php8.4-fpm
Apache için:
sudo systemctl restart apache2
PHP Modüllerini Kontrol Etme
Son olarak, modüllerin düzgün yüklenip yüklenmediğini kontrol etmek için şu komutu çalıştır:
php -m | grep sqlsrv

If you are getting this error while trying to install Microsoft Drivers for PHP for SQL server
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
you should do the following:
First:
Inspect this folder /usr/lib/x86_64-linux-gnu/ and verify that the following file exists: libltdl.la
Second:
If the file does not exist, just run the following command to create a blank file:
touch /usr/lib/x86_64-linux-gnu/libltdl.la
Try to run the pecl command again
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
Third:
If the issue still persists, create a new file and copy the following content to it:
https://www.apt-browse.org/browse/debian/jessie/main/amd64/libltdl-dev/2.4.2-1.11+b1/file/usr/lib/x86_64-linux-gnu/libltdl.la
and try to install the sqlsrv and pdo_sqlsrv again.
then verify that you can see the pdo_sqlsrv module by running:
php -m
Reference
Linux and macOS Installation Tutorial for the Microsoft Drivers for PHP for SQL Server
Kaynak