[color=green:bf630625c9]在Apache之中调用PHP是个经久不衰的话题,目前的PHP存在PHP4和PHP5的版本,而且在Apache之中调用PHP还存在module(模块)方式和CGI方式,同时Apache还存在Apache1和Apache2两个版本.
在Apache之中调用PHP存在以下[/color:bf630625c9][size=24:bf630625c9][color=red:bf630625c9]八[/color:bf630625c9][/size:bf630625c9][color=green:bf630625c9]种模式:[/color:bf630625c9]
1,[color=red:bf630625c9]PHP4在Apache1的module模式[/color:bf630625c9]
2,[color=orange:bf630625c9]PHP4在Apache1的cgi模式[/color:bf630625c9]
3,[color=yellow:bf630625c9]PHP5在Apache1的[/color:bf630625c9]module[color=yellow:bf630625c9]模式[/color:bf630625c9]
4,[color=green:bf630625c9]PHP5在Apache1的cgi模式[/color:bf630625c9]
5,[color=blue:bf630625c9]PHP4在Apache2的module模式[/color:bf630625c9]
6,[color=indigo:bf630625c9]PHP4在Apache2的cgi模式[/color:bf630625c9]
7,[color=violet:bf630625c9]PHP5在Apache2的module模式[/color:bf630625c9]
8,[color=darkred:bf630625c9]PHP5在Apache2的cgi模式[/color:bf630625c9]
[color=green:bf630625c9]你有没有想过,把这[/color:bf630625c9][size=24:bf630625c9][color=red:bf630625c9]八[/color:bf630625c9][/size:bf630625c9][color=green:bf630625c9]种调用模式,就在一个配置文件之中给配置出来呢?
也许你作过,但是没有完全成功,因为这[/color:bf630625c9][size=24:bf630625c9][color=red:bf630625c9]八[/color:bf630625c9][/size:bf630625c9][color=green:bf630625c9]种模式之间,是不能相互兼容的哦.
然而,灵活运用Apache的一条指令,将这[/color:bf630625c9][size=24:bf630625c9][color=red:bf630625c9]八[/color:bf630625c9][/size:bf630625c9][color=green:bf630625c9]种模式乖乖的驯服,收容在一起,就易如反掌了.
哪一条指令?原来就是:[/color:bf630625c9]
在[url]http://w.yi.org/ftp/FAPM/apache/Apache2/zh/mod/core.html#ifdefine[/url][color=green:bf630625c9]有对这条指令的完整介绍.[/color:bf630625c9]
[url=http://w.yi.org/ftp/FAPM/apache/Apache2/zh/mod/core.html#ifdefine][size=24:bf630625c9][u:bf630625c9][color=green:bf630625c9]<IfDefine>指令[/color:bf630625c9][/u:bf630625c9] [/size:bf630625c9][/url]
[code:1:bf630625c9]
说明: 只有在启动时进行了一个成功的测试后才进行的一个封装指令
语法: <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>[/code:1:bf630625c9]
[color=red:bf630625c9][size=24:bf630625c9]PHP超级配置模块如下所示↓[/size:bf630625c9][/color:bf630625c9]
[color=red:bf630625c9][size=24:bf630625c9]__________________↓↓[/size:bf630625c9][/color:bf630625c9]
[color=red:bf630625c9][size=24:bf630625c9]_________________↓↓↓[/size:bf630625c9][/color:bf630625c9]
[color=red:bf630625c9][size=24:bf630625c9]________________↓↓↓↓[/size:bf630625c9][/color:bf630625c9]
[color=red:bf630625c9][size=24:bf630625c9]_______________↓↓↓↓↓[/size:bf630625c9][/color:bf630625c9]
[color=red:bf630625c9][size=24:bf630625c9]______________↓↓↓↓↓↓[/size:bf630625c9][/color:bf630625c9]
[color=red:bf630625c9][size=24:bf630625c9]_______________↓↓↓↓↓[/size:bf630625c9][/color:bf630625c9]
[color=red:bf630625c9][size=24:bf630625c9]________________↓↓↓↓[/size:bf630625c9][/color:bf630625c9]
[color=red:bf630625c9][size=24:bf630625c9]_________________↓↓↓[/size:bf630625c9][/color:bf630625c9]
[color=red:bf630625c9][size=24:bf630625c9]__________________↓↓[/size:bf630625c9][/color:bf630625c9]
[color=red:bf630625c9][size=24:bf630625c9]PHP超级配置模块如下所示↓[/size:bf630625c9][/color:bf630625c9]
| HonestQiao 回复于:2004-05-29 16:54:19 |
| [code:1:72b49e9f07]##################################################################
# 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>[/code:1:72b49e9f07] |
| HonestQiao 回复于:2004-05-29 16:55:43 |
| [code:1:33da9eb370]#使用方法:
# 设备命令: # 连接配置: # 将以上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方式配置区域 #[/code:1:33da9eb370] |
| HonestQiao 回复于:2004-05-29 17:17:42 |
| [code:1:284d7d5052]#测试工程:
# 例如在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超级配置模块的定制版本. #[/code:1:284d7d5052] |
| 深空 回复于:2004-05-29 18:42:22 |
| 除了支持,我不知道说什么了-________-!! |
| haohaoo 回复于:2004-05-29 19:21:07 |
| 看了有点了解,不过里面都是windows的啊,linux下面没有那些文件啊 |
| HonestQiao 回复于:2004-05-29 19:42:40 |
| 不是提示了,你把那些地方修改成为你实际的么 |
| 网络混混 回复于:2004-05-29 20:37:31 |
| 除了说支持和阅
我没有话说了。 |
| cceon 回复于:2004-05-29 20:42:43 |
| PHP4在Apache1的module模式下运行的好?
还是在CGI模式下运行的好? |
| khj99 回复于:2004-05-30 09:10:01 |
| 根本就不止8种。
还存在php以静态模式编译进apache中. |
| xiaohua 回复于:2004-05-30 09:13:02 |
| 好长的代码 :em06: |
| HonestQiao 回复于:2004-05-30 14:02:29 |
| [quote:7adc6b0a08="khj99"]根本就不止8种。
还存在php以静态模式编译进apache中.[/quote:7adc6b0a08] [code:1:7adc6b0a08]Apache有两种使用模块的方法,其一是永久性包含进核心;如果操作系统支持动态共享对象(DSO),而且能为autoconf所检测,则模块还可以被动态编译。[/code:1:7adc6b0a08] 我这里说的是module模式,没有说是动态还是静态的,动态静态变异方式不同,使用起来基本上相同 |
| HonestQiao 回复于:2004-06-01 18:53:23 |
| http://bbs.chinaunix.net/forum/3/20040601/337646.html
嘿嘿,打算把这个做一课件,希望大家先提提意见哦,多多益善 |
| sports98 回复于:2004-06-11 14:05:21 |
| :shock: 在中国可能只有在中国才会这样?
敢问楼上了此举在国内服务器上能有几台服务器这样配置? :em06: :em06: :em06: :em06: :em06: |
| sports98 回复于:2004-06-11 14:07:11 |
| 另外我觉得你这个文章其实最主要的仅仅是介绍了apache里配置文件中的
<IfDefine>功能啊 |
| Ecore 回复于:2004-12-19 18:29:10 |
| 人家是技术挑战!
不是和你论国情! 谈个技术问题,动不动搬国情搬出来干嘛?? |
| bqsc 回复于:2005-03-16 10:33:48 |
| 真是技术无极限啊。 |
| ttianxhtu 回复于:2005-03-16 13:15:02 |
| 学习一下
不过还是不怎么懂 |
| yxg0512 回复于:2005-04-19 13:06:19 |
| 除了佩服 只剩敬仰了! |

