主題:Apache2 PHP4 與 PHP5 共存
作業環境:FreeBSD 6.1-RELEASE
軟體版本:
說明:要在 Apache 裡同時跑 PHP4 與 PHP5,原理很簡單就是 PHP4 跑 Apache module PHP5 跑 PHP-CGI
版本更新
最後更新
1.安裝 Apache 2.0.59
[root@sun ~]#cd /usr/ports/www/apache20;make install clean2.安裝 PHP4
[root@sun ~]#cd /usr/ports/www/mod_php4/ make config [root@sun mod_php4]#make config
取消跟 CGI 有關的選項,如果用不到 Suhosin、ipv6 可以只保留 Apache 的選項
[X] APACHE Build Apache module [X] SUHOSIN Enable Suhosin protection system [X] IPV6 Enable ipv6 support
改變安裝路徑將 PHP4 安裝到 /usr/local/php4 下面
[root@sun mod_php4]#make PREFIX=/usr/local/php4 install clean
編輯 Apache 設定檔
[root@sun mod_php4]#joe /usr/local/etc/apache2/httpd.conf
加入 PHP4 的設定,並且將 Log 的等級調成 debug
LoadModule php4_module modules/libphp4.so AddType application/x-httpd-php .php .phtml .php3 LogLevel debug
3.試跑一下
檢查 Log files,有 PHP/4.4.4 with Suhosin-Patch configured 訊息表示 mod_php4 安裝成功
[root@sun ~]#apachectl start [root@sun ~]#tail /var/log/http-error.log [Sun Nov 19 00:24:55 2006] [notice] Apache/2.0.59 (FreeBSD) PHP/4.4.4 with Suhosin-Patch configured -- resuming normal operat [Sun Nov 19 00:24:55 2006] [info] Server built: Nov 18 2006 21:35:46 [Sun Nov 19 00:24:55 2006] [debug] prefork.c(956): AcceptMutex: flock (default: flock)4.安裝 mod_fastcgi
[root@sun ~]#cd /usr/ports/www/mod_fastcgi;make install clean
加入 mod_fastcgi 相關設定
[root@sun mod_fastcgi]#joe /usr/local/etc/apache2/httpd.conf
LoadModule modules/mod_fastcgi.so FastCgiIpcDir /tmp/fcgi_ipc/ AddHandler fastcgi-script .fcgi
5.試跑一下
檢查 Log files,如果出現 mod_fastcgi/2.4.2 configured 訊息表示安裝成功
[root@sun ~]#apachectl start [root@sun ~]#tail /var/log/http-error.log [Sun Nov 19 01:12:10 2006] [notice] Apache/2.0.59 (FreeBSD) PHP/4.4.4 with Suhosin-Patch mod_fastcgi/2.4.2 configured -- resu [Sun Nov 19 01:12:10 2006] [info] Server built: Nov 18 2006 21:35:46 [Sun Nov 19 01:12:10 2006] [debug] prefork.c(956): AcceptMutex: flock (default: flock)
6.安裝 php5
因為安裝 php5 要用到 libxml2 所以要先安裝,否則用自訂安裝的方式會將 libxml2 安裝到 /usr/local/php5 下面,如果已經安裝 libxml2 的話可以跳過這一步。
[root@sun ~]#cd /usr/ports/textproc/libxml2 ; make install clean
也可以用 mod_php5 安裝,只不過是在 pkg_info 裡面有不同的紀錄而已
[root@sun ~]#cd /usr/ports/lang/php5 ; make config
選擇所有的 CGI only 選項,並且取消 Apache module,如果在 php4 有把 Suhosin、ipv6 安裝進去的話,php5 就不能勾選,另外如果要用 CLI 的話可以勾選。
[X] CGI Build CGI version [X] REDIRECT Enable force-cgi-redirect support (CGI only) [X] DISCARD Enable discard-path support (CGI only) [X] FASTCGI Enable fastcgi support (CGI only) [X] PATHINFO Enable path-info-check support (CGI only)
改變安裝路徑將 PHP5 安裝到 /usr/local/php5 下面
[root@sun php5]#make PREFIX=/usr/local/php5 install clean7.改 Apache 設定檔
[root@sun php5]#joe /usr/local/etc/apache2/httpd.conf
加入 php5 相關設定
AddHandler php5-fcgi .php5 Action php5-fcgi /php5.fcgi
讓 /usr/local/www/ 下面的資料夾可以執行 CGI,加入 Options ExecCGI
<Directory "/usr/local/www">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.0/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks ExecCGI
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit Indexes
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
</Directory>
8.新增 php-cgi script
放在 /usr/local/www/data-dist/php5.fcgi
#!/bin/sh PHP_FCGI_CHILDREN=4 export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_MAX_REQUESTS exec /usr/local/php5/bin/php-cgi -c /usr/local/php5/etc/php.ini
將權限改成 755
[root@sun data]#chmod 755 php5.fcgi9.跑起來
[root@sun ~]#apachectl start [root@sun ~]#ps aux | grep www www 47131 0.0 1.2 53752 6296 ?? I 8:45下午 0:00.02 /usr/local/sbin/httpd -k start www 47132 0.0 1.3 53936 6472 ?? I 8:45下午 0:00.04 /usr/local/sbin/httpd -k start www 47133 0.0 1.3 53896 6432 ?? I 8:45下午 0:00.02 /usr/local/sbin/httpd -k start www 47134 0.0 1.2 53776 6304 ?? I 8:45下午 0:00.01 /usr/local/sbin/httpd -k start www 47135 0.0 1.2 53776 6304 ?? I 8:45下午 0:00.01 /usr/local/sbin/httpd -k start www 47136 0.0 1.2 53776 6304 ?? I 8:45下午 0:00.01 /usr/local/sbin/httpd -k start www 47139 0.0 1.2 53776 6304 ?? I 8:45下午 0:00.01 /usr/local/sbin/httpd -k start www 47140 0.0 1.0 14112 5176 ?? Is 8:45下午 0:00.11 /usr/local/bin/php-cgi -c /usr/local/etc/php5/php.ini www 47141 0.0 1.0 14240 5328 ?? I 8:45下午 0:00.02 /usr/local/bin/php-cgi -c /usr/local/etc/php5/php.ini www 47142 0.0 1.0 14240 5272 ?? I 8:45下午 0:00.01 /usr/local/bin/php-cgi -c /usr/local/etc/php5/php.ini www 47143 0.0 1.0 14240 5272 ?? I 8:45下午 0:00.01 /usr/local/bin/php-cgi -c /usr/local/etc/php5/php.ini www 47144 0.0 1.0 14112 5192 ?? I 8:45下午 0:00.00 /usr/local/bin/php-cgi -c /usr/local/etc/php5/php.ini www 47145 0.0 1.2 53776 6304 ?? I 8:45下午 0:00.01 /usr/local/sbin/httpd -k start10.放 phpinfo 上去試試看
<? phpinfo(); ?>
跑 php4 的副檔名就用 php,跑 php5 的副檔名就用 php5
[root@sun data]#cp info.php info.php5
實際執行狀況
![]() | ![]() |
11.安裝 PHP4-extension
因為 PHP4 與 PHP5 是用自訂位置的方式,所以在安裝 extension 的時候必須將 PHP 的 build environment、header files、helper programs 的位置 link 到原來 ports 的位置
[root@sun ~]#cd /usr/local/include [root@sun include]#ln -s /usr/local/php4/include/php php [root@sun ~]#cd /usr/local/lib [root@sun lib]#ln -s /usr/local/php4/lib/php php [root@sun ~]#cd /usr/local/bin/ [root@sun bin]#ln -s /usr/local/php4/bin/php-config php-config [root@sun bin]#ln -s /usr/local/php4/bin/phpize phpize
安裝 php4-extension,選需要的 extension 安裝
[root@sun ~]#cd /usr/ports/lang/php4-extensions/ [root@sun php4-extensions]#make install clean
安裝完後將 extension.ini 移到自訂的位置下面
[root@sun ~]#cd /usr/local/php4/etc [root@sun etc]#mkdir php [root@sun ~]#cd /usr/local/etc/php [root@sun php]#cp extensions.ini /usr/local/php4/etc/php/
12.安裝 PHP5-extension
安裝方法一樣只要把 link 改成 PHP5 的位置就可以了,PHP5 要多 link 一個 php-cgi
[root@sun ~]#cd /usr/local/include [root@sun include]#ln -s /usr/local/php5/include/php php [root@sun ~]#cd /usr/local/lib [root@sun lib]#ln -s /usr/local/php5/lib/php php [root@sun ~]#cd /usr/local/bin/ [root@sun bin]#ln -s /usr/local/php5/bin/php-config php-config [root@sun bin]#ln -s /usr/local/php5/bin/phpize phpize [root@sun bin]#ln -s /usr/local/php5/bin/php-cgi php-cgi
安裝 php5-extension,選需要的 extension 安裝
[root@sun ~]#cd /usr/ports/lang/php5-extensions/ [root@sun php5-extensions]#make install clean
安裝完後將 extension.ini 移到自訂的位置下面
[root@sun ~]#cd /usr/local/php5/etc [root@sun etc]#mkdir php [root@sun ~]#cd /usr/local/etc/php [root@sun php]#cp extensions.ini /usr/local/php5/etc/php/
13.讓特定資料夾 php5 副檔名改成 php
利用 apache 設定讓特定的資料夾副檔名由 php5 改回 php,編輯 apache 設定檔加入以下敘述,使 /usr/local/www/php5 下面的 php 用 php5-fcgi 跑,其他資料夾也可如法炮製。
<Directory "/usr/local/www/php5"> AddHandler php5-fcgi .php </Directory>
參考連結