我需要使用多个版本的PHP 5.x来测试我的PHP应用程序,比如PHP 5.0.0和PHP 5.2.8。
有没有一种方法可以配置开发LAMP服务器,以便我可以在多个版本的PHP5上快速测试应用程序?
发布于 2009-02-07 20:36:56
一种方法是用mod_php设置你的php的主版本,然后在不同的端口(即81、82、83等)上通过快速cgi运行所有其他版本。但是,这并不能保证行为完全一致。
发布于 2013-05-25 23:51:11
使用CentOS,您可以使用一个版本的快速can和另一个版本的php-fpm的组合来完成此操作,如下所述:
基于Apache5.6,仅适用于CentOS
1.启用rpmforge和epel yum存储库
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
sudo rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
sudo rpm -ivh epel-release-5-4.noarch.rpm2.安装php-5.1
CentOS/RHEL 5.x系列有php-5.1 in box,只需用yum安装即可,例如:
sudo yum install php php-mysql php-mbstring php-mcrypt3.从源码编译安装php 5.2和5.3
对于php 5.2和5.3,我们可以在互联网上找到许多rpm包。但是,它们都与CentOS自带的php有冲突,所以,我们最好从源码中构建和安装它们,这并不困难,重点是在不同的位置安装php。
但是,当安装php作为apache模块时,我们一次只能使用一个版本的php。如果我们需要在同一台服务器上同时运行不同版本的php,例如,不同的虚拟主机可能需要不同版本的php。幸运的是,很酷的FastCGI和PHP-FPM可以提供帮助。
构建并安装php-5.2并启用fastcgi
1)安装所需的开发包
yum install gcc libxml2-devel bzip2-devel zlib-devel \
curl-devel libmcrypt-devel libjpeg-devel \
libpng-devel gd-devel mysql-devel2)编译安装
wget http://cn.php.net/get/php-5.2.17.tar.bz2/from/this/mirror
tar -xjf php-5.2.17.tar.bz2
cd php-5.2.17
./configure --prefix=/usr/local/php52 \
--with-config-file-path=/etc/php52 \
--with-config-file-scan-dir=/etc/php52/php.d \
--with-libdir=lib64 \
--with-mysql \
--with-mysqli \
--enable-fastcgi \
--enable-force-cgi-redirect \
--enable-mbstring \
--disable-debug \
--disable-rpath \
--with-bz2 \
--with-curl \
--with-gettext \
--with-iconv \
--with-openssl \
--with-gd \
--with-mcrypt \
--with-pcre-regex \
--with-zlib
make -j4 > /dev/null
sudo make install
sudo mkdir /etc/php52
sudo cp php.ini-recommended /etc/php52/php.ini3)创建fastcgi包装器脚本
创建文件/usr/local/php52/bin/fcgiwrapper.sh
#!/bin/bash
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS
exec /usr/local/php52/bin/php-cgi
chmod a+x /usr/local/php52/bin/fcgiwrapper.sh
Build and install php-5.3 with fpm enabled
wget http://cn.php.net/get/php-5.3.6.tar.bz2/from/this/mirror
tar -xjf php-5.3.6.tar.bz2
cd php-5.3.6
./configure --prefix=/usr/local/php53 \
--with-config-file-path=/etc/php53 \
--with-config-file-scan-dir=/etc/php53/php.d \
--enable-fpm \
--with-fpm-user=apache \
--with-fpm-group=apache \
--with-libdir=lib64 \
--with-mysql \
--with-mysqli \
--enable-mbstring \
--disable-debug \
--disable-rpath \
--with-bz2 \
--with-curl \
--with-gettext \
--with-iconv \
--with-openssl \
--with-gd \
--with-mcrypt \
--with-pcre-regex \
--with-zlib
make -j4 && sudo make install
sudo mkdir /etc/php53
sudo cp php.ini-production /etc/php53/php.ini
sed -i -e 's#php_fpm_CONF=\${prefix}/etc/php-fpm.conf#php_fpm_CONF=/etc/php53/php-fpm.conf#' \
sapi/fpm/init.d.php-fpm
sudo cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
sudo chmod a+x /etc/init.d/php-fpm
sudo /sbin/chkconfig --add php-fpm
sudo /sbin/chkconfig php-fpm on
sudo cp sapi/fpm/php-fpm.conf /etc/php53/配置程序-fpm
编辑/etc/php53/php-fpm.conf,更改一些设置。这一步主要是取消一些设置的注释,你可以根据需要调整数值。
pid = run/php-fpm.pid
listen = 127.0.0.1:9000
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20然后,启动
sudo /etc/init.d/php-fpm startInstall setup mod_fastcgi,mod_fcgid
sudo yum install libtool httpd-devel apr-devel
wget http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz
tar -xzf mod_fastcgi-current.tar.gz
cd mod_fastcgi-2.4.6
cp Makefile.AP2 Makefile
sudo make top_dir=/usr/lib64/httpd/ install
sudo sh -c "echo 'LoadModule fastcgi_module modules/mod_fastcgi.so' > /etc/httpd/conf.d/mod_fastcgi.conf"
yum install mod_fcgid设置和测试虚拟主机
1)将以下行添加到/etc/hosts
127.0.0.1 web1.example.com web2.example.com web3.example.com2)创建web文档根目录,并在其下放置一个index.php以显示phpinfo切换到用户根目录,运行
mkdir /var/www/fcgi-bin
for i in {1..3}; do
web_root=/var/www/web$i
mkdir $web_root
echo "<?php phpinfo(); ?>" > $web_root/index.php
done注意:需要空的/var/www/fcgi-bin目录,以后不要删除它
3)创建Apache配置文件(追加到httpd.conf)
NameVirtualHost *:80
# module settings
# mod_fcgid
<IfModule mod_fcgid.c>
idletimeout 3600
processlifetime 7200
maxprocesscount 17
maxrequestsperprocess 16
ipcconnecttimeout 60
ipccommtimeout 90
</IfModule>
# mod_fastcgi with php-fpm
<IfModule mod_fastcgi.c>
FastCgiExternalServer /var/www/fcgi-bin/php-fpm -host 127.0.0.1:9000
</IfModule>
# virtual hosts...
#################################################################
#1st virtual host, use mod_php, run php-5.1
#################################################################
<VirtualHost *:80>
ServerName web1.example.com
DocumentRoot "/var/www/web1"
<ifmodule mod_php5.c>
<FilesMatch \.php$>
AddHandler php5-script .php
</FilesMatch>
</IfModule>
<Directory "/var/www/web1">
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
#################################################################
#2nd virtual host, use mod_fcgid, run php-5.2
#################################################################
<VirtualHost *:80>
ServerName web2.example.com
DocumentRoot "/var/www/web2"
<IfModule mod_fcgid.c>
AddHandler fcgid-script .php
FCGIWrapper /usr/local/php52/bin/fcgiwrapper.sh
</IfModule>
<Directory "/var/www/web2">
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks +ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
#################################################################
#3rd virtual host, use mod_fastcgi + php-fpm, run php-5.3
#################################################################
<VirtualHost *:80>
ServerName web3.example.com
DocumentRoot "/var/www/web3"
<IfModule mod_fastcgi.c>
ScriptAlias /fcgi-bin/ /var/www/fcgi-bin/
AddHandler php5-fastcgi .php
Action php5-fastcgi /fcgi-bin/php-fpm
</IfModule>
<Directory "/var/www/web3">
DirectoryIndex index.php index.html index.htm
Options -Indexes FollowSymLinks +ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>4)重启apache。分别访问这3个站点查看phpinfo并验证结果。即:
http://web1.example.com
http://web2.example.com
http://web3.example.com如果一切正常,您可以使用3个虚拟主机中的一个作为模板来创建新的虚拟主机,并使用所需的php版本。
发布于 2009-02-12 07:00:23
拥有多个apache + php实例并不能真正满足我的兴趣,但这可能是最简单的方法。如果你不想接吻..。这是一个想法。
让你的apache启动并运行,尝试像debian和ubuntu那样配置它,例如,为加载的模块建立目录。您的apache conf可以使用如下代码行:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf然后构建您的第一个版本的php,并给它一个明确包含版本号的前缀,例如/usr/local/php/5.2.8,/usr/local/php/5.2.6 ...
conf/load如下所示:
php5.2.6.load
LoadModule php5_module /usr/local/php/5.2.6/libphp5.sophp5.2.8.load
LoadModule php5_module /usr/local/php/5.2.8/libphp5.so要切换版本,您所要做的就是更改apache为另一个版本的加载文件和conf文件所在的目录。您可以使用一个简单的bash脚本自动执行此操作(删除实际文件,复制备用版本文件,然后重新启动apache。
这种设置的一个优点是一切都是一致的,只要您在选项和模块方面保持php.ini相同(无论如何您都必须使用CGI )。他们都通过了SAPI。您的应用程序将不需要任何更改,也不需要使用相对URL。
我认为这应该可以工作,但话又说回来,我没有尝试过,我也不太可能这样做,因为我没有与您相同的要求。不过,如果你真的尝试过,请发表评论。
https://stackoverflow.com/questions/524508
复制相似问题