APACHE模块碰到的若干问题

双刃剑客 2010-12-15 12:25:20
在写APACHE模块时,主要碰到三个难点.希望有人能提供些线索.
1.在Apache的处理阶段post_read_request(General-purpose hook that runs immediately on creating
the request_rec object),这个阶段如何 获取post数据
我通过ap_get_brigade(),apr_bucket_read(),能获取到post数据,但会造成post后的页面为"非法请求,请返回".
具体方法,可参考http://onlamp.com/pub/a/apache/2001/09/20/apache_2.html

2.在Apache的生成器阶段 handler(Handle the request and generate a response.)
这个阶段如何 获取在访问html和php页面时,输出内容 的Content-type?
我通过request->content-type能获取到jpg.jng,css这样的文件类型,很奇怪的是apr_get_table_t(request->header-out,"Content-Type");获取到的都是空指针.
发现访问php页面时,handler钩子是没有进入的:(
在访问页面时,handler就是想获取到Content-Type: text/html.这样的数据.

3.还有一个是模块的加载与模块的卸载在哪里,主要是面临资源的分配和释放问题
# /* Dispatch list for API hooks */
# module AP_MODULE_DECLARE_DATA helloworld_module = {
# STANDARD20_MODULE_STUFF, //用于编译后的模块产生版本信息
# NULL, /* 创建目录配置结构*/
# NULL, /* 合并目录配置结构 */
# NULL, /* 创建主机配置结构 */
# NULL, /* 合并主机配置结构 */
# NULL, /* 为模块配置相关指令 */
# helloworld_register_hooks /* 注册模块的钩子函数 */
# };
我目前放在创建主机配置结构来做,采用apr_pool_cleanup_register()来释放资源,结果发现那个函数会多次进入,而且一分配完资源后,就会调用注册的释放资源函数.然后在重新分配过资源. 由于我要创建线程.所以这个地方肯定 不行了. Apache模块是否有象Windows的DLL的DllMain的加载 和卸载 呢?
...全文
46 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧