• Apache模块开发


    Apache模块开发/用C语言扩展apache(3:一个非常简单的apache module)

    有了上面几篇文章的基础,大家自己再下点功夫,应该可以去写一些简单的模块了,
    下面贴出一个很简单的apache module,大家一起分析一下。
         $ cd /usr/local/apache2.2.4
         $ vi mod_c.c
    #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
    ",r->handler);
            ap_rprintf(r,"query string:%s
    ",r->args);
            ap_rprintf(r,"filename:%s
    ",r->filename);
            return OK;
    }
    static void register_hooks(apr_pool_t *p)
    {
            ap_hook_handler(c_handler, NULL, NULL, APR_HOOK_MIDDLE);
    }
    
    /* module structure */
    AP_MODULE_DECLARE_DATA module 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中访问http://myhostname/index.html query=yy
          IE中会出现:
    handler:text/html
    query string:query=yy
    filename:/usr/local/apache2.2.4/htdocs/index.html
          说明该module运行成功。
        
          把上面的module简单解释一下。
        
          所有的apache module都必须是这个结构体,里面要定义各个内容。
    /* 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 */
         //上面4项都是定义httpd.conf中命令的作用的
         NULL,       /* command apr_table_t */ //定义在httpd.conf中添加的命令,和各命令的处理函数
         register_hooks     /* register hooks */       //hooks,定义什么时候执行我们这个module的相关函数
    };

         ap_hook_handler(c_handler, NULL, NULL, APR_HOOK_MIDDLE);
         表示在处理内容请求时调用我们函数–c_handler

  • 相关阅读:
    7-[CSS]-css介绍,引入方式
    6-[HTML]-标签属性
    5-[HTML]-body常用标签2
    4-[HTML]-body常用标签1
    3-[HTML]-head标签介绍
    2-[HTML]--介绍
    1-[前端]--前端内容介绍
    35
    33 -jQuery 属性操作,文档操作(未完成)
    1o xiaomi
  • 原文地址:https://www.cnblogs.com/wzf365/p/3745797.html
Copyright © 2020-2023  润新知