Salta al contenuto principale

Installazione dei driver PHP per Microsfot SQL Server su Ubuntu

Profile picture for user luca77king

Su Ubuntu, è possibile installare diverse versioni di PHP, ognuna delle quali richiede driver specifici per accedere a database MSSQL. Ad esempio, se si dispone di più installazioni di PHP, come la versione 7.4 e la versione 8.0, sarà necessario installare i driver MSSQL per entrambe le versioni, poiché ciascuna richiede una configurazione e un set di driver diversi. Senza l'installazione dei driver corretti per la versione di PHP utilizzata, gli script PHP che richiedono l'accesso ai database MSSQL potrebbero non funzionare correttamente o generare errori di compatibilità. Per questo motivo, è importante sapere quali versioni di PHP sono installate sul proprio sistema e come installare i driver MSSQL corretti per ciascuna versione.

In questo articolo, vedremo come installare i driver MSSQL per la versione di PHP 8.1 su Ubuntu. La procedura di installazione dei driver per le versioni 7.4 e 8.0 è già stata completata con successo sul sistema mentre l'installazione dei driver per PHP 8.1 non è andata a buon fine. Sarà necessario fare un po' di pulizia. Ciò significa che rimuoveremo eventuali driver MSSQL già installati per la versione di PHP 8.1 prima di procedere con l'installazione dei driver corretti. 

In questo modo, si garantirà che l'installazione dei driver MSSQL per la versione di PHP 8.1 avvenga senza problemi e che il sistema sia configurato correttamente per accedere ai database MSSQL.

Pulizia del sistema

Disabilitare i driver MSSQL per la versione di PHP 8.1 utilizzando il seguente comando

sudo phpdismod -v 8.1 pdo_sqlsrv sqlsrv

Cancelliamo i file di configurazione con i seguenti comandi

sudo rm /etc/php/8.1/mods-available/pdo_sqlsrv.ini

sudo rm /etc/php/8.1/mods-available/sqlsrv.ini

Ora disinstalliamo la liberia presente nel sistema. Le librerie PECL vengono di solito installate in una directory specifica, che dipende dalla configurazione di PHP del sistema. In genere, la directory in cui vengono installate le librerie PECL è /usr/lib/php/<data-compilazione-ufficiale>/.

Ecco la lista delle macro release di PHP dalla 7.4 alla 8.2, insieme al nome della cartella corrispondente nella directory /usr/lib/php/:

  • PHP 7.4.x - /usr/lib/php/20190902/
  • PHP 8.0.x - /usr/lib/php/20200930/
  • PHP 8.1.x - /usr/lib/php/20210902/
  • PHP 8.2.x - /usr/lib/php/20220829/

Il passo successivo consiste nel passare alla versione 8.1 di PHP. 

sudo update-alternatives --set php /usr/bin/php8.1

Successivamente, dobbiamo disinstallare i pacchetti sqlsrv e pdo_sqlsrv utilizzando i seguenti comandi

sudo pecl uninstall -r sqlsrv 
sudo pecl uninstall -r pdo_sqlsrv 

È importante notare che l'opzione "-r" l'opzione -r o --register-only rimuove solo la registrazione della libreria dal registro dei pacchetti PECL, senza rimuovere i file della libreria dal sistema.

In altre parole, questo comando rimuove solo le informazioni di registrazione della libreria dal registro di PECL, ma non elimina effettivamente i file della libreria dal tuo sistema. Questo lo dobbiamo fare perchè la stessa versione della libreria può essere condivisa su più versioni di PHP installate sul sistema. Ed è proprio il caso di php8.0 e php8.1

Installazione dei driver

Adesso installiamo le librerie per la versione 8.1 di PHP

sudo pecl -d php_suffix=8.1 install sqlsrv
sudo pecl -d php_suffix=8.1 install pdo_sqlsr

L'opzione -d indica che si sta impostando una variabile di configurazione per il gestore dei pacchetti PECL. Nel caso specifico, la variabile di configurazione php_suffix viene impostata su 8.1, che determina la versione di PHP a cui le librerie devono essere associate.

In generale, l'opzione -d viene utilizzata per impostare specifiche variabili di configurazione per una particolare utility o applicazione. Queste variabili dipendono dall'applicazione specifica e possono essere utilizzate per personalizzare il comportamento dell'applicazione in base alle proprie esigenze.

Ora dobbiamo creare due nuovi file di configurazione mods-available per le rispettive estensioni SQLSRV e PDO_SQLSRV. Questi file contengono una direttiva di configurazione per ciascuna estensione che indica a PHP di caricare l'estensione specificata.

sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.1/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.1/mods-available/pdo_sqlsrv.ini
exit

E ora abilitiamo le due nuove librerie

sudo phpenmod -v 8.1 sqlsrv pdo_sqlsrv

Se utilizziamo FPM per servire PHP al web server utilizziamo il comando 

sudo systemctl restart php8.1-fpm

In caso contrario basterà riavviare Apache

sudo service apache2 restart