Apache模块开发/用C语言扩展apache(3:一个非常简单的apache module)
by linux_prog
有了上面几篇文章的基础,大家自己再下点功夫,应该可以去写一些简单的模块了,
下面贴出一个很简单的apache module,大家一起分析一下。
$ cd /usr/local/apache2.2.4
$ vi mod_c.c
# include
< time . h>
# include
< stdlib. h>
# include
"apr.h"
# include
"apr_lib.h"
# include
"apr_strings.h"
# define APR_WANT_STRFUNC
# include
"apr_want.h"
# include
"httpd.h"
# include
"http_config.h"
# include
"http_core.h"
# include
"http_request.h"
module AP_MODULE_DECLARE_DATA c_module;
static int c_handler( request_rec
* r)
{
r- > content_type= "text/plain" ;
ap_rprintf( r, "handler:%s\n" , r- > handler) ;
ap_rprintf( r, "query string:%s\n" , r- > args) ;
ap_rprintf( r, "filename:%s\n" , r- > filename) ;
return OK;
}
static void register_hooks( apr_pool_t
* p)
{
ap_hook_handler( c_handler,
NULL ,
NULL , APR_HOOK_MIDDLE) ;
}
/* module structure */
module AP_MODULE_DECLARE_DATA c_module =
{
STANDARD20_MODULE_STUFF,
NULL ,
/* dir config creater */
NULL ,
/* dir merger — default is to override */
NULL ,
/* server config */
NULL ,
/* merge server configs */
NULL ,
/* command apr_table_t */
register_hooks /* register hooks */
} ;
编译并安装这个模块(apache提供的apxs非常好):
$ ./bin/apxs -c ./mod_c.c
$ ./bin/apxs -a -i -n c mod_c.la
这时apxs会自动帮我们把编译好的mod_c.so安装到modules/目录中,而且httpd.conf中已经把这个module load进去了:
[root@cn-weblog apache2.2.4]# grep mod_c conf/httpd.conf
LoadModule c_module modules/mod_c.so
测试这个模块:
$ ./bin/apachectl stop
$ ./bin/apachectl start
在IE中访问
ap_hook_handler(c_handler, NULL, NULL, APR_HOOK_MIDDLE);
表示在处理内容请求时调用我们函数–c_handler