En este artículo se explica cómo instalar los drivers oficiales de Microsoft de ODBC para SQL Server de Linux en un Ubuntu 20.04 LTS para la versión versión 7.4 de PHP-FPM.
Pero puedes seguir los mismos pasos para instalarlo en cualquier imagen con Ubuntu 20.04 LTS disponible, por ejemplo la actual Imagen preinstalada de HestiaCP.
También puedes utilizar el artículo para instarlos en otra versión de PHP modificando los comandos por la versión correspondiente y puedes saltar el paso de instalación de PHP-FPM si tienes todos los paquetes requeridos instalados previamente.
Instalación de PHP-FPM
El primer paso es añadir el repositorio de PHP:
# add-apt-repository ppa:ondrej/php -y
Y actualizar los repositorios:
# apt-get update
Luego instala paquetes de PHP:
# apt-get install php7.4 php7.4-dev php7.4-fpm php7.4-xml -y --allow-unauthenticated
Instalación de drivers
Primero será necesario instalar el siguiente paquete para odbc en Linux:
# apt install unixodbc-dev
Adquiere y añade la llave para el repositorio de Microsoft:
# curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
Para añadir el repositorio de Microsoft de Ubuntu 20.04 LTS posteriormente:
# curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
De nuevo actualizar los repositorios para los añadidos recientemente:
# apt-get update
Luego, acepta los términos e instalar el paquete de drivers:
# ACCEPT_EULA=Y apt-get install -y msodbcsql17
Lo mismo para el paquete de herramientas, acepta los términos e instala paquete:
# ACCEPT_EULA=Y apt-get install -y mssql-tools
Después añade el path para el binario:
# echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc && source ~/.bashrc
Configura el fichero para el PHP:
# pecl config-set php_ini /etc/php/7.4/fpm/php.ini
E instala los dos controladores:
# pecl install sqlsrv && pecl install pdo_sqlsrv
Añade la extensión pdo_sqlsrv:
# printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.4/mods-available/pdo_sqlsrv.ini
Y también la extensión sqlsrv:
# printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.4/mods-available/sqlsrv.ini
Por último, reinicia el servicio PHP-FPM correspondiente:
# systemctl restart php7.4-fpm
Comprobaciones
Puedes ejecutar el siguiente comando para verificar el funcionamiento de extensiones:
# phpenmod -v 7.4 sqlsrv pdo_sqlsrv && ls /etc/php/7.4/fpm/conf.d/*sqlsrv.ini
Luego, también puedes crear un fichero en el directorio web para realizar una prueba (ejemplo de ruta de HestiaCP):
# vi /home/admin/web/ejemplo.com/public_html/testsql.php
Con el siguiente contenido del fichero, modificando los valores para la conexión con el SQL Server (sino debería dar timeout):
<?php
try {
$serverName = "IPonombredeservidorSQL";
$databaseName = "Nombredebasededatos";
$uid = "Nombredeusuario";
$pwd = "Contraseñadeusuario";
$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);
?>
Fuentes oficiales en español:
Instalación de drivers Microsoft ODBC para SQL Server en Linux
Tutorial de instalación para controladores SQL Server en Ubuntu con PHP-FPM
¿Lo has probado? ¡Déjanos tus comentarios!