miércoles, 19 de noviembre de 2014

Conexión a SQL Server con PHP desde Linux

Esta semana tuve que investigar como hacer consultas a una base de datos SQL Server 2000 desde un sistema desarrollado con PHP. Desde mi equipo local no hubo mayor problema, utilizando origenes de datos ODBC, la cuestión ahora es, montar ese sistema en un servidor Centos 5.4!! Evidentemente, ahi no hay origenes de datos, por lo que me di a la tarea de investigar algo con lo que pudiera hacer lo mismo pero desde Linux, y ahí apareció freeTDS que no es más que una biblioteca de OBDC basado en SYBASE que permite establecer conexiones con bases de datos en SQL Server.

Aquí la URL de la receta que encontré. (100% Probada y funcionando)

http://www.linuxsc.net/the-servers/6110-proceso-para-instalar-apache-php-freetds-selinux-on-centos-6-5 

Agradecimientos a: Faustino Vasquez Limon Jefe de Sistemas


A continuación la receta:

Servidores





Proceso para Instalar Apache+php+freetds+SELinux on Centos 6.5


Este pequeño manual, describe como instalar un servidor Apache basado en Centos 6.5 que permita la conexión a bases de datos en SQLServer a través de FreeTDS, ademas aproveche la seguridad que proporciona SELinux, delimitando el dominio de ejecución del servicio.


Paso.1 Verificamos que SELinux este activado.


[root@localhost ~]# getenforce
Enforcing

 

Paso2. Se realiza la instalación del servidor Apache.


[root@localhost ~]# yum -y install httpd

 

Paso3. Se abre el puerto 80 en el Firewall.


[root@localhost ~]# system-config-firewall-tui
 


Paso4. Se inicia Apache y se le indica al sistema que arranque el servicio al iniciar el servidor.


[root@localhost ~]# service httpd start
[root@localhost ~]# chkconfig httpd on


Paso5.Instalamos PHP.


[root@localhost ~]# yum -y install php

 

Hasta este punto parece que todo va bien, pero, sorpresa, nos damos cuenta que la versión de PHP instalada es la 5.3.3, instalemos algo mas reciente, que tal la versión 5.5.9.


[root@localhost ~]# php -v
PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

 

Paso6. Removemos la versión instalada de PHP.


[root@localhost ~]# yum remove php*

 

Paso7. Instalamos la versión 5.5.9 de PHP.


[root@localhost ~]# rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
[root@localhost ~]# yum install php55w php55w-opcache php55w-mcrypt php55w-pdo php55w-mssql

 

Error: El paquete php55w-mssql, falla al intentar instalarse, existe un problema con dependencias, que hay que corregir.


-->Package php55w-mssql-5.5.9-1.w6.x86_64 will be installed
--> Processing Dependency: libsybdb.so.5()(64bit) for package: php55w-mssql-5.5.9-1.w6.x86_64
--> Finished Dependency Resolution
Error: Package: php55w-mssql-5.5.9-1.w6.x86_64 (mt_dv_extras)
Requires: libsybdb.so.5()(64bit)
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest

 

Paso8. Instalar las dependencias desde el repositorio Remi y corregir los problemas generados por php55w-mssql.


[root@localhost ~]# rpm -ivh http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost ~]# wget http://rpms.famillecollet.com/enterprise/remi.repo
[root@localhost ~]# yum -y install php55w-mssql

 

VERIFICAMOS: La versión instalada debe ser la 5.5.x.


[root@localhost ~]# php -v
PHP 5.5.9 (cli) (built: Feb 7 2014 14:31:25)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

 

Paso9. Instalamos Freetds.


[root@localhost ~]# yum install freetds freetds-devel
[root@localhost ~]# yum install unixODBC unixODBC-devel


 Editamos:


[root@localhost ~]# vi /etc/odbcinst.ini

 

Agregamos lo siguiente:


[FreeTDS]
Description=ODBC para nuestro SQL Server
Driver=/usr/lib/libtdsodbc.so
Setup=/usr/lib/libtdsS.so
FileUsage=1

 

Editamos:


[root@localhost ~]# vi /etc/freetds.conf

 

Cambiamos lo siguiente:


;tds version = 4.2
por
tds version = 8

 

Editamos:


[root@localhost ~]# vi /etc/profile.d/freeTDS.sh

 

Agregamos lo siguiente:


# Desc: Variable necesaria conectar php y Freetds
export SYBASE=/usr/local/freetds


Paso10. Permitir a Apache conectarse a la Red, este paso es muy importante ya que si no se realiza, el servicio no puede conectarse con servicios en la red.


SELinux no permitirá el acceso al servidor SQL.
[root@localhost ~]# /usr/sbin/setsebool -P httpd_can_network_connect=1

 

Paso11. Verificamos la conexión hacia SQL Server.


[root@localhost ~]# tsql -S SQLServerIP -U SQLServerUser -P SQLServerPassword
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> use DBName
2> select * from TableName
3> go



No hay comentarios:

Publicar un comentario