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\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 */
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

转载于:https://www.cnblogs.com/wzf365/p/3745797.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文看尽2018全年AI技术大突破

来源:量子位摘要:2018,仍是AI领域激动人心的一年。这一年成为NLP研究的分水岭,各种突破接连不断;CV领域同样精彩纷呈,与四年前相比GAN生成的假脸逼真到让人不敢相信;新工具、新框架的出现&#…

pyecharts地图使用

1.首先安装包 pip install pyecharts0.5.1 2.安装地图包 依次是全球地图、中国省级地图、中国市级地图、中国区县级地图、中国区域地图 pip install echarts-countries-pypkg pip install echarts-china-provinces-pypkg pip install echarts-china-cities-pypkg …

《科学》:基因编辑婴儿入选年度“科学崩坏”事件

来源:知识分子摘要:《科学》杂志每年会评出在即将过去的一年里最为重要的十大科学突破(Science Breakthrough)。今年,夺得年度突破桂冠的是“单细胞水平细胞谱系追踪技术”,帮助破获多起悬案的法医系谱技术…

利用scipy包计算表格线的峰值,还原表格得到表格结构

1. 利用scipy包计算表格线的峰值 import cv2 import numpy as np from scipy.signal import find_peaks, peak_widthsdef get_lines_from_image(img_bin, axis, kernel_len_div 20, kernel_len None, iters 3):""":param img_bin: opencv img:param axis: 0…

在落雨的鼓浪屿打着伞到处走走找个地方坐坐

啊啊啊,忘却的神随时会降临,快点记点什么吧 本人现在正坐在时光漫步酒吧 无视对面同行的一对情侣 准备写下此次旅行第一篇流水账 ---------------------------华丽丽的分割线------------------------------ 晚点的航班,晚点的火车 我打电话告…

原子智库 | 刘伟:人工智能快追上人类思维?答案可能让你失望

来源:原子智库摘要:2018年12月15日,原子智库主办的“改革的规则与创新——2018光华腾讯经济年会暨风云演讲”在北京大学举办北京邮电大学人机交互与认知工程实验室主任刘伟发表演讲。演讲的话题是未来工业化发展、智能化发展。刘伟在演讲中指…

冲刺阶段(二)第五天 5月16日

昨天:在软件工程课上通过老师的英明指点,对本软件的设计有了一些新的想法和改进,并设计好了详细的改进思路。 今天:通过对Android通讯录视频的学习,掌握了其中的显示图像选择框(1、2、3、4)以及…

利用xlwt写excel并进行单元格的合并

1.写入行列值 import xlwt # 创建一个workbook 设置编码 workbook xlwt.Workbook(encodingutf-8) # 创建一个worksheet worksheet workbook.add_sheet(My Worksheet)# 写入excel # 参数对应 行, 列, 值 worksheet.write(1, 0, label this is test)# 保存 workbook.save(Exc…

为了边缘计算,亚马逊、谷歌、微软已正面交锋!

来源:全球物联网观察摘要:so,你真的了解边缘计算吗?边缘计算的前世今生云计算自2005年提出之后,就开始逐步地改变我们的生活、学习、工作的方式。云计算使得公司能够在自己的物理硬件之外,通过远程服务器网…

pdf与图片互相转换

1.pdf转图片 import os import numpy as np import cv2 from PIL import Image Image.MAX_IMAGE_PIXELSNone import tempfile import time import sys from pdf2image import convert_from_bytes# # 预处理程序 # sys.path.append("./data_prepare") # from data_pr…

每日一小练——二项式系数加法解

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:二项式系数加法解 内容:请编写一个程序,仅仅用加法,求出n中取r个组合系数C(n,r),…

华为、苹果、高通,谁在领跑?全面解读清华AI芯片报告

来源:智东西摘要:本文全面讲解人工智能芯片,系统梳理人工智能芯片的发展现状及趋势。2010 年以来,由于大数据产业的发展,数据量呈现爆炸性增长态势,而传统的计算架构又无法支撑深度学习的大规模并行计算需求…

SSD300网络结构(pytorch)+多尺度训练与测试

一.SSD300 1.如图是预测框的相应feature map 这里smin是0.2,表示最底层的scale是0.2;smax是0.9,表示最高层的scale是0.9,m代表产生尺度预测的feature map个数。 其中anchor的长宽关系,s就是上图中的scale,a就是上图中的anchor …

01-08-02【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider...

第一步骤&#xff1a;hibernate.cfg.xml文件补上如下配置&#xff1a; <?xml version"1.0" encoding"utf-8"?> <!-- This template was written to work with NHibernate.Test. Copy the template to your NHibernate.Test project folder and…

2018, 自动驾驶异常艰难的一年

编译&#xff1a;张玺 &#xff0c;编辑&#xff1a;宇多田摘要&#xff1a;虽然文章几乎聚焦于美国硅谷的技术公司&#xff0c;但这并不意味着作者提出的种种问题不存在于中国的技术公司身上。有意思的是&#xff0c;作者批评了各大公司此前疯狂立 flag&#xff0c;却最后纷纷…

目标检测矩形框与polygon数据增加--裁剪,拓展,旋转

1.裁剪 import torch from torchvision import transforms import cv2 import numpy as np import types from numpy import random class RandomSampleCrop(object):"""CropArguments:img (Image): the image being input during trainingboxes (Tensor): th…

递归判断一个数是否递增

#include<iostream>using namespace std;//是否单调递增bool isdan(int a[],int lev,int len){ if(len1) return true; if(levlen-1) { return true; } else { if(a[lev]>a[lev1]) return false; else return isdan(a,lev1,len…

医生们说,AI不会取代我们!

来源&#xff1a;IEEE电气电子工程师学会每次人工智能在医疗任务中与医生进行竞争&#xff08;对此我们已经报道过很多次&#xff09;时&#xff0c;一个问题不可避免地浮出水面&#xff1a;人工智能会取代医生吗&#xff1f;如果你与AI 专家或硅谷投资者交谈&#xff0c;答案往…

ubuntu安装python3.5+pycharm+anaconda+opencv+docker+nvidia-docker+tensorflow+pytorch+Cmake3.8

一&#xff0c;切换python版本为3.5 装好ubuntu&#xff0c;python版本是2.7的 我自己安装并更改打开为python3.5 sudo apt-get install python3.5 设置优先级和默认环境&#xff1a; sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 su…

学界 | 量化深度强化学习算法的泛化能力

来源&#xff1a;AI 科技评论OpenAI 近期发布了一个新的训练环境 CoinRun&#xff0c;它提供了一个度量智能体将其学习经验活学活用到新情况的能力指标&#xff0c;而且还可以解决一项长期存在于强化学习中的疑难问题——即使是广受赞誉的强化算法在训练过程中也总是没有运用监…