Extendiendo PHP (I)

Aunque la inmensa mayoría de las necesidades que plantea la programación en PHP se pueden resolver directamente con este lenguaje podemos encontrarnos con alguna necesidad muy especifica que nos obligue a extender las capacidades de PHP bien para agregar una nueva funcionalidad o bien para obtener un mayor rendimiento en determinadas partes del código.

Cualquiera que sea al necesidad también puede ser resuelta a través de PHP, creando una extensión. Empleando las herramientas proporcionadas por los desarrolladores de PHP y haciendo uso de su API en C podemos obtener lo que nos propongamos.

Existen dos tipos de extensiones: extensiones PHP y extensiones Zend. Las primeras proporcionan funciones o clases adicionales para el lenguaje (por ejemplo: GD, Ming etc) y las segundas son extensiones de bajo nivel que modifican el núcleo del lenguaje, como por ejemplo en los sistemas se cache por códigos de operación (APC, XCache, etc).

Para desarrollar una extensión en PHP necesitas una copia de código fuente de PHP y las herramientas de desarrollo para la programación en C. Lo primero lo puedes conseguir en www.php.net y lo segundo puede llegar en principio con gcc y gdb, compilador y depurador de GNU.

Otras herramientas necesarias, que tal vez ya tenga instalado tu sistema es

* autoconf: 2.13
* automake: 1.4+
* libtool: 1.4.x+ (except 1.4.2)
* bison: 1.28, 1.35, 1.75, 2.0 or higher
* flex: 2.5.4 (not higher)
* re2c: 0.9.11+ (0.12.0+ for HEAD)

Puedes emplear «apt-get install» para instalar todos estos paquetes si empleas distribuciones tipo debian.

Si no cumples casi ninguna de estos requerimientos te recomiendo que instales linux en tu máquina o cualquier otro sistema tipo UNIX. Y si no tienes ni la más remota idea de lo que estamos hablando deja de leer y sigue bajándote torrents de tus mp3s favoritos.

En el momento de escribir este artículo la última versión estable de PHP era la 5.2.9, quizás cuando leas estas líneas te parezca una versión anticuada pero esta noche es lo más reciente de PHP. Por supuesto la mejor forma de obtener el código más actualizado (y menos probado) es a través del repositorio público de PHP en http://cvs.php.net/.

Una vez que tengas el código de PHP lo mejor es que te familiarices mínimamente con su estructura y documentación. Lo segundo es preparar PHP en línea de comandos (CLI) para poder probar y depurar tu código rápidamente. Entra en el directorio de fuentes y ejecuta:

$ ./configure
$ make
# make install (como root)

Esto creará un binario ejecutable de php en /usr/local/bin. Si quieres tener disponible alguna extensión en este binario debes especificarlo al ejecutar configura pasándole la extensión que quieres tener como parámetro adicional; por ejemplo: –with-mysql=/usr –with-psgl –with-zlib para habilitar soporte para mysql, postgreSQL y zlib en el binario.

puedes verificar que todo ha ido bien ejecutando

$ php -v

Para generar el esqueleto de nuestra extensión debemos crear un fichero .def que defina la función que queremos agregar a nuestro php. Para continuar definamos la función que llamaremos dummy y que tendrá esta firma

string dummy(string $message,bool $inversion);

La función devolverá el mismo mensaje que se le envía como primer parámetro si el segundo parámetro es false y retornará la cadena invertida, con los caracteres en orden opuesto, si el segundo parámetro es true.

Nuestro fichero dummy.def podría contener lo siguiente

string dummy(string msg, bool invert) Devuelve la misma cadena enviada en orden normal o invertido

para generar el esqueleto de esta extensión debemos ejecutar lo siguiente si nos encontramos en la raíz del código fuente de php descargado

$ cd ext
$ vi dummy.def
(editamos el contenido del fichero)
$ ./ext_skel –extname=dummy –proto=dummy.def

El comando habrá creado un directorio dummy dentro de ext con los ficheros iniciales básicos para el funcionamiento de tu extensión, también te aparecerá un pequeño conjunto de instrucciones para compilar el código de tu extensión junto con php. Sin embargo ejecuta paso por paso estas instrucciones y ya tendrás tu primera extensión creada

$ cd .. (o ir a la raíz del código fuente de php descargado)
$ ./buildconf –force
$ ./configure –with-dummy
$ make

Para probarlo puedes ejecutar

$ ./sapi/cli/php -f ext/dummy/dummy.php

En la siguiente entrega entraremos en detalle de lo que acabamos de hacer y crearemos el código real para nuestra aplicación.

Ah! felicidades por haber creado tu primera extensión para PHP 😉

Puedes ver la segunda parte de este artículo aquí: Extendiendo PHP (II)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *