Sin embargo, como prometí, hoy voy a explicar cómo escribir, instalar y probar un módulo de Apache elemental. Así que si a alguien le apasiona el argumento, con esta base (¡que funciona!), podrá divertirse en escribir otros más complejos en la cara de aquellos que dicen "C no sirve para el desarrollo Web".
Nuestro modulo básico lo llamaremos, por ejemplo, myapmod. Vamos a empezar con el código, por supuesto:
#include <httpd.h> #include <http_protocol.h> #include <http_config.h> // handler del modulo static int myapmodHandler( request_rec *reqrec) { // test handler if (! reqrec->handler || strcmp(reqrec->handler, "myapmod")) return DECLINED; // test metodo http if (reqrec->method_number != M_GET) return HTTP_METHOD_NOT_ALLOWED; // html output ap_set_content_type(reqrec, "text/html;charset=ascii"); ap_rputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n", reqrec); ap_rputs("<html>", reqrec); ap_rputs("<head>", reqrec); ap_rputs("<title>Modulo Apache Elementare</title>", reqrec); ap_rputs("</head>", reqrec); ap_rputs("<body>", reqrec); ap_rputs("<h1>myapmod: il mio Modulo Apache elementare</h1>", reqrec); ap_rputs("</body>", reqrec); ap_rputs("</html>", reqrec); // salgo con OK return OK; } // register hooks del modulo static void myapmodHooks( apr_pool_t *pool) { // set hook handler ap_hook_handler(myapmodHandler, NULL, NULL, APR_HOOK_MIDDLE); } // estructura global del modulo module AP_MODULE_DECLARE_DATA myapmod_module = { STANDARD20_MODULE_STUFF, NULL, NULL, NULL, NULL, NULL, myapmodHooks };¿Sencillo no? Y he añadido los oportunos comentarios en el código (un poco concisos, debo admitir), así que ni siquiera tengo que explicar cómo funciona. Y, como podréis ver cuando lo uséis por primera vez, el código HTML contenido en este documento se muestra correctamente por el navegador (ohhh... milagro).
Ahora pasamos a la compilación e instalación. Para mayor comodidad y gusto personal propongo una guía para Linux, pero os aseguro que el módulo básico se puede hacer también (si de verdad queréis sufrir) en Windows.
El requisito previo es, por supuesto, tener Apache instalado en el sistema. Buscad, con nuestro amigo Google, una de las millones de guías para convertir tu ordenador en un servidor LAMP (o WAMP) (no voy a describir el procedimiento para no alargar demasiado el discurso, pero, os lo garantizo, es bastante simple). Una vez instalado el servidor Apache hay que asegurarse de que el sistema también está preparado para compilar módulos de Apache: debe estar disponible el paquete apache2-prefork-dev, así que, para verificarlo, ejecutad:
dpkg -l | grep apache2Y, si en la lista de paquetes que se muestra allí no está el paquete indicado, instaladlo con:
sudo apt-get install apache2-prefork-devY ahora, por fin, podemos compilar e instalar con:
sudo apxs2 -c mod_myapmod.c sudo apxs2 -i mod_myapmod.laLuego, necesitamos crear y editar dos archivos nuevos en el directory /etc/apache2/mods-available. Creamos/abrimos el primero con:
sudo gedit /etc/apache2/mods-available/myapmod.loady dentro escribimos:
LoadModule myapmod_module /usr/lib/apache2/modules/mod_myapmod.soA continuación, creamos/abrimos el segundo con:
sudo gedit /etc/apache2/mods-available/myapmod.confy dentro escribimos:
<Location /myapmod> SetHandler myapmod </Location>A este punto no nos queda nada más que habilitar nuestro nuevo módulo y reiniciar el servidor Apache (lo que hará que arranquen todos los módulos habilitados, incluido nuestro myapmod):
sudo a2enmod myapmod sudo /etc/init.d/apache2 restartSi todo se hace correctamente, navegando con un browser a la URL http://localhost/myapmod se mostrará el código HTML insertado en nuestro módulo. Y si no funciona, entonces probad todos los pasos desde el principio, asegurándoos de que no os habéis perdido algunos errores reportados por el sistema. Buena suerte... (Yo, por supuesto, he probado todo el procedimiento antes de publicar el post, y estoy seguro de que funciona).
Es evidente que con este post no pretendo reinventar la rueda, ya que, si buscais en Google cómo construir un módulo elemental de Apache, vais a descubrir que muchos otros han publicado mucho antes que yo guías similares. ¿Pero queréis compararlo con leer la misma cosa escrita por vuestro C-blogger favorito?
Hasta el próximo post.