Logo
  • Entries
  • Comments
  • Popular
Recent Posts
  • January 2012
  • November 2011
  • October 2011
  • September 2011
  • August 2011
  • July 2011
  • June 2011
  • May 2011
  • April 2011
  • March 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • August 2010
  • July 2010
  • June 2010
  • May 2010
  • April 2010
  • March 2010
  • February 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009
  • July 2009
  • June 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008
  • April 2008
  • March 2008
  • February 2008
  • January 2008
  • December 2007
  • November 2007
  • October 2007
  • July 2007
Recent Comments
  • Makendra It's always a pleasure to hear from someone with eexrpitse....
  • Rubén Ortiz Hola dependerá de varias cosas pero la respuesta sería NO. ...
  • jose miguel perea Buenos días, ¿La replicación entre maestro y esclavo es i...
  • Rubén Ortiz Si lo hacéis legal, con VMware el único problema son los cos...
  • Angel Hola, estamos valorando implementar baremetal para crear un ...
Popular Articles
  • Declaro la guerra al mosquito Tigre (35)
  • Phpbb3 - encode error converter (19)
  • MySQL - Variables básicas a configurar (17)
  • Reinicio programado Windows 2003 Server (16)
  • Plesk - Evitar el SPAM (10)
  • Home
  • Contacta
  • Hosting Linux
  • Legal
  • Sobre mí – About me

PHP MSSQL para Centos 4

Posted by Rubén Ortiz on May 27, 2008 in Centos, Linux | 0 comments

Uno de mis temas “favoritos” es el soporte SQL server bajo PHP en Linux. Por motivos que no tengo bien claros y imagino que es debido al tema de licencias GPL y demás, en las distribuciones de PHP para Linux no viene activado el soporte “mssql”, es decir, la capacidad de conexión a SQL server con PHP. Hay varios tutoriales muy útiles con sólo hacer una búsqueda y sin ellos no habría encontrado nunca la solución a mi problema, que era un “pelín” más complicado. Además de tener en cuenta la distribución, php, etc, yo tenía un compañero de viaje más, el panel de control Plesk. Lo positivo de la situación fue que, estando en un entorno Parallels, las tareas de backup y clon de containers me dio la seguridad total de volver a estados pasados con un par de clicks y total rapidez.

Primero miramos nuestra distribución y php que tenemos en nuestra máquina:

1
<strong># cat /etc/redhat-release</strong>

CentOS release 4.6 (Final)

1
<strong># rpm -q php</strong>

php-4.3.9-3.22.9

Resumen:

Sistema: Linux – Virtualización Parallels

Distro: Centos 4.6

Kernel: 2.6.18 Parallel

Hacemos phpinfo y vemos que no tiene soporte mssql (o, mai got). Como paso previo nos aseguramos tener un compilador para c:

1
<strong># yum install gcc</strong>

Descargar freetds y instalar:

1
2
<strong># wget ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/
freetds-stable.tgz</strong>
1
<strong># gunzip freetds-stable.tgz</strong>
1
<strong># tar xf freetds-stable.tar</strong>
1
<strong># cd freetds-stable-0.64/</strong>
1
2
<strong># ./configure --prefix=/usr/local/freetds
--with-tdsver=8.0 --enable-msdblib --enable-dbmfix --with-gnu-ld</strong>
1
<strong># make</strong>
1
<strong># make install</strong>

Es muy importante la ubicación de la instalación de freetds. Porque como se puede leer en un artículo de Brassy.net es crucial el directorio donde se instala. De hecho, aconseja no utilizar los rpms de FreeTDS que están disponibles desde el repositorio de rpmforge. Ahora tendremos que probar la conexión al servidor SQL:

1
# tsql -S &lt;IP servidor bd&gt; -U &lt;username&gt; -P &lt;password&gt;

Si podemos conectarnos, podemos seguir adelante. Sino, hemos de repasar porque no se establece la conexión con el servidor de base de datos. En este momento, nuestro sistema tiene soporte para SQL, pero otra historia es recompilar el php para activar ese soporte. Let’s go.

Ahora tenemos que buscar el archivo php.SPEC, donde está la información necesaria para compilar de nuevo el php. Puede que no lo tengamos en nuestra máquina. En ese caso, debemos bajarnos un .rpm. Vamos concretar la situación en la que nos encontramos. Estamos ante una máquina Centos 4.6 64bits con un Plesk ya instalado y funcionando. Debemos, de alguna manera, recompilar ese paquete de php para incluir la extensión mssql. El problema que tenemos es que no tenemos ese archivo SPEC para trabajar, no se encuentra en la máquina. Quizá quieras probar la opción de bajarte el rpm del paquete php-mssql*.rpm que encuentres en algunos repositorios. Es una opción que descarté porque la instalación de un rpm en particular te devuelve siempre errores de dependencia que no son fáciles de solucionar. Implica actualizar más y más paquetes del sistema. Un infierno.

Necesitaremos bajarnos el archivo fuente de php, que creará un árbol de directorios con todo lo necesario para compilar la extensión. Aviso que me dio varios problemas. Quizá alguno no entienda el tema del Plesk en esto y porque digo que molesta a la hora de activar el soporte. Bien, Plesk instala varios paquetes relacionados con php. Entendemos que debemos dar los menos pasos o acciones posibles para activar ese soporte y que no deje de funcionar el Plesk, porque los clientes o personas que lo usan se pueden enfadar bastante. Lo primero que piensas es, “desinstalo el php, me lo bajo y lo compilo”. Pero al hacer un:

1
<strong># yum remove php</strong>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Removing:
php                     x86_64     4.3.9-3.22.9     installed         3.6 M
Removing for dependencies:
psa                     x86_64     8.3.0-cos4.build83071218.18  installed          75 M
psa-api                 noarch     8.3.0-cos4.build83080131.20  installed         3.9 M
psa-api-rpc             noarch     8.3.0-cos4.build83080131.20  installed         1.2 M
psa-awstats-configurator  noarch     1.0.0-cos4.build83071218.18  installed          0.0
psa-horde               noarch     3.1.5-cos4.build83071218.18  installed          23 M
psa-hotfix3             x86_64     8.3.0-cos4.build83080109.18  installed          23 M
psa-hotfix4             x86_64     8.3.0-cos4.build83080131.20  installed         662 k
psa-imp                 noarch     4.1.5-cos4.build83071218.18  installed          14 M
psa-ingo                noarch     1.1.4-cos4.build83071218.18  installed         3.9 M
psa-kronolith           noarch     2.1.6-cos4.build83071218.18  installed         5.2 M
psa-libpam-plesk        x86_64     8.3.0-cos4.build83071218.18  installed         155 k
psa-manual-custom-skin-guide  noarch     8.3.0-cos4.build83071218.18  installed         568 k
psa-migration-manager   x86_64     8.3.0-cos4.build83080131.20  installed         7.5 M
psa-mimp                noarch     1.0.2-cos4.build83071218.18  installed         2.0 M
psa-mnemo               noarch     2.1.1-cos4.build83071218.18  installed         3.1 M
psa-passwd              noarch     3.0.1-cos4.build83071218.18  installed         3.2 M
psa-php4-configurator   noarch     1.3.0-cos4.build83071218.18  installed          0.0
psa-turba               noarch     2.1.5-cos4.build83071218.18  installed         5.2 M
psa-updates             noarch     8.3.0-cos4.build83080131.20  installed          0.0

….

etc

En efecto, también se tendrían que eliminar muchos paquetes que Plesk utiliza y al hacer esto, Plesk deja de ir, con lo cual no es una solución. Estamos pues en entorno Centos 4.6. Vamos a intentar recompilar ese php para que pueda funcionar con una extension mssql.

1
<strong># yum -y install rpm-build</strong>

Siguiente paso, descargarse el SRPM (Source RPM) de nuestra versión de php.

1
<strong># cd /usr/local/src/</strong>
1
2
<strong># wget http://mirror.centos.org/centos-4/4.6/os/
SRPMS/php-4.3.9-3.22.9.src.rpm</strong>
1
<strong># rpm -i php-4.3.9-3.22.9.src.rpm</strong>

Esto creará dentro un árbol de directorios en /usr/src/redhat, con los datos que necesitamos. Localizamos el archivo php.spec

1
<strong># locate php.spec</strong>

nos puede salir esta advertencia:

warning: locate: warning: database /var/lib/slocate/slocate.db’ is more than 8 days old

Ejecutamos

1
<strong># updatedb</strong>

y nos mostrará la ruta del php.spec.

/usr/src/redhat/SPECS/php.spec

Con un editor de texto debemos modificar ese archivo.

Añado dentro de php.spec

1
2
3
4
5
6
<strong>%package mssql</strong>
Group: Development/Languages
Requires: php = %{version}-%{release}, php-pdo
Summary: A module for PHP applications that use the MSSQL database.
provides: php_database
BuildRequires: freetds-devel

%description mssql
The MSSQL package contains a dynamic shared object that will add
support for accessing MSSQL databases to php.

y ejecuto

1
<strong># rpmbuild -bb ./php.spec</strong>

Y me sale:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
bzip2-devel se necesita para php-4.3.9-3.22.9.x86_64
curl-devel &gt;= 7.9 se necesita para php-4.3.9-3.22.9.x86_64
gmp-devel se necesita para php-4.3.9-3.22.9.x86_64
aspell-devel &gt;= 0.50.0 se necesita para php-4.3.9-3.22.9.x86_64
libjpeg-devel se necesita para php-4.3.9-3.22.9.x86_64
libpng-devel se necesita para php-4.3.9-3.22.9.x86_64
pam-devel se necesita para php-4.3.9-3.22.9.x86_64
libstdc++-devel se necesita para php-4.3.9-3.22.9.x86_64
gcc-c++ se necesita para php-4.3.9-3.22.9.x86_64
openssl-devel se necesita para php-4.3.9-3.22.9.x86_64
zlib-devel se necesita para php-4.3.9-3.22.9.x86_64
libtool &gt;= 1.4.3 se necesita para php-4.3.9-3.22.9.x86_64
krb5-devel se necesita para php-4.3.9-3.22.9.x86_64
libc-client-devel se necesita para php-4.3.9-3.22.9.x86_64
mysql-devel se necesita para php-4.3.9-3.22.9.x86_64
postgresql-devel se necesita para php-4.3.9-3.22.9.x86_64
unixODBC-devel se necesita para php-4.3.9-3.22.9.x86_64
freetds-devel se necesita para php-4.3.9-3.22.9.x86_64
net-snmp-devel se necesita para php-4.3.9-3.22.9.x86_64
elfutils-devel se necesita para php-4.3.9-3.22.9.x86_64
libxslt-devel &gt;= 1.0.18-1 se necesita para php-4.3.9-3.22.9.x86_64
libxml2-devel &gt;= 2.4.14-1 se necesita para php-4.3.9-3.22.9.x86_64
ncurses-devel se necesita para php-4.3.9-3.22.9.x86_64
freetype-devel se necesita para php-4.3.9-3.22.9.x86_64

Instalamos todo el carro de dependencias que el rpm solicita con Yum. Una vez lo tengamos todo, volvemos a repetir el proceso. Es recomendable detener el Plesk, porque la cpu estará unos minutos compilando. Ocupará un buen rato pues ha de compilar varias cosas y hacer test de error. En mi caso, me devolvió un error bastante raro que apenas si tiene resultados en google con lo cual era casi imposible de reparar. Lo que hice fue ignorarlo y seguir adelante con el tutorial de instalación. Lo siguiente era ejecutar el comando phpize. El error en cuestión:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
make: *** [test] Error 1
+ set +x
&gt;&gt; TEST FAILURE: ../ext/dba/tests/dba_flatfile.diff --
006- Content 2 replaced 2nd time
006+ Content 2 replaced
008- array(3) {
008+ array(4) {
012-   string(27) "Content 2 replaced 2nd time"
012+   string(18) "Content 2 replaced"
013-   ["key5"]=&gt;
013+   ["key4"]=&gt;
014-   string(23) "The last content string"
014+   string(22) "Another Content String"
015- }
015+   ["key5"]=&gt;
016+   string(23) "The last content string"
017+ }
&lt;&lt; ../ext/dba/tests/dba_flatfile.diff result ends.
error: Estado de salida erróneo de /var/tmp/rpm-tmp.5268 (%check)

Como digo, ignoramos este error y seguimos adelante.

1
<strong># cd /usr/src/redhat/BUILD/php-4.3.9-3.22.9/ext/mssql/</strong>
1
<strong># phpize</strong>
1
<strong># ./configure --with-mssql</strong>
1
<strong># make </strong>
1
<strong># make install</strong>

En el proceso de ejecución del configure, recibí otro bonito error. Al parecer, el configure no encontraba el path de instalación del freetds. Si recuerdas, lo hemos instalado en /usr/local/freetds. Antes de poder instalarlo bien, me maté varias veces a probar de instalar el freetds. Pero al ejecutar el ./configure, siempre el mismo error:

1
error: Cannot find FreeTDS in known installation directories

Con un editor de texto editamos el configure. Buscamos por “FreeTDS”, una línea con lo siguiente:

1
FREETDS_INSTALLATION_DIR=""

Modificamos ese valor por el path actual donde sabemos está instalado FreeTDS. Volvemos a ejecutar el configure. Aparecerá otro error, relativo a una libreria.

1
configure: error: Could not find /usr/local/freetds/lib/libtds.a

Copiamos la librería a donde toca

1
2
3
4
<strong># -bash-3.00# find / -name "libtds.a"
# /root/freetds-0.82/src/tds/.libs/libtds.a
# /usr/lib64/libtds.a
# -bash-3.00# cp /usr/lib64/libtds.a /usr/local/freetds/lib/</strong>

y compilamos

1
2
<strong># make
# make install</strong>

El paso final es simplemente, copiar la mssql.so (que se encuentra en el directorio /usr/lib64/php4/) al directorio correspondiente y añadir la extensión en el php.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
extension_dir = /usr/lib64/php4
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
;
; If you wish to have an extension loaded automatically, use the following
; syntax:
;
;   extension=modulename.extension
;
; For example:
;
;   extension=msql.so
;
; Note that it should be the name of the module only; no directory information
; needs to go here.  Specify the location of the extension with the
; extension_dir directive above.
extension=mssql.so

Resultado final

Después de rebotar apache, debemos tener Plesk funcionando con php y soporte mssql. Al hacer un phpinfo debermos ver esto:

mssql php

Fuentes:

http://www.brassy.net/2007/apr/using_mssql_php_centos_4_4

http://thim.trinix.be/2007/06/06/centos-5-install-php-mssql-module-extension/

http://www.electrictoolbox.com/install-php-mssql-centos-5/

http://www.howtoforge.com/installing_php_mssql_centos5.0

Links:

http://mirror.centos.org/centos-4/4/os/SRPMS/

http://dag.wieers.com/rpm/packages/freetds/

Leave a Reply

Click here to cancel reply.

Nube de Tags

apache bare metal benchmark cacti centos dell drupal esxi General gripe A Hardware humor IIS kayako Linux lpi lyric Lyrics memcached mysql nginx openfiler OpenVZ openx Parallels php Phpbb plesk postgresql proftpd raid SQL Server ssh svn trac ubuntu varnish Virtualizacion Virtuozzo Virtuozzo Linux Warphammer.net Windows windows 2003 wordpress zabbix

Categorias

  • 2003 Server
  • Apache 2.X
  • benchmark
  • Centos
  • Cuanto (Luser) Cabron
  • ESXi
  • General
  • Hardware
  • IIS
  • Lighttpd
  • Linux
  • Lyrics
  • MySql
  • Nginx
  • OpenVZ
  • Parallels
  • Parallels Bare Metal
  • Php
  • Phpbb
  • Plesk
  • PostgreSQL
  • Prestashop
  • Software
  • SQL SERVER
  • Ubuntu
  • Varnish
  • Virtualizacion
  • Virtuozzo
  • Virtuozzo Windows
  • VMWare
  • Warphammer.net
  • Windows
  • Wordpress

Blogroll

  • David Toribio
  • EasyCompany.es
  • Marius Duch
  • Series
  • Warphammer.net

Recursos

  • Backup Plesk9
  • CentOS 5 32 bits RPMs
  • CentOS 5 64 bits RPMs
  • Lighttpd
  • MySQL Tunner
  • OpenVZ – Panel – PROXMOX
  • OpenVZ – Panel – VTONF
  • OpenVZ Wiki
  • Parallels Virtual Automation Resources
  • Plesk 8 Docs
  • Plesk 9 Docs
  • Plesk Hacker
  • Port80 – Compression Check
  • Virtuozzo DOCS
  • Virtuozzo Lin Commands
  • Virtuozzo Win Commands
  • Virtuozzo Windows Docu

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
Designed by Elegant Themes | Powered by Wordpress