Esercitazione sull'installazione in Linux e macOS dei driver Microsoft per PHP per SQL Server

Le istruzioni seguenti presuppongono che venga usato un ambiente pulito e illustrano come installare PHP 8.1, il driver Microsoft ODBC, il server Web Apache e i driver Microsoft per PHP per SQL Server in Ubuntu, Red Hat, Debian, SUSE, Alpine e macOS. I consigli inclusi in queste istruzioni riguardano l'installazione dei driver con PECL, ma è anche possibile scaricare i file binari precompilati dalla pagina del progetto GitHub relativo ai driver Microsoft per PHP per SQL Server e installare tali file seguendo le istruzioni riportate in Caricamento dei driver Microsoft per PHP per SQL Server. Per una spiegazione del caricamento delle estensioni e dei motivi per cui non si aggiungeranno le estensioni a php.ini, vedere la sezione relativa al caricamento dei driver.

Le istruzioni seguenti consentono di installare PHP 8.1 per impostazione predefinita usando pecl install, se sono disponibili i pacchetti PHP 8.1. Potrebbe essere necessario eseguire prima pecl channel-update pecl.php.net. Alcune distribuzioni Linux supportate usano per impostazione predefinita PHP 7.1 o versioni precedenti, non supportate per la versione più recente dei driver PHP per SQL Server. Vedere le note all'inizio di ogni sezione per installare PHP 8.2 o 8.3.

Sono incluse anche istruzioni per l'installazione di PHP FastCGI Process Manager, PHP-FPM, in Ubuntu. PHP-FPM è necessario se si usa il server Web nginx invece di Apache.

Anche se queste istruzioni contengono comandi per l'installazione di entrambi i driver SQLSRV e PDO_SQLSRV, i driver possono essere installati e funzionano in modo indipendente. Gli utenti che hanno familiarità con la personalizzazione della configurazione possono modificare queste istruzioni in modo che siano specifiche per SQLSRV o PDO_SQLSRV. Entrambi i driver hanno le stesse dipendenze, tranne nei casi indicati di seguito.

Per la versione più recente dei sistemi operativi supportati, vedere Matrice di supporto.

Nota

Assicurarsi di aver installato la versione più recente del driver ODBC per garantire prestazioni e sicurezza ottimali. Per istruzioni sull'installazione, vedere Installare il driver Microsoft ODBC driver for SQL Server (Linux) o Installare il driver Microsoft ODBC driver for SQL Server (macOS).

Installazione su Ubuntu

Nota

Per installare PHP 8.2 o 8.3, sostituire 8.1 con 8.2 o 8.3 nei comandi seguenti.

Passaggio 1: Installare PHP (Ubuntu)

sudo su
add-apt-repository ppa:ondrej/php -y
apt-get update
apt-get install php8.1 php8.1-dev php8.1-xml -y --allow-unauthenticated

Passaggio 2. Prerequisiti di installazione (Ubuntu)

Installare il driver ODBC per Ubuntu seguendo le istruzioni riportate in Installare Microsoft ODBC Driver for SQL Server (Linux). Assicurarsi di installare anche il pacchetto unixodbc-dev. Viene usato dal comando pecl per installare i driver PHP.

sudo apt-get install unixodbc-dev

Passaggio 3. Installare i driver PHP per Microsoft SQL Server (Ubuntu)

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
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
sudo phpenmod -v 8.1 sqlsrv pdo_sqlsrv

Se nel sistema è presente una sola versione di PHP, l'ultimo passaggio può essere semplificato come phpenmod sqlsrv pdo_sqlsrv.

Passaggio 4. Installare Apache e configurare il caricamento dei driver (Ubuntu)

sudo su
apt-get install libapache2-mod-php8.1 apache2
a2dismod mpm_event
a2enmod mpm_prefork
a2enmod php8.1
exit

Passaggio 5. Riavviare Apache e testare lo script di esempio (Ubuntu)

sudo service apache2 restart

Per testare l'installazione, vedere Test dell'installazione alla fine di questo documento.

Installazione in Ubuntu con PHP-FPM

Nota

Per installare PHP 8.2 o 8.3, sostituire 8.1 con 8.2 o 8.3 nei comandi seguenti.

Passaggio 1: Installare PHP (Ubuntu con PHP-FPM)

sudo su
add-apt-repository ppa:ondrej/php -y
apt-get update
apt-get install php8.1 php8.1-dev php8.1-fpm php8.1-xml -y --allow-unauthenticated

Verificare lo stato del servizio PHP-FPM eseguendo:

systemctl status php8.1-fpm

Passaggio 2. Prerequisiti di installazione (Ubuntu con PHP-FPM)

Installare il driver ODBC per Ubuntu seguendo le istruzioni riportate in Installare Microsoft ODBC Driver for SQL Server (Linux). Assicurarsi di installare anche il pacchetto unixodbc-dev. Viene usato dal comando pecl per installare i driver PHP.

Passaggio 3. Installare i driver PHP per Microsoft SQL Server (Ubuntu con PHP-FPM)

sudo pecl config-set php_ini /etc/php/8.1/fpm/php.ini
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
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
sudo phpenmod -v 8.1 sqlsrv pdo_sqlsrv

Se nel sistema è presente una sola versione di PHP, l'ultimo passaggio può essere semplificato come phpenmod sqlsrv pdo_sqlsrv.

Verificare che sqlsrv.ini e pdo_sqlsrv.ini si trovino in /etc/php/8.1/fpm/conf.d/:

ls /etc/php/8.1/fpm/conf.d/*sqlsrv.ini

Riavviare il servizio PHP-FPM:

sudo systemctl restart php8.1-fpm

Passaggio 4. Installare e configurare nginx (Ubuntu con PHP-FPM)

sudo apt-get update
sudo apt-get install nginx
sudo systemctl status nginx

Per configurare nginx è necessario modificare il file /etc/nginx/sites-available/default. Aggiungere index.php all'elenco sotto la sezione # Add index.php to the list if you are using PHP:

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html index.php;

Rimuovere successivamente il commento e modificare la sezione che segue # pass PHP scripts to FastCGI server come indicato sotto:

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

Passaggio 5. Riavviare nginx e testare lo script di esempio (Ubuntu con PHP-FPM)

sudo systemctl restart nginx.service

Per testare l'installazione, vedere Test dell'installazione alla fine di questo documento.

Installazione su Red Hat

Passaggio 1: Installare PHP (Red Hat)

Per installare PHP in Red Hat 7 eseguire i comandi seguenti:

Nota

Per installare PHP 8.2 or 8.3, sostituire remi-php81 con remi-php82 o remi-php83 rispettivamente nei comandi seguenti.

sudo su
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
subscription-manager repos --enable=rhel-7-server-optional-rpms
yum install yum-utils
yum-config-manager --enable remi-php81
yum update
# Note: The php-pdo package is required only for the PDO_SQLSRV driver
yum install php php-pdo php-pear php-devel

Per installare PHP in Red Hat 8, eseguire i comandi seguenti:

Nota

Per installare PHP 8.2 o 8.3, sostituire remi-8.1 con remi-8.2 o remi-8.3 rispettivamente nei comandi seguenti.

sudo su
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf install yum-utils
dnf module reset php
dnf module install php:remi-8.1
subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
dnf update
# Note: The php-pdo package is required only for the PDO_SQLSRV driver
dnf install php-pdo php-pear php-devel

Passaggio 2. Prerequisiti di installazione (Red Hat)

Installare il driver ODBC per Red Hat 7 o 8 seguendo le istruzioni riportate in Installare Microsoft ODBC Driver for SQL Server (Linux). Assicurarsi di installare anche il pacchetto unixodbc-dev. Viene usato dal comando pecl per installare i driver PHP.

Passaggio 3. Installare i driver PHP per Microsoft SQL Server (Red Hat)

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-sqlsrv.ini
exit

In alternativa è possibile eseguire l'installazione dal repository Remi:

sudo yum install php-sqlsrv

Passaggio 4. Installare Apache (Red Hat)

sudo yum install httpd

SELinux viene installato per impostazione predefinita ed eseguito in modalità Enforcing. Per consentire la connessione di Apache ai database tramite SELinux, eseguire questo comando:

sudo setsebool -P httpd_can_network_connect_db 1

Passaggio 5. Riavviare Apache e testare lo script di esempio (Red Hat)

sudo apachectl restart

Per testare l'installazione, vedere Test dell'installazione alla fine di questo documento.

Installazione in Debian

Nota

Per installare PHP 8.2 o 8.3, sostituire 8.1 con 8.2 o 8.3 nei comandi seguenti.

Passaggio 1: Installare PHP (Debian)

sudo su
apt-get install curl apt-transport-https
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt-get update
apt-get install -y php8.1 php8.1-dev php8.1-xml php8.1-intl

Passaggio 2. Prerequisiti di installazione (Debian)

Installare il driver ODBC per Debian seguendo le istruzioni riportate in Installare Microsoft ODBC Driver for SQL Server (Linux). Assicurarsi di installare anche il pacchetto unixodbc-dev. Viene usato dal comando pecl per installare i driver PHP.

Per ottenere la visualizzazione corretta dell'output PHP in un browser, potrebbe essere necessario anche generare le impostazioni locali corrette. Per le impostazioni locali en_US UTF-8, ad esempio, eseguire questi comandi:

sudo su
sed -i 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen
locale-gen

Potrebbe essere necessario aggiungere /usr/sbin a $PATH, perché l'eseguibile locale-gen si trova in tale percorso.

Passaggio 3. Installare i driver PHP per Microsoft SQL Server (Debian)

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
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
sudo phpenmod -v 8.1 sqlsrv pdo_sqlsrv

Se nel sistema è presente una sola versione di PHP, l'ultimo passaggio può essere semplificato come phpenmod sqlsrv pdo_sqlsrv. Come per locale-gen, phpenmod si trova in /usr/sbin quindi potrebbe essere necessario aggiungere questa directory a $PATH.

Passaggio 4. Installare Apache e configurare il caricamento dei driver (Debian)

sudo su
apt-get install libapache2-mod-php8.1 apache2
a2dismod mpm_event
a2enmod mpm_prefork
a2enmod php8.1

Passaggio 5. Riavviare Apache e testare lo script di esempio (Debian)

sudo service apache2 restart

Per testare l'installazione, vedere Test dell'installazione alla fine di questo documento.

Installazione in SUSE

Nota

Nelle istruzioni seguenti sostituire <SuseVersion> con la propria versione di SUSE: SLE_15_SP3, SLE_15_SP4 o una versione superiore se si usa SUSE Linux Enterprise Server 15. Per SUSE 12, usare SLE_12_SP5 o una versione successiva. Non tutte le versioni di PHP sono disponibili per tutte le versioni di SUSE Linux. Vedere http://download.opensuse.org/repositories/devel:/languages:/php per verificare in quali versioni di SUSE è disponibile la versione predefinita di PHP o http://download.opensuse.org/repositories/devel:/languages:/php:/ per verificare quali altre versioni di PHP sono disponibili per le singole versioni di SUSE.

Nota

A partire da oggi i pacchetti per PHP 7.4 o versioni successive non sono disponibili per SUSE 12.

Passaggio 1: Installare PHP (SUSE)

sudo su
zypper -n ar -f https://download.opensuse.org/repositories/devel:languages:php/<SuseVersion>/devel:languages:php.repo
zypper --gpg-auto-import-keys refresh
zypper -n install php8 php8-pdo php8-devel php8-openssl

Passaggio 2. Prerequisiti di installazione (SUSE)

Installare il driver ODBC per SUSE seguendo le istruzioni riportate in Installare Microsoft ODBC Driver for SQL Server (Linux). Assicurarsi di installare anche il pacchetto unixodbc-dev. Viene usato dal comando pecl per installare i driver PHP.

Passaggio 3. Installare i driver PHP per Microsoft SQL Server (SUSE)

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/sqlsrv.ini
exit

Passaggio 4. Installare Apache e configurare il caricamento dei driver (SUSE)

sudo su
zypper install apache2 apache2-mod_php8
a2enmod php8
echo "extension=sqlsrv.so" >> /etc/php8/apache2/php.ini
echo "extension=pdo_sqlsrv.so" >> /etc/php8/apache2/php.ini
exit

Passaggio 5. Riavviare Apache e testare lo script di esempio (SUSE)

sudo systemctl restart apache2

Per testare l'installazione, vedere Test dell'installazione alla fine di questo documento.

Installazione in Alpine

Nota

È possibile che PHP 8.1 o una versione successiva sia disponibile nei repository di test o perimetrali per Alpine. È invece possibile compilare PHP dall'origine.

Passaggio 1: Installare PHP (Alpine)

I pacchetti PHP per Alpine sono disponibili nel repository edge/community. Vedere Enable Community Repository (Abilitare il repository della community) nella pagina WIKI. Aggiungere la riga seguente a /etc/apk/repositories, sostituendo <mirror> con l'URL di un mirror del repository di Alpine:

http://<mirror>/alpine/edge/community

Eseguire quindi:

sudo su
apk update
# Note: The php*-pdo package is required only for the PDO_SQLSRV driver
# For PHP 7.*
apk add php7 php7-dev php7-pear php7-pdo php7-openssl autoconf make g++
# For PHP 8.*
apk add php8 php8-dev php8-pear php8-pdo php8-openssl autoconf make g++
# The following symbolic links are optional but useful
ln -s /usr/bin/php8 /usr/bin/php
ln -s /usr/bin/phpize8 /usr/bin/phpize
ln -s /usr/bin/pecl8 /usr/bin/pecl
ln -s /usr/bin/php-config8 /usr/bin/php-config

Passaggio 2. Prerequisiti di installazione (Alpine)

Installare il driver ODBC per Alpine seguendo le istruzioni riportate in Installare Microsoft ODBC Driver for SQL Server (Linux). Assicurarsi di installare anche il pacchetto unixodbc-dev (sudo apk add unixodbc-dev). Viene usato dal comando pecl per installare i driver PHP.

Passaggio 3. Installare i driver PHP per Microsoft SQL Server (Alpine)

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/10_pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20_sqlsrv.ini

Passaggio 4. Installare Apache e configurare il caricamento dei driver (Alpine)

# For PHP 7.*
sudo apk add php7-apache2 apache2
# For PHP 8.*
sudo apk add php8-apache2 apache2

Passaggio 5. Riavviare Apache e testare lo script di esempio (Alpine)

sudo rc-service apache2 restart

Per testare l'installazione, vedere Test dell'installazione alla fine di questo documento.

Installazione in macOS

Se non è già presente, installare brew come illustrato di seguito:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Nota

Per installare PHP 8.2 o 8.3, sostituire php@8.1 con php@8.2 o php@8.3 rispettivamente nei comandi seguenti.

Passaggio 1: Installare PHP (macOS)

brew tap
brew tap homebrew/core
brew install php@8.1

PHP dovrebbe essere incluso nel percorso. Eseguire php -v per verificare che sia in esecuzione la versione corretta di PHP. Se PHP non si trova nel percorso previsto o la versione non è corretta, eseguire i comandi seguenti:

brew link --force --overwrite php@8.1

Se si usa Apple M1 ARM64, potrebbe essere necessario impostare il percorso:

export PATH="/opt/homebrew/bin:$PATH"

Passaggio 2. Prerequisiti di installazione (macOS)

Installare il driver ODBC per macOS seguendo le istruzioni riportate in Installare Microsoft ODBC Driver for SQL Server (macOS).

Nota

Se si usa l'hardware Apple M1 ARM64, installare Microsoft ODBC driver 17.8+ direttamente senza usare l'emulatore Rosetta 2.

Potrebbe essere necessario anche installare gli strumenti GNU make:

brew install autoconf automake libtool

Passaggio 3. Installare i driver PHP per Microsoft SQL Server (macOS)

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv

Se si usa Apple M1 ARM64, eseguire invece le operazioni seguenti:

sudo CXXFLAGS="-I/opt/homebrew/opt/unixodbc/include/" LDFLAGS="-L/opt/homebrew/lib/" pecl install sqlsrv
sudo CXXFLAGS="-I/opt/homebrew/opt/unixodbc/include/" LDFLAGS="-L/opt/homebrew/lib/" pecl install pdo_sqlsrv

Passaggio 4. Installare Apache e configurare il caricamento dei driver (macOS)

Nota

La versione più recente di macOS 11.0 Big Sur prevede la preinstallazione di Apache 2.4, ma Apple ha anche rimosso alcuni script necessari. La soluzione consiste nell'installare e poi configurare Apache 2.4 tramite Homebrew. Questa operazione non rientra nell'ambito di questa guida all'installazione. Per istruzioni dettagliate è consigliabile controllare Apache o Homebrew.

brew install apache2

Per trovare il file di configurazione di Apache httpd.conf per l'installazione di Apache in uso, eseguire:

/usr/local/bin/apachectl -V | grep SERVER_CONFIG_FILE

I comandi seguenti accodano la configurazione richiesta a httpd.conf. Assicurarsi di sostituire il percorso restituito dal comando precedente a /usr/local/etc/httpd/httpd.conf:

echo "LoadModule php7_module /usr/local/opt/php@8.1/lib/httpd/modules/libphp7.so" >> /usr/local/etc/httpd/httpd.conf
(echo "<FilesMatch .php$>"; echo "SetHandler application/x-httpd-php"; echo "</FilesMatch>";) >> /usr/local/etc/httpd/httpd.conf

Passaggio 5. Riavviare Apache e testare lo script di esempio (macOS)

sudo apachectl restart

Per testare l'installazione, vedere Test dell'installazione alla fine di questo documento.

Test dell'installazione

Per testare questo script di esempio, creare un file denominato testsql.php nella radice dei documenti del sistema, il cui percorso è /var/www/html/ in Ubuntu, Debian e Red Hat, /srv/www/htdocs in SUSE, /var/www/localhost/htdocs in Alpine o /usr/local/var/www in macOS. Copiarvi lo script seguente, sostituendo il server, il database, il nome utente e la password nel modo appropriato.

Esempio di SQLSRV

<?php
$serverName = "yourServername";
$connectionOptions = array(
    "database" => "yourDatabase",
    "uid" => "yourUsername",
    "pwd" => "yourPassword"
);

function exception_handler($exception) {
    echo "<h1>Failure</h1>";
    echo "Uncaught exception: " , $exception->getMessage();
    echo "<h1>PHP Info for troubleshooting</h1>";
    phpinfo();
}

set_exception_handler('exception_handler');

// Establishes the connection
$conn = sqlsrv_connect($serverName, $connectionOptions);
if ($conn === false) {
    die(formatErrors(sqlsrv_errors()));
}

// Select Query
$tsql = "SELECT @@Version AS SQL_VERSION";

// Executes the query
$stmt = sqlsrv_query($conn, $tsql);

// Error handling
if ($stmt === false) {
    die(formatErrors(sqlsrv_errors()));
}
?>

<h1> Success Results : </h1>

<?php
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    echo $row['SQL_VERSION'] . PHP_EOL;
}

sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);

function formatErrors($errors)
{
    // Display errors
    echo "<h1>SQL Error:</h1>";
    echo "Error information: <br/>";
    foreach ($errors as $error) {
        echo "SQLSTATE: ". $error['SQLSTATE'] . "<br/>";
        echo "Code: ". $error['code'] . "<br/>";
        echo "Message: ". $error['message'] . "<br/>";
    }
}
?>

Esempio di PDO_SQLSRV

<?php
try {
    $serverName = "yourServername";
    $databaseName = "yourDatabase";
    $uid = "yourUsername";
    $pwd = "yourPassword";
    
    $conn = new PDO("sqlsrv:server = $serverName; Database = $databaseName;", $uid, $pwd);

    // Select Query
    $tsql = "SELECT @@Version AS SQL_VERSION";

    // Executes the query
    $stmt = $conn->query($tsql);
} catch (PDOException $exception1) {
    echo "<h1>Caught PDO exception:</h1>";
    echo $exception1->getMessage() . PHP_EOL;
    echo "<h1>PHP Info for troubleshooting</h1>";
    phpinfo();
}

?>

<h1> Success Results : </h1>

<?php
try {
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['SQL_VERSION'] . PHP_EOL;
    }
} catch (PDOException $exception2) {
    // Display errors
    echo "<h1>Caught PDO exception:</h1>";
    echo $exception2->getMessage() . PHP_EOL;
}

unset($stmt);
unset($conn);
?>

Passare nel browser a https://localhost/testsql.php (https://localhost:8080/testsql.php in macOS). Dovrebbe ora essere possibile connettersi al database SQL di Azure/SQL Server. Se non viene visualizzato un messaggio di operazione riuscita che mostra le informazioni sulla versione di SQL, è possibile eseguire alcune operazioni di base di risoluzione dei problemi eseguendo lo script dalla riga di comando:

php testsql.php

Se l'esecuzione dalla riga di comando ha esito positivo ma non viene visualizzato alcun messaggio nel browser, controllare i file di log Apache. Per altre informazioni, vedere le risorse di supporto per i percorsi da seguire.

Vedi anche

Introduzione ai driver Microsoft per PHP per SQL Server

Caricamento dei Driver Microsoft per PHP per SQL Server

Requisiti di sistema dei driver Microsoft per PHP per SQL Server