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