jueves, 29 de agosto de 2019
Conexión de Web PHP (Linux) a base de datos MS SQL (Windows)
Imaginemos el siguiente escenario:
Tenemos una web en PHP en un servidor Linux con Apache y tenemos una base de datos en un servidor SQL alojado en una máquina Windows. La base de datos tiene todos los registros de clientes con sus datos y facturación. Queremos que al hacer login en la web esta haga consultas a la base de datos de Microsoft SQL server.
VERIFICADO y TRABAJANDO EN DEBIAN 6-7-8 Y CENTOS 7 CON PHP 5 && EN DEBIAN 9 CON PHP 7.3
------------------------------------------------------------------------------------------------------------------------------------------------
(CON PHP 7 PROCEDIMIENTO PARA PHP 7.) Debian 9 Stretch, PHP 7 and Microsoft SQL Server access
Requisitos del sistema para los controladores de Microsoft para PHP para SQL Server )
------------------------------------------------------------------------------------------------------------------------------------------------
Para poder hacer la conexión entre PHP5 y MS SQL utilizaremos Freetds (set de librerías Linux & Unix) y la extensión MS SQL. En la familia Debian lo instalamos así:
DEBIAN
--------------------------------------------------------------------------------------------------------------------------
sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase
-----------------------------------------------------------------------------------------------------------------------------
CENTOS
--------------------------------------------------------------------------------------------------------------------------
Añadir repositorio EPEL## RHEL/CentOS 7 64-Bit ##
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
----------------------------------------------------------------------------------------------------------------------------------------
sudo yum update
--------------------------------------------------------------------------------------------------------------------------
sudo yum install php-mssql
------------------------------------------------------------------------------------------------------------------------------
Running transaction
Instalando : unixODBC-2.3.1-11.el7.x86_64
Instalando : freetds-0.95.81-1.el7.x86_64
Instalando : php-mssql-5.4.16-7.el7.x86_64
Comprobando : unixODBC-2.3.1-11.el7.x86_64
Comprobando : php-mssql-5.4.16-7.el7.x86_64
Comprobando : freetds-0.95.81-1.el7.x86_64
Reiniciamos apache:
DEBIAN
sudo /etc/init.d/apache2 restart
CENTOS
service apache2 restart
El archivo de configuración de FREETDS:
DEBIAN
nano /etc/freetds/freetds.conf
CENTOS
nano /etc/freetds.conf
Podemos ver en phpinfo si tenemos la libreria freetds activa: Para comprobarlo creamos un archivo de nombre info.php con el siguiente contenido:
<?php phpinfo(); ?>
Si tenemos xampp movemos el archivo info.php al directorio /opt/lampp/htdocs o si tenemos apache instalado en sistema en /var/www/html. Si tenemos webmin/virtualmin encontraremos nuestro public_html en la carpeta /home ahí estará la carpeta con el nombre del dominio del servidor virtual ejemplo: /home/marspain.sytes.net/public_html/.
Abrimos el navegador y en la url :
http://localhost/info.php
Ahora desde la terminal podemos testear si conecta con MSSQL.
Abrimos una terminal:
tsql -H mi_servidor_sql -p puerto -U usuario_sql -P contraseña -D base_de_datos
Ejemplo:
tsql -H 192.168.1.221 -p 1433 -U sa -P sql123 -D EMPRESA
También podemos utilizar este código php para comprobar la conexión.
Igual que con el info.php el archivo test.php lo copiamos al directorio web y llamamos al archivo desde la url del navegador:
Creamos un archivo test.php con el siguiente código PARA PHP5 (los codes php están al final del post para descargar):
<?php
$link = mssql_connect('192.168.1.221', 'sa', 'sql123');
if(!$link) {
echo 'Could not connect';
die('Could not connect: ' . mssql_error());
}
echo'Successful Sql Connection';
msssql_close($link);
?>
En la linea :
$link = mssql_connect () sustituimos "192.168.1.221" por la ip de la máquina windows con el servidor sql apuntando a la instancia SQL, por ejemplo:
192.168.1.130\VIRTUAL (Si hemos apuntado ya la instancia en freetds sólo con la ip es suficiente para establecer la conexión)
192.168.1.130
"VIRTUAL" es el nombre de la instancia SQL del servidor MSSQL. Depende de la configuración. Si hemos apuntado ya a la instancia en freetds sólo con poner la ip bastará.
"sa" es el usuario admin de SQL, lo sustituimos por el usuario que tenemos en SQL asociado y con permisos a la base de datos.
"sql123" es la contraseña. Sustituimos por la nuestra.
Si la conexión se establece con éxito podremos ver en el navegador:
Successful Sql Connection
Adjunto archivos info.php y test.php en zip a pie de post.
TRABAJANDO EN DEBIAN 6-7-8 CON PHP 5
TRABAJANDO EN CENTOS 7 CON PHP 5
ip servidor linux-> 172.16.52.130
ip servidor windows-> 172.16.52.128
CLICK EN LA IMAGEN PARA VER INSTRUCCIONES PARA ESTABLECER LA CONEXIÓN EN PHP-7:
SI YA HAS HECHO TODOS LOS PASOS PARA PODER CONECTAR DESDE PHP7
CREA UN ARCHIVO PRUEBA.PHP CON EL SIGUIENTE CODE:
<?php
$serverName = "yourServername";
$connectionOptions = array(
"database" => "yourDatabase",
"uid" => "yourUsername",
"pwd" => "yourPassword"
);
// 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> 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 "Error information: <br>";
foreach ($errors as $error) {
echo "SQLSTATE: ". $error['SQLSTATE'] . "<br>";
echo "Code: ". $error['code'] . "<br>";
echo "Message: ". $error['message'] . "<br>";
}
}
?>
TRABAJANDO EN DEBIAN 9 CON PHP 7.3
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario