Dans ce petit tuto vous trouverez le détail des manipulations à réaliser pour installer et configurer les drivers ODBC et SQL server pour PHP 8 sur une distribution Debian 11
Je pars du principe que PHP est installé et fonctionnement correctement. Seul l’ajout des drivers OBDC et pdo_sqlsrv et détaillé.
Nb : Il se peut que certains paquets soient déja présents sur votre Debian.
Une grande partie des informations ici présentent sont sur le site Microsoft sur les pages
Installation des drivers ODBC
apt-get install gnupg wget curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list apt-get update ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc-dev
Installation module sqlsrv
pecl install sqlsrv
Installation module pdo_sqlsrv
pecl install pdo_sqlsrv
Mise à jour php.ini
Afin de charger les 2 modules il faut les ajouter dans votre php.ini
Ajouter les lignes suivantes :
extension=sqlsrv.so extension=pdo_sqlsrv.so
Vérification
Pour contrôler le bon fonctionnement il faut d’abord relancer apache : service apache2 restart
Ensuite créez une page info.php
avec le code suivant (page accessible via apache) :
<? print phpinfo();
Ouvrer cette page dans votre navigateur vous devriez trouver deux sections concernant les nouveaux modules ajoutés
Erreur Protocol SSL
Il est possible qu’une erreur SSL aparaisse si votre serveur SQL est ancien. C’est ce qui m’est arrivé.
Pour corriger cela il faut modifier la config openssl sur votre Debian pour accepter une version plus ancienne du protocol. Pour cela éditez le fichier /etc/ssl/openssl.cnf
Recherchez la ligne MinProtocol = TLSv1.x
et remplacer par MinProtocol = TLSv1.0
Il est possible de faire cela avec une commande sed
cd /etc/ssl sed -i "s/TLSv1.2/TLSv1.0/g" openssl.cnf
Bonus : création container Docker
En bonus je vous livre mes scripts pour créer une image Docker avec cette configuration et Apache + PHP 8.
Dockerfile
## PHP 8.2.4 / Apache 2.4.53 FROM php:apache ## commande pour compléter l'image par défaut RUN apt-get update RUN apt-get install --no-install-recommends -y vim inetutils-ping gnupg RUN apt-get install -y --no-install-recommends libldap2-dev RUN apt-get install -y --no-install-recommends libzip4 RUN apt-get install -y --no-install-recommends libzip-dev ## bug fichier manquant sur la distrib COPY ./libltdl.la /usr/lib/x86_64-linux-gnu/. ## script installation driver ODBC + pdo SQL pour PHP COPY ./sqlsrv.sh /usr/local/bin/. RUN chmod +x /usr/local/bin/sqlsrv.sh ## exec du script RUN /usr/local/bin/sqlsrv.sh RUN a2enmod rewrite RUN docker-php-ext-install mysqli RUN docker-php-ext-install pdo_mysql RUN docker-php-ext-install ldap RUN docker-php-ext-install zip EXPOSE 80
sqlsrv.sh
#!/bin/bash curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list apt-get update ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc-dev msodbcsql18 ## compil ext php sqlsrv pecl install sqlsrv # compil ext php pdo_sqlsrv pecl install pdo_sqlsrv # Modif SSL pour accepter version 1.0 de TLS cd /etc/ssl && sed -i "s/TLSv1.2/TLSv1.0/g" openssl.cnf
libltdl.la
# Fichier libldtl.la, voir DockerFile pour bug fichier manquant # libltdl.la - a libtool library file # Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1.11+b1 # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='libltdl.so.7' # Names of this library. library_names='libltdl.so.7.3.0 libltdl.so.7 libltdl.so' # The name of the static archive. old_library='libltdl.a' # Linker flags that can not go in dependency_libs. inherited_linker_flags='' # Libraries that this one depends upon. dependency_libs=' -ldl' # Names of additional weak libraries provided by this library weak_library_names='' # Version information for libltdl. current=10 age=3 revision=0 # Is this an already installed library? installed=yes # Should we warn about portability when linking against -modules? shouldnotlink=no # Files to dlopen/dlpreopen dlopen='' dlpreopen='' # Directory that this library needs to be installed in: libdir='/usr/lib/x86_64-linux-gnu'