在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超級配置模塊的定制版本. #