Projelerimizde genellikle PHP alt yapısı kullanmaktayız. Projenin bir bölümü MSSQL server ile bağlantılı çalıştığı için Linux web server’lar ile bağlantı yapamıyorduk. Bunun için Windows bir sunucu üzerinden IIS üzerine apache kurulumunu gerçekleştirip, MSSQL server’a bağlantı için PHP ye ait bir “.dll ” kullanıp bağlantı sağlıyorduk. MSSQL tarafındaki işlemler için Windows sunucuyu web servis olarak kullanıyorduk.
Ne mi oluyordu ? Güzel oluyordu. Çalışıyor muydu ? Evet, çalışıyordu. İstediğimiz performans varmıydı ? Hayır, yoktu. Rahat mıydı ? Bize göre değildi.
4-5 sene içerisinde birkez defa PHP ile MSSQL’e bağlantılar denemiştik. Fakat çoğu kütüphane de BUG‘lar mevcuttu. Bu BUG‘lardan en sevdiğim ise Linux üzerinden MSSQL’e bağlandığınızda Sunucuda ne kadar RAM varsa hepsini kimseyi düşünmeden kendininmiş gibi kullanması. 🙂
Bizde zaman kaybetmemek adına Windows üzerinden web servis yazmaya başlayıp projelerimizi geliştirdik. Hemen hemen her yazılımcının, sistemcinin bir gece ansızın aklına düşen fikirleri, düşünceleri vardır. Benimkisi ise PHP ile MSSQL’e bağlanabilmek. Üstüne çok fazla düşmemiştim açıkcası.
Aradan günler geçti ve PHP’nin 7 sürümünde bazı güncellemeler olduğunu araştırırken bir abimiz PHP 7 ile MSSQL’e bağlandığını yazmış. Döküman ? Malesef. Sadece yazmış. 🙂
Şimdi geçelim Linux Centos 7 üzerinde PHP 7 ile MSSQL’e nasıl bağlantı kuracağımıza. ( Vesta Control Panel üzerinde de gayet güzel çalışmaktadır )
İşlemlerimizi PECL ile yapıyoruz. Komutlar;
# curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
# yum update
# ACCEPT_EULA=Y yum install -y msodbcsql mssql-tools unixODBC-devel
# pecl install sqlsrv
# pecl install pdo_sqlsrv
PHP.INI dosyamıza aşağıdaki satırları ekleyip güncelliyoruz;
extension=sqlsrv
extension=pdo_sqlsrv
Web engine olarak ne kullanıyorsanız ( Nginx, Apache, PHP-FPM ) restart ediniz.
Bu kadar. Sonrasında ise kullanmış olduğunuz herhangi bir framework varsa direkt olarak database_driver değiştirirerek kullanabilirsiniz. Yok ise şuaradaki doküman işinize yarayabilir..
Karşılaşabileceğiniz hatalar;
# ACCEPT_EULA=Y yum install -y msodbcsql mssql-tools unixODBC-devel
bu satırda hata alırsanız Şuradaki doküman‘a göre Centos üzerinde aşağıdaki işlemleri sırasıyla gerçekleştiriyoruz ( Centos 7 – Redhat ).
sudo su curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo exit sudo yum remove unixODBC-utf16 unixODBC-utf16-devel sudo ACCEPT_EULA=Y yum install msodbcsql17 sudo ACCEPT_EULA=Y yum install mssql-tools echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc sudo yum install unixODBC-devel
PECL ile ilgili bir hata alırsanız ;
Şuradaki doküman’a göre aşağıdaki işlemleri yapınız.
yum install php-devel yum provides pecl yum install php70w-pear pecl install stats
Kendi tecrübeme göre PHP’nin 7.2 versiyonu daha stabil ve hızlı çalışmakta. 7.2 versiyonu ile birlikte MSSQL’e bağlantılarımız gerçekleşiyor. Hatta Codeigniter framework’ü kullandığımız için Windows üzerindeki projeyi olduğu gibi Linux Centos üzerine aktardığımızda herhangi bir hata vs. almadan ( PHP tarafından ) kullanmaya devam ettik. Fakat sizin projelerinizde farklı veya özel kütüphaneler mevcut ise bunun garantisini veremem. Lütfen aktarım yapmadan önce TEST ortamında kontrol ediniz.
Ufak bir bilgilendirme;
Centos 7 versiyonundan farklı bir versiyonda denemedim. Farklı bir dağıtımda denemedim. Farklı kaynaklar ve kurulum dökümanları mevcut. Aynı zamanda kurulum sırasında UPDATE işlemi mevcut. Linux ( diğerlerinde de mevcut fakat bilen bilir 🙂 ) üzerinde her zaman yapmanız gereken birşey vardır; “Enter’a basmadan önce bir daha düşün” ilkesidir ve herşeyden önce mutalaka YEDEK alınız.
Kaynaklar;
- https://github.com/Microsoft/msphpsql/issues/726
- http://fafairuzcode.blogspot.com/2016/08/installing-pecl-on-centos-7.html
- https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15
- http://www.shukko.com/x3/2018/12/12/php-ile-mssql-sunucuya-baglanalim/
hocam ben windows üzerinde mssql ile php yi baglamak için ODBC kullanıyorum güncelleme veri çekme vb. gibi otomatik olacak tüm işleri sql tarafında job ve triggerlar la hallediyorum hizmet falan kullanmıyorum bu yaptıgım sistemin bir eksisi varmıdır sizce ?
Merhaba Burak,
Eksisi yok diyemem var da diyemem. Çünkü her ikiside yapılacak olan işe göre artıları veya eksilere doğru gider.
Fakat yazdığından anladığım kadarıyla triggerlar SQL tarafında olduğu için herhangi bir durum oluşmaz. Hatta işlemi SQL tarafında yaptırdığın için yerine göre daha hızlı sonuçlar alabilirsin.
Örnek olarak 1000 adet satırın X değerinin toplamını bulabilmek için 1000 adet satırı çekip yazılımsal olarak toplam buldurmak yerine SQL tarafında bunu çok daha hızlı ve performanslı bir şekilde SUM() ile birlikte kullanabilirsin.
Tek tavsiyem şu olacaktır. INSERT, UPDATE, SELECT, DELETE vb. işlemeri yaptırırken harici olarak PHP ile bir işlem yaptırman gerekirse bunu Trigger ile yormak yerine yazılımsal olarak fonksiyonelleştirip çözmen olacaktır.
Sonuç olarak SQL sorguları her zaman istediğin verimi vermeyebilir veya yine örnek olarak bir URL üzerinden gelen bir bilgiyi alıp işlem gerektiğinde SQL Tarafında bunu yapmanı tavsiye etmem. Çünkü SQL server ilerleyen zamanda internete erişimi olmayan kapalı devre haline geldiğinde sorun arayacaksın. 🙂
tşk