在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超级配置模块如下所示↓ __________________↓↓ _________________↓↓↓ ________________↓↓↓↓ _______________↓↓↓↓↓ ______________↓↓↓↓↓↓ _______________↓↓↓↓↓ ________________↓↓↓↓ _________________↓↓↓ __________________↓↓ PHP超级配置模块如下所示↓ 代码: ################################################################## # PHP超级配置模块--PHP4,PHP5,module,cgi任你玩转--应用于Apache # ################################################################## # 配置版本 通用版v1.01 # # 配置编写 乔楚/HonestQiao # # 编写日期 2004年5月29日 # # 联系方式 QQ:5601680 MSN:[email protected] # ################################################################## # 主页地址: 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超级配置模块的定制版本. #
(出处:http://www.sheup.com)