Ahora me toca ver como crear el modulo para accesar a Firebird en Linux con PHP, por default este modulo no viene en la instalacion generica o sea que no podemos instalar php-firebird o php-interbase.
En mi caso estamos trabajando con una maquina virtual, por lo tanto mi politica es que los servidores de produccion solo debe tener lo que necesita nada mas nada menos.
La version de Centos esta algo atrasada, por ello yo uso la version de ius-repo, en este momento estoy con la version 5.3.14.
Para ello yo tengo una vm con Xen que uso para compilar paquetes si llegara a tener que hacerlo como este caso, la version es para 64 bits.
Antes de yo llegar a compilar los modulos debo asegurar que el sistema de compilacion tenga lo necesario para llevar a cabo esto, asi que para firebird necesito esto:
firebird-libfbclient.i386
firebird-libfbclient.x86_64
firebird-libfbembed.x86_64
firebird-libfbclient.x86_64
firebird-libfbembed.x86_64
firebird-devel.i386
firebird-devel.x86_64
firebird-filesystem.x86_64
firebird-devel.x86_64
firebird-filesystem.x86_64
Para php:
php53u.x86_64
php53u-cli.x86_64
php53u-common.x86_64
php53u-devel.x86_64
php53u-cli.x86_64
php53u-common.x86_64
php53u-devel.x86_64
Para compilacion y rpms:
rpm-build
gcc.x86_64
gcc-c++.x86_64
libgcc.i386
libgcc.x86_64
gcc-c++.x86_64
libgcc.i386
libgcc.x86_64
Necesito MySQL tambien ya que hay cierta prioridad de ejecucion:
mysql51.x86_64
mysql51-devel.x86_64
mysql51-libs.x86_64
mysql51-server.x86_64
mysqlclient15.x86_64
mysqlclient15-devel.x86_64
mysql51-devel.x86_64
mysql51-libs.x86_64
mysql51-server.x86_64
mysqlclient15.x86_64
mysqlclient15-devel.x86_64
Para probar:
httpd
Creo que es todo, lo que sigue es bajar el codigo fuente de la version que deseamos la cual la podemos obtener del mismo sitio de ius-repo:
Yo tengo un folder en el root donde almaceno todo los codigos fuente de mis repos:
/root/rpm/
Una vez obtenido el repo debemos instalarlo ya que viene en formato rpm, para esto hacemos lo siguiente:
rpm -ivh php53u-5.3.14-1.ius.el5.src.rpm
De ahi se instala el codigo fuente en:
/usr/src/redhat/SOURCES/
Ahi dentro tenemos esto:
-rw-rw-r-- 1 root root 159 May 9 2011 macros.php
-rw-rw-r-- 1 root root 650 May 9 2011 php-4.3.11-shutdown.patch
-rw-rw-r-- 1 root root 818 May 9 2011 php-5.0.4-dlopen.patch
-rw-rw-r-- 1 root root 905 May 9 2011 php-5.0.4-tests-wddx.patch
-rw-rw-r-- 1 root root 416 May 9 2011 php-5.2.0-includedir.patch
-rw-rw-r-- 1 root root 607 May 9 2011 php-5.2.4-embed.patch
-rw-rw-r-- 1 root root 682 May 9 2011 php-5.2.4-norpath.patch
-rw-rw-r-- 1 root root 34930 May 9 2011 php-5.3.0-easter.patch
-rw-rw-r-- 1 root root 637 May 9 2011 php-5.3.0-install.patch
-rw-rw-r-- 1 root root 759 May 9 2011 php-5.3.0-oci8-lib64.patch
-rw-rw-r-- 1 root root 937 May 9 2011 php-5.3.0-phpize64.patch
-rw-rw-r-- 1 root root 727 May 9 2011 php-5.3.0-recode.patch
-rw-rw-rw- 1 root root 7144 Jun 21 15:18 php-5.3.14-aconf259.patch
-rw-rw-rw- 1 root root 14924167 Jun 14 09:10 php-5.3.14.tar.gz
-rw-rw-r-- 1 root root 16390 May 9 2011 php-5.3.1-systzdata-v7.patch
-rw-rw-r-- 1 root root 4409 May 9 2011 php-5.3.3-gnusrc.patch
-rw-rw-r-- 1 root root 2114 May 9 2011 php-5.3.3-macropen.patch
-rw-rw-r-- 1 root root 69399 May 9 2011 php53-ius.ini
-rw-rw-r-- 1 root root 675 May 9 2011 php.conf
-rw-rw-r-- 1 root root 1697 May 9 2011 php-fpm.conf
-rw-rw-r-- 1 root root 1424 May 9 2011 php-fpm.init
-rw-rw-r-- 1 root root 210 May 9 2011 php-fpm.logrotate
-rw-rw-r-- 1 root root 9484 May 9 2011 php-fpm-www.conf
-rw-rw-r-- 1 root root 650 May 9 2011 php-4.3.11-shutdown.patch
-rw-rw-r-- 1 root root 818 May 9 2011 php-5.0.4-dlopen.patch
-rw-rw-r-- 1 root root 905 May 9 2011 php-5.0.4-tests-wddx.patch
-rw-rw-r-- 1 root root 416 May 9 2011 php-5.2.0-includedir.patch
-rw-rw-r-- 1 root root 607 May 9 2011 php-5.2.4-embed.patch
-rw-rw-r-- 1 root root 682 May 9 2011 php-5.2.4-norpath.patch
-rw-rw-r-- 1 root root 34930 May 9 2011 php-5.3.0-easter.patch
-rw-rw-r-- 1 root root 637 May 9 2011 php-5.3.0-install.patch
-rw-rw-r-- 1 root root 759 May 9 2011 php-5.3.0-oci8-lib64.patch
-rw-rw-r-- 1 root root 937 May 9 2011 php-5.3.0-phpize64.patch
-rw-rw-r-- 1 root root 727 May 9 2011 php-5.3.0-recode.patch
-rw-rw-rw- 1 root root 7144 Jun 21 15:18 php-5.3.14-aconf259.patch
-rw-rw-rw- 1 root root 14924167 Jun 14 09:10 php-5.3.14.tar.gz
-rw-rw-r-- 1 root root 16390 May 9 2011 php-5.3.1-systzdata-v7.patch
-rw-rw-r-- 1 root root 4409 May 9 2011 php-5.3.3-gnusrc.patch
-rw-rw-r-- 1 root root 2114 May 9 2011 php-5.3.3-macropen.patch
-rw-rw-r-- 1 root root 69399 May 9 2011 php53-ius.ini
-rw-rw-r-- 1 root root 675 May 9 2011 php.conf
-rw-rw-r-- 1 root root 1697 May 9 2011 php-fpm.conf
-rw-rw-r-- 1 root root 1424 May 9 2011 php-fpm.init
-rw-rw-r-- 1 root root 210 May 9 2011 php-fpm.logrotate
-rw-rw-r-- 1 root root 9484 May 9 2011 php-fpm-www.conf
Ahora viene desempacar el codigo fuente:
tar -xzf php-5.3.14.tar.gz
Ya tenemos le folder nos adentramos ahi:
cd php-5.3.14
Los modulos estan en el folder "ext":
cd ext
Tenemos lo siguiente:
bcmath ext_skel intl openssl phar sockets xml
bz2 ext_skel_win32.php json pcntl posix spl xmlreader
calendar fileinfo ldap pcre pspell sqlite xmlrpc
com_dotnet filter libxml pdo readline sqlite3 xmlwriter
ctype ftp mbstring pdo_dblib recode standard xsl
curl gd mcrypt pdo_firebird reflection sybase_ct zip
date gettext mssql pdo_mysql session sysvmsg zlib
dba gmp mysql pdo_oci shmop sysvsem
dom hash mysqli pdo_odbc simplexml sysvshm
enchant iconv mysqlnd pdo_pgsql skeleton tidy
ereg imap oci8 pdo_sqlite snmp tokenizer
exif interbase odbc pgsql soap wddx
bz2 ext_skel_win32.php json pcntl posix spl xmlreader
calendar fileinfo ldap pcre pspell sqlite xmlrpc
com_dotnet filter libxml pdo readline sqlite3 xmlwriter
ctype ftp mbstring pdo_dblib recode standard xsl
curl gd mcrypt pdo_firebird reflection sybase_ct zip
date gettext mssql pdo_mysql session sysvmsg zlib
dba gmp mysql pdo_oci shmop sysvsem
dom hash mysqli pdo_odbc simplexml sysvshm
enchant iconv mysqlnd pdo_pgsql skeleton tidy
ereg imap oci8 pdo_sqlite snmp tokenizer
exif interbase odbc pgsql soap wddx
En mi caso mi interesa firebird, nos metemos a ese folder:
cd pdo_firebird
Empieza la fiesta, ejecutamos el comando phpize:
phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
De ahi configure:
./configure (sale un choricero...)
checking for egrep... grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... cc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether cc accepts -g... yes
checking for cc option to accept ANSI C... none needed
checking how to run the C preprocessor... cc -E
...
checking for a sed that does not truncate output... /bin/sed
checking for cc... cc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether cc accepts -g... yes
checking for cc option to accept ANSI C... none needed
checking how to run the C preprocessor... cc -E
...
configure: creating libtool
appending configuration tag "CXX" to libtool
appending configuration tag "F77" to libtool
configure: creating ./config.status
config.status: creating config.h
config.status: config.h is unchanged
appending configuration tag "CXX" to libtool
appending configuration tag "F77" to libtool
configure: creating ./config.status
config.status: creating config.h
config.status: config.h is unchanged
Por ultimo make:
make
/bin/sh /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/libtool --mode=compile cc -I/usr/include/php/ext -I. -I/usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird -DPHP_ATOM_INC -I/usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/include -I/usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/main -I/usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/pdo_firebird.c -o pdo_firebird.lo
mkdir .libs
mkdir .libs
...
cp ./.libs/pdo_firebird.so /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/modules/pdo_firebird.so
cp ./.libs/pdo_firebird.lai /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/modules/pdo_firebird.la
PATH="$PATH:/sbin" ldconfig -n /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/modules
----------------------------------------------------------------------
Libraries have been installed in:
/usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/modules
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
Build complete.
Don't forget to run 'make test'.
cp ./.libs/pdo_firebird.lai /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/modules/pdo_firebird.la
PATH="$PATH:/sbin" ldconfig -n /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/modules
----------------------------------------------------------------------
Libraries have been installed in:
/usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/modules
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
Build complete.
Don't forget to run 'make test'.
Listo, nuestro modulo esta en el folder modules:
ls modules/
pdo_firebird.la pdo_firebird.so
pdo_firebird.la pdo_firebird.so
Todos los modulos que queramos debemos guardarlos en mi caso como es una equipo de 64 bits, van en:
/usr/lib64/php/modules/
Ahi lo copeamos:
cp modules/pdo_firebird.so /usr/lib64/php/modules/
Ahora como estamos compilando modulos y no estamos usando el ya compilado php-firebird, debemos decirle a php que cargue los modulos generados, para ello debemos abrir el archivo php.ini y agregarlos, al abrir el archivo existe una seccion para esto, +/- en la linea 810 agregamos esto debajo del parametro:
user_dir =
Esto:
;Modulos Personales
extension=pdo_firebird.so
extension=pdo_firebird.so
Salvamos el archivo.
extension=pdo.so
extension=interbase.so
extension=pdo_firebird.so
extension=pdo_mysql.so
extension=mysql.so
extension=mysqli.so
Compilo uno a uno, cuando lleguen a el modulo mysql, deben ejecutar el configure asi:
./configure --with-libdir=lib64
Llevamos todo lo compilado a el folder:
/usr/lib64/php/modules/
Ahora si, todo en su lugar reiniciamos apache:
service httpd restart
Revisamos el log de error de apache para ver si no hay problemas:
[Thu Jun 28 01:10:29 2012] [notice] caught SIGTERM, shutting down
[Thu Jun 28 01:10:29 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Thu Jun 28 01:10:29 2012] [notice] Digest: generating secret for digest authentication ...
[Thu Jun 28 01:10:29 2012] [notice] Digest: done
[Thu Jun 28 01:10:29 2012] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
[Thu Jun 28 01:10:29 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Thu Jun 28 01:10:29 2012] [notice] Digest: generating secret for digest authentication ...
[Thu Jun 28 01:10:29 2012] [notice] Digest: done
[Thu Jun 28 01:10:29 2012] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
No veo nada, entonces ahora viene ejecutar el comando phpinfo() en un archivo php:
phpinfo();
?>
Lo ejecutamos en el navegador y checan si todos los modulos aparecen, en mi casi si.
Listo hemos terminado.
Solo les debo recordar que segun los modulos que necesiten deben instalar las librerias que requieran sus paquetes y lo mismo sucede en los servidores de produccion donde los vayan a ejecutar.
Por ejemplo mi servidor tiene estos paquetes:
php53u.x86_64
php53u-cli.x86_64
php53u-common.x86_64
php53u-ldap.x86_64
php53u-mbstring.x86_64
php53u-mcrypt.x86_64
mysql51.x86_64
mysql51-libs.x86_64
mysql51-server.x86_64
mysqlclient15.x86_64
firebird.x86_64
firebird-classic.x86_64
firebird-filesystem.x86_64
firebird-libfbclient.i386
firebird-libfbclient.x86_64
firebird-libfbembed.x86_64
firebird-libfbclient.i386
firebird-libfbclient.x86_64
firebird-libfbembed.x86_64
Por ejemplo mi servidor tiene estos paquetes:
php53u.x86_64
php53u-cli.x86_64
php53u-common.x86_64
php53u-ldap.x86_64
php53u-mbstring.x86_64
php53u-mcrypt.x86_64
mysql51.x86_64
mysql51-libs.x86_64
mysql51-server.x86_64
mysqlclient15.x86_64
firebird.x86_64
firebird-classic.x86_64
firebird-filesystem.x86_64
firebird-libfbclient.i386
firebird-libfbclient.x86_64
firebird-libfbembed.x86_64
firebird-libfbclient.i386
firebird-libfbclient.x86_64
firebird-libfbembed.x86_64
Saludos!!!
2 comentarios:
Hola estoy utilizando su artículo para hacer funcionar pdo_firebird, sin embargo no genera módulo alguno, lo último que genera el log es
Generating phar.php
Generating phar.phar
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
directorytreeiterator.inc
directorygraphiterator.inc
clicommand.inc
invertedregexiterator.inc
pharcommand.inc
phar.inc
Build complete.
Don't forget to run 'make test'.
según esto, hay algún problema con PEAR ?, como solucionarlo. Le agradezco su ayuda ya he mirado bastante y no he podido resolverlo, tampoco es que aparezca mucha ayuda al respecto. Saludos y nuevamente gracias . Jorge Cifuentes
Que pena, no escribí dato alguno del sistema
Es Centos 6.6
Php 5.3.3
Apache 2
Publicar un comentario