来源: http://www.newasp.net/tech/php/1079.html

在Apache之中调用PHP是个经久不衰的话题,目前的PHP存在PHP4和PHP5的版本,而且在Apache之中调用PHP还存在module(模块)方式和CGI方式,同时Apache还存在Apache1和Apache2两个版本. 
在Apache之中调用PHP存在以下八种模式: 
1,PHP4在Apache1的module模式 
2,PHP4在Apache1的cgi模式 
3,PHP5在Apache1的module模式 
4,PHP5在Apache1的cgi模式 
5,PHP4在Apache2的module模式 
6,PHP4在Apache2的cgi模式 
7,PHP5在Apache2的module模式 
8,PHP5在Apache2的cgi模式 
你有没有想过,把这八种调用模式,就在一个配置文件之中给配置出来呢? 
也许你作过,但是没有完全成功,因为这八种模式之间,是不能相互兼容的哦. 
然而,灵活运用Apache的一条指令,将这八种模式乖乖的驯服,收容在一起,就易如反掌了.


在Apache之中调用PHP是个经久不衰的话题,目前的PHP存在PHP4和PHP5的版本,而且在Apache之中调用PHP还存在module(模块)方式和CGI方式,同时Apache还存在Apache1和Apache2两个版本. 
在Apache之中调用PHP存在以下八种模式: 
1,PHP4在Apache1的module模式 
2,PHP4在Apache1的cgi模式 
3,PHP5在Apache1的module模式 
4,PHP5在Apache1的cgi模式 
5,PHP4在Apache2的module模式 
6,PHP4在Apache2的cgi模式 
7,PHP5在Apache2的module模式 
8,PHP5在Apache2的cgi模式 
你有没有想过,把这八种调用模式,就在一个配置文件之中给配置出来呢? 
也许你作过,但是没有完全成功,因为这八种模式之间,是不能相互兼容的哦. 
然而,灵活运用Apache的一条指令,将这八种模式乖乖的驯服,收容在一起,就易如反掌了. 
哪一条指令?原来就是: 
在http://w.yi.org/ftp/FAPM/apache/Apache2/zh/mod/core.html#ifdefine有对这条指令的完整介绍. 
<IfDefine>指令 
代码:

说明: 只有在启动时进行了一个成功的测试后才进行的一个封装指令 
语法: <IfDefine [!]参数名> ... </IfDefine> 
上下文: 服务器配置, 虚拟主机, 目录, .htaccess 
覆盖项: All 
状态: 核心 
模块: core

<IfDefine测试>...</IfDefine>配置段用于标识附加施用条件的指令。<IfDefine>配置段中的指令仅当测试结果为真时才进行处理。如果测试失败。此配置段中的指令将会被忽略。

<IfDefine>配置段中的测试可以为以下两种形式之一:

参数名 
!参数名 
在第一种情况下,仅当符合参数名的参数已经定义的情况下才对开始和结束标记之间的指令进行处理。第二种情况则截然相反。仅当参数名没有定义的情况下才进行指令的处理。

参数名变量是在服务启动时,通过httpd命令行的-D参数-这样的形式指定的。

<IfDefine>配置段是可以嵌套的,从而可以实现简单的多参数测试。比如说:

$ httpd -DReverseProxy ...

# httpd.conf 
<IfDefine ReverseProxy> 
LoadModule rewrite_module modules/mod_rewrite.so 
LoadModule proxy_module modules/libproxy.so 
</IfDefine>

################################################################## 
# PHP超级配置模块--PHP4,PHP5,module,cgi任你玩转--应用于Apache # 
################################################################## 
# 配置版本 通用版v1.01 # 
# 配置编写 乔楚/HonestQiao # 
# 编写日期 2004年5月29日 # 
# 联系方式 QQ:5601680 MSN:honestqiao@hotmail.com # 
################################################################## 
# 主页地址: http://w.yi.org/ # 
# 论坛地址: http://bbs.chinaunix.net/forum/viewforum.php?f=13 # 
################################################################## 
################################################################## 
# 版权声明 # 
# 本PHP超级配置模块系乔楚(HonestQiao)所写,你可以任意使用和传播# 
#本PHP超级配置模块,但是请保留配置内容以上的声明部分(因为本声明不 # 
#会对你的实际配置造成任何影响),并且不得以任何方式表明是你写了本 # 
#PHP超级配置模块. # 
# 谢谢你的使用,欢迎批评建议和报告错误. # 
################################################################## 
SetEnv php_control_status not_php_control_status 
<IfDefine Apache=Apache> 
SetEnv php_control_status Apache 
<IfDefine php=php4> 
SetEnv php_control_status Apache_php4 
<IfDefine type=mod> 
SetEnv php_control_status Apache_php4_mod 
LoadModule php4_module /usr/local/php-4.3.6/sapi/php4apache.dll #请修改为实际的路径 
#AddModule mod_php4.c 
AddType application/x-httpd-php .php 
AddType application/x-httpd-php .php3 
AddType application/x-httpd-php .php4 
#PHPINIDir /usr/local/etc/php/php4.ini 
#请将php.ini放置到Apache的安装目录 
AddType application/x-httpd-php-source .phps 
Alias "/server-php" "/usr/local/etc/php/phpinfo.php4" #请修改为实际的路径 
Alias "/phpMyAdmin" "/usr/local/phpMyAdmin-2.6.0-alpha2/" #请修改为实际的路径 
</IfDefine>

<IfDefine !type=mod> 
SetEnv php_control_status Apache_php4_not_mod 
<IfDefine type=cgi> 
SetEnv php_control_status Apache_php4_cgi 
ScriptAlias /php/ "/usr/local/php-4.3.6/" #请修改为实际的路径 
Action application/x-httpd-php "/php/php.exe" 
#请将php.ini放置到Apache的安装目录 
AddType application/x-httpd-php .php 
AddType application/x-httpd-php .php3 
AddType application/x-httpd-php .php4 
AddType application/x-httpd-php-source .phps 
Alias "/server-php" "/usr/local/etc/php/phpinfo.php4" #请修改为实际的路径 
Alias "/phpMyAdmin" "/usr/local/phpMyAdmin-2.6.0-alpha2/" #请修改为实际的路径 
</IfDefine> 
</IfDefine> 
</IfDefine>

<IfDefine !php=php4> 
SetEnv php_control_status Apache_not_php4 
<IfDefine php=php5> 
SetEnv php_control_status Apache_php5 
<IfDefine type=mod> 
SetEnv php_control_status Apache_php5_mod 
LoadModule php5_module /usr/local/php-5.0.0RC2/php5apache.dll #请修改为实际的路径 
#AddModule mod_php5.c 
AddType application/x-httpd-php .php 
AddType application/x-httpd-php .php3 
AddType application/x-httpd-php .php4 
AddType application/x-httpd-php .php5 
AddType application/x-httpd-php-source .phps 
#PHPINIDir /usr/local/etc/php/php5.ini 
#请将php.ini放置到Apache的安装目录 
Alias "/server-php" "/usr/local/etc/php/phpinfo.php5" #请修改为实际的路径 
Alias "/phpMyAdmin" "/usr/local/phpMyAdmin-2.6.0-alpha2/" #请修改为实际的路径 
</IfDefine>

<IfDefine !type=mod> 
SetEnv php_control_status Apache_php5_not_mod 
<IfDefine type=cgi> 
SetEnv php_control_status Apache_php5_cgi 
ScriptAlias /php/ "/usr/local/php-5.0.0RC2/" #请修改为实际的路径 
Action application/x-httpd-php "/php/php-cgi.exe" 
#请将php.ini放置到Apache的安装目录 
AddType application/x-httpd-php .php 
AddType application/x-httpd-php .php3 
AddType application/x-httpd-php .php4 
AddType application/x-httpd-php .php5 
AddType application/x-httpd-php-source .phps 
Alias "/server-php" "/usr/local/etc/php/phpinfo.php5" #请修改为实际的路径 
Alias "/phpMyAdmin" "/usr/local/phpMyAdmin-2.6.0-alpha2/" #请修改为实际的路径 
</IfDefine> 
</IfDefine> 
</IfDefine> 
</IfDefine> 
</IfDefine>

<IfDefine !Apache=Apache> 
SetEnv php_control_status not_Apache 
<IfDefine Apache=Apache2> 
SetEnv php_control_status Apache2 
<IfDefine php=php4> 
SetEnv php_control_status Apache2_php4 
<IfDefine type=mod> 
SetEnv php_control_status Apache2_php4_mod 
LoadModule php4_module /usr/local/php-4.3.6/sapi/php4apache2.dll #请修改为实际的路径 
#AddModule mod_php4.c 
AddType application/x-httpd-php .php 
AddType application/x-httpd-php .php3 
AddType application/x-httpd-php .php4 
PHPINIDir /usr/local/etc/php/php4.ini #请修改为实际的路径 
AddType application/x-httpd-php-source .phps 
Alias "/server-php" "/usr/local/etc/php/phpinfo.php4" #请修改为实际的路径 
Alias "/phpMyAdmin" "/usr/local/phpMyAdmin-2.6.0-alpha2/" #请修改为实际的路径 
</IfDefine>

<IfDefine !type=mod> 
SetEnv php_control_status Apache2_php4_not_mod 
<IfDefine type=cgi> 
SetEnv php_control_status Apache2_php4_cgi 
ScriptAlias /php/ "/usr/local/php-4.3.6/" #请修改为实际的路径 
Action application/x-httpd-php "/php/php.exe" 
#请将php.ini放置到Apache的安装目录 
AddType application/x-httpd-php .php 
AddType application/x-httpd-php .php3 
AddType application/x-httpd-php .php4 
AddType application/x-httpd-php-source .phps 
Alias "/server-php" "/usr/local/etc/php/phpinfo.php4" #请修改为实际的路径 
Alias "/phpMyAdmin" "/usr/local/phpMyAdmin-2.6.0-alpha2/" #请修改为实际的路径 
</IfDefine> 
</IfDefine> 
</IfDefine>

<IfDefine !php=php4> 
SetEnv php_control_status Apache2_not_php4 
<IfDefine php=php5> 
SetEnv php_control_status Apache2_php5 
<IfDefine type=mod> 
SetEnv php_control_status Apache2_php5_mod 
LoadModule php5_module /usr/local/php-5.0.0RC2/php5apache2.dll #请修改为实际的路径 
#AddModule mod_php5.c 
AddType application/x-httpd-php .php 
AddType application/x-httpd-php .php3 
AddType application/x-httpd-php .php4 
AddType application/x-httpd-php .php5 
AddType application/x-httpd-php-source .phps 
PHPINIDir /usr/local/etc/php/php5.ini #请修改为实际的路径 
Alias "/server-php" "/usr/local/etc/php/phpinfo.php5" #请修改为实际的路径 
Alias "/phpMyAdmin" "/usr/local/phpMyAdmin-2.6.0-alpha2/" #请修改为实际的路径 
</IfDefine>

<IfDefine !type=mod> 
SetEnv php_control_status Apache2_php5_not_mod 
<IfDefine type=cgi> 
SetEnv php_control_status Apache2_php5_cgi 
ScriptAlias /php/ "/usr/local/php-5.0.0RC2/" #请修改为实际的路径 
Action application/x-httpd-php "/php/php-cgi.exe" 
#请将php.ini放置到Apache的安装目录 
AddType application/x-httpd-php .php 
AddType application/x-httpd-php .php3 
AddType application/x-httpd-php .php4 
AddType application/x-httpd-php .php5 
AddType application/x-httpd-php-source .phps 
Alias "/server-php" "/usr/local/etc/php/phpinfo.php5" #请修改为实际的路径 
Alias "/phpMyAdmin" "/usr/local/phpMyAdmin-2.6.0-alpha2/" #请修改为实际的路径 
</IfDefine> 
</IfDefine> 
</IfDefine> 
</IfDefine> 
</IfDefine> 
</IfDefine>

#使用方法: 
# 设备命令: 
# 连接配置: 
# 将以上PHP超级配置模块保存为一个文件,名称为php.conf,然后在Apache的配置文件之中,使用Include "/path/to/php.conf"来引用PHP超级配置模块; 
# 修改PHP超级配置模块之中提示需要修改的部分,一般是修改为你的文件所在的实际路径. 

# 启动命令: 
# ApacheControl -k start -D Apache=ApacheVersion php=phpVersion type=RunType 
# 假设启动apache的文件名为httpd,执行指令如下: 
# httpd -k start -D Apache=ApacheVersion php=phpVersion type=RunType 
# ApacheVersion:表示Apache的版本Apache,Apache--表示Apache1;Apache2--表示Apache2; 
# phpVersion:表示PHP的版本,php4--表示PHP4;php5--表示PHP5; 
# RunType:表示运行模式,mod--表示以module(模块)方式运行;cgi--表示以CGI方式运行 

# 通道信息: 
# PHP超级配置模块状态:表示环境变量之中PHP超级配置的状态,可以通过CGI探针或者phpinfo()来查看. 
# 说明:状态名称:php_control_status 
# 状态值: not_php_control_status: 表示没有处于PHP超级配置模块 
# Apache : 表示进入Apache1配置区域 
# Apache_php4 : 表示进入Apache1的PHP4配置区域 
# Apache_php4_mod : 表示进入Apache1的PHP4的module(模块)方式配置区域 
# Apache_php4_not_mod : 表示进入Apache1的PHP4的非module(模块)方式配置区域 
# Apache_php4_cgi : 表示进入Apache1的PHP4的CGI方式配置区域 
# Apache_not_php4 : 表示进入Apache1的非PHP4配置区域 
# Apache_php5 : 表示进入Apache1的PHP5配置区域 
# Apache_php5_mod : 表示进入Apache1的PHP5的module(模块)方式配置区域 
# Apache_php5_not_mod : 表示进入Apache1的PHP5的非module(模块)方式配置区域 
# Apache_php5_cgi : 表示进入Apache1的PHP5的CGI方式配置区域 

# not_Apache : 表示进入非Apache1配置区域 
# Apache2_php4 : 表示进入Apache2的PHP4配置区域 
# Apache2_php4_mod : 表示进入Apache2的PHP4的module(模块)方式配置区域 
# Apache2_php4_not_mod : 表示进入Apache2的PHP4的非module(模块)方式配置区域 
# Apache2_php4_cgi : 表示进入Apache2的PHP4的CGI方式配置区域 
# Apache2_not_php4 : 表示进入Apache2的非PHP4配置区域 
# Apache2_php5 : 表示进入Apache2的PHP5配置区域 
# Apache2_php5_mod : 表示进入Apache2的PHP5的module(模块)方式配置区域 
# Apache2_php5_not_mod : 表示进入Apache2的PHP5的非module(模块)方式配置区域 
# Apache2_php5_cgi : 表示进入Apache2的PHP5的CGI方式配置区域 
#

#测试工程: 
# 例如在Window2000环境下,执行以下设备命令: 
# cd /path/to/apache/ 
# apache -k start -D Apache=Apache php=php4 type=mod 
# 执行被设备命令之后,php_control_status的值变为Apache_php4_mod,表示处于Apache1的PHP4的Module模式之下;

# cd /path/to/apache/ 
# apache -k start -D Apache=Apache php=php5 type=cgi 
# 执行被设备命令之后,php_control_status的值变为Apache_php5_cgi,表示处于Apache1的PHP5的CGI模式之下; 

# cd /path/to/apache2/bin/ 
# apache -k start -D Apache=Apache2 php=php4 type=cgi 
# 执行被设备命令之后,php_control_status的值变为Apache2_php4_cgi,表示处于Apache2的PHP4的CGI模式之下; 

# cd /path/to/apache2/bin/ 
# apache -k start -D Apache=Apache2 php=php5 type=mod 
# 执行被设备命令之后,php_control_status的值变为Apache2_php5_mod,表示处于Apache2的PHP5的Module模式之下; 


#常见问题: 
# 1.启动时提示错误,且错误出在PHP超级配置模块的相关行,一般表示相关的设置路径不正确 
# 2.启动成功但是没有调用PHP,你可以查看php_control_status的状态值,以确定问题所在,可能执行设备明令时所给的参数不正确 
# 3.启动正确,也可以调用PHP了,那你还说什么问题啊,要恭喜你可以正常使用了啊. 
# 4.如果问题还不能解决,请和本PHP超级配置模块的开发者取得联系. 


#附加说明: 
# 本PHP超级配置模块,只是给出了一个通用的PHP在Apache之下调用的控制方式,使用本PHP超级配置模块的相关行,需要你对Apache和PHP有一定了解. 
# 如果你需要更为具体的配置,请和我联系,我将根据您的实际运行环境,作出适合您的实际运行环境的PHP超级配置模块的定制版本. 
#

PHP超级配置模块--PHP4,PHP5,module,cgi任你玩转--应用于Apache相关推荐

  1. python 找不到socket_swift 和 python解决Python找不到ssl模块问题 No module named _ssl

    python安装完毕后,提示找不到ssl模块:[www@pythontab.com ~]$ python Python 2.7.15 (default, Oct 23 2018, 18:08:43) ...

  2. 配置Apache2.2+PHP5+CakePHP1.2+MySQL5

    因为最近要用PHP做个小东西,新学了PHP.结果学PHP只用了2个小时,配置服务器却用了两天,郁闷得想骂人.为了避免以后忘掉,写个博客留底. 1. 安装配置Apahce 安装配置Apache是比较简单 ...

  3. vista 中php4, php5 共存

    由于有些开源PHP产品需要PHP4,因为不得不安装这个版本,如OSC2.1:而有些开源产品则使用PHP5,如wikipedia,因此为了同时开发 PHP4或PHP5的软件,则需要同时安装这两个版本的东 ...

  4. Webpack高级应用篇(四):模块解析(Module Resolution)

    目录 webpack 中的解析规则 绝对路径 相对路径 模块路径 解析(Resolve) resolve.alias resolve.extensions 外部扩展(Externals) extern ...

  5. CubeMX配置STM32实现httpd服务器CGI功能并使用网页控制STM32单片机(四)

    CubeMX配置STM32实现httpd服务器CGI功能并使用网页控制STM32单片机 引言 CubeMX配置HTTPD的CGI功能 实验过程 发现的问题 总结 引言 在前三篇文章中自己介绍了如何配置 ...

  6. 从零开始搭建多租户自洽的权限数据配置模块(二)- 主界面的跳转管理以及基础数据维护设计

    基于 DevExpress 从零开始搭建多租户自洽的权限数据配置模块(二) 基础数据的维护管理,以简单基本操作的形式展开.主要是演示devexpress做基本的增删改查.加载表单.建立多表关联.用户操 ...

  7. Thinkphp3.2———配置模块

    一.配置格式 Thinkphp框架中的所有配置都是数组形式定义的的格式为: //项目配置 return array('DEFAULT_MODULE'=>'Index',//默认模块'URL_MO ...

  8. php5.5 mysql网站空间_PHP环境配置IIS5.0+PHP5.23+MYSQL5+phpMyAdmin

    一.安装PHP5 1.获取PHP打开PHP官方网站的下载页:http://www.php.net/downloads.php 选择"PHP 5.2.3 installer [21,966Kb ...

  9. 阿里微服务专家自己手写Spring Boot 实现一个简单的自动配置模块

    为了更好的理解 Spring Boot 的 自动配置和工作原理,我们自己来实现一个简单的自动配置模块. 假设,现在项目需要一个功能,需要自动记录项目发布者的相关信息,我们如何通过 Spring Boo ...

最新文章

  1. 问题记录,StartCoroutine(“str)问题
  2. python split()方法_秘籍:10个Python字符串处理技巧(附代码)
  3. 上传 录音_老罗推荐的是最好吗?AI旗舰录音笔对比评测
  4. 已知坐标求方位角_由方位角高度角求赤经赤纬
  5. “芯”痛痛在系统与芯片 转型升级是历史趋势
  6. 选择Java密码算法第1部分-散列
  7. ROS底盘控制节点 源码分析
  8. SQLite学习总结(2)——使用Java操作SQLite
  9. 合并排序时间复杂度推导
  10. 家庭网络布线工程图布线方案
  11. 2019年ACM大赛:北大清华无缘前十,莫斯科大学第一
  12. Mysql primary key主键冲突的可能性与解决方案
  13. 位置信息、定位技术与位置服务
  14. python美元和人民币双向兑换程序_Python:程序练习题(二)
  15. 服务网格在百度核心业务大规模落地实践
  16. R语言Bonferroni校正的成对t检验进行事后检验(post hoc)实战:单因素方差分析告诉我们并不是所有的群体手段的效果是均等的,确切地找出哪些组彼此不同使用Bonferroni校正检验
  17. Spine使用外部图片动画换肤
  18. oracle 关键字 enable,Oracle之表示约束状态的关键字Enable/Disable/Validate/Novalidate
  19. Modbus 协议从站开发通信西门子 PLC
  20. 完美世界怎么修改服务器经验,三招教你快速升级

热门文章

  1. C#使用Mutex实例详解
  2. c#中中读取嵌入和使用资源文件的方法
  3. C语言 内存分配 地址 指针 数组 参数 解析
  4. XCode的使用心得
  5. eureka自我保护时间_SpringCloud Eureka自我保护机制
  6. matlab根据url链接下载*.tar文件并解压
  7. 量子计算机 模拟,新量子算法将量子模拟器变成量子计算机,可以进行量子计算...
  8. lamda过滤_java 使用Lambda和filter对对象集合过滤
  9. python设计大赛_GitHub - FatBallFish/Multimedia-Python: 多媒体设计大赛-Python后端
  10. django html 模板继承,Django模板的继承