IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Apache2中俩种设置PHP的异同

风雪之隅 2010-02-25 22:42:33 累计浏览 6,405 次
本机暂存

Apache2开始引入了Hook方式, 对应的在PHP中也提供了apache2handler这种sapi.

和我之前介绍过的PHP lifecycle不同, 这种情况下的PHP, 通过注册handler钩子, 从而可以在handler hook阶段有机会处理请求, 通过判断请求的handler, 来确定是否需要处理, 如果需要就会调用自身的处理器.

那么, 这种情况下也就有了多种配置方法, 主要考虑如下俩种方式(第二种可以有多种变种):

第一种: AddType application/x-httpd-php .php第二种:      <FilesMatch \.php$>          SetHandler application/x-httpd-php

首先来说, 这俩中方式的起作用的时刻不同, 对于第一种方式来说, 他是在type_check钩子阶段起作用的, 也就是在apache2src/modules/http/mod_mime.c中, 通过注册type_checker钩子, 加入find_ct(content_type), 在find_ct中, 通过配置文件中的mime映射, 或者是通过addType指令增加的映射, 根据文件的扩展来填充请求中的handler字段:

而对于第二种方式, 是在fixup钩子阶段, 通过注册fixups钩子阶段加入core_override_type(apache2src/server/core.c)函数, 来将目录级的配置指令生效.

而fixups钩子是晚于type_checker钩子的, 也是handler钩子之前最后的一个可以利用的钩子. 所以如果同时采用1,2俩种方式, 那么第二种方式会覆盖第一种方式设置的handler.

其次, 俩种方式依赖的数据结构不同, 第一种方式依赖的是一个全局的mime对照表extension_mappings, 这个表由mime配置文件和AddType指令而来.

而对于第二种方式, 它是根据配置文件构造的dir_config而来:

....  core_dir_config *conf =        (core_dir_config *)ap_get_module_config(r->per_dir_config,                                                &core_module);     /* Check for overrides with ForceType / SetHandler*/    if (conf->mime_type && strcmp(conf->mime_type, "none"))        ap_set_content_type(r, (char*) conf->mime_type);     if (conf->handler && strcmp(conf->handler, "none"))        r->handler = conf->handler;

 

同分类推荐文章

  1. Vibe新开源项目 - Vaala AI Gateway (2026-05-17 02:10:19)
  2. SmartPerfetto 架构文章 Q&amp;A:8 个深度技术问答 (2026-04-10 11:00:00)
  3. 让 AI 把我的 PHP 博客重写成 Go (2026-03-27 18:33:54)

查看更多 后端 文章 →

建议继续学习

  1. 使用gettext来支持PHP的多语言 (累计阅读 39,187)
  2. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,085)
  3. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,341)
  4. 我的PHP,Python和Ruby之路 (累计阅读 13,065)
  5. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,720)
  6. 15个最好的免费开源电子商务平台 (累计阅读 12,461)
  7. Redis消息队列的若干实现方式 (累计阅读 12,002)
  8. 到底什么是MVC? (累计阅读 11,695)
  9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,445)
  10. Rolling cURL: PHP并发最佳实践 (累计阅读 11,421)