首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个开发LAMP服务器上运行PHP5.x的多个版本?

如何在一个开发LAMP服务器上运行PHP5.x的多个版本?
EN

Stack Overflow用户
提问于 2009-02-07 20:23:09
回答 9查看 117.7K关注 0票数 81

我需要使用多个版本的PHP 5.x来测试我的PHP应用程序,比如PHP 5.0.0和PHP 5.2.8。

有没有一种方法可以配置开发LAMP服务器,以便我可以在多个版本的PHP5上快速测试应用程序?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-02-07 20:36:56

一种方法是用mod_php设置你的php的主版本,然后在不同的端口(即81、82、83等)上通过快速cgi运行所有其他版本。但是,这并不能保证行为完全一致。

票数 17
EN

Stack Overflow用户

发布于 2013-05-25 23:51:11

使用CentOS,您可以使用一个版本的快速can和另一个版本的php-fpm的组合来完成此操作,如下所述:

https://web.archive.org/web/20130707085630/http://linuxplayer.org/2011/05/intall-multiple-version-of-php-on-one-server

基于Apache5.6,仅适用于CentOS

1.启用rpmforge和epel yum存储库

代码语言:javascript
复制
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.rpm

2.安装php-5.1

CentOS/RHEL 5.x系列有php-5.1 in box,只需用yum安装即可,例如:

代码语言:javascript
复制
sudo yum install php php-mysql php-mbstring php-mcrypt

3.从源码编译安装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)安装所需的开发包

代码语言:javascript
复制
yum install gcc libxml2-devel bzip2-devel zlib-devel \
    curl-devel libmcrypt-devel libjpeg-devel \
    libpng-devel gd-devel mysql-devel

2)编译安装

代码语言:javascript
复制
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.ini

3)创建fastcgi包装器脚本

创建文件/usr/local/php52/bin/fcgiwrapper.sh

代码语言:javascript
复制
#!/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,更改一些设置。这一步主要是取消一些设置的注释,你可以根据需要调整数值。

代码语言:javascript
复制
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

然后,启动

代码语言:javascript
复制
sudo /etc/init.d/php-fpm start

Install setup mod_fastcgi,mod_fcgid

代码语言:javascript
复制
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

代码语言:javascript
复制
127.0.0.1 web1.example.com web2.example.com web3.example.com

2)创建web文档根目录,并在其下放置一个index.php以显示phpinfo切换到用户根目录,运行

代码语言:javascript
复制
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)

代码语言:javascript
复制
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并验证结果。即:

代码语言:javascript
复制
http://web1.example.com
http://web2.example.com
http://web3.example.com

如果一切正常,您可以使用3个虚拟主机中的一个作为模板来创建新的虚拟主机,并使用所需的php版本。

票数 23
EN

Stack Overflow用户

发布于 2009-02-12 07:00:23

拥有多个apache + php实例并不能真正满足我的兴趣,但这可能是最简单的方法。如果你不想接吻..。这是一个想法。

让你的apache启动并运行,尝试像debian和ubuntu那样配置它,例如,为加载的模块建立目录。您的apache conf可以使用如下代码行:

代码语言:javascript
复制
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

代码语言:javascript
复制
LoadModule php5_module /usr/local/php/5.2.6/libphp5.so

php5.2.8.load

代码语言:javascript
复制
LoadModule php5_module /usr/local/php/5.2.8/libphp5.so

要切换版本,您所要做的就是更改apache为另一个版本的加载文件和conf文件所在的目录。您可以使用一个简单的bash脚本自动执行此操作(删除实际文件,复制备用版本文件,然后重新启动apache。

这种设置的一个优点是一切都是一致的,只要您在选项和模块方面保持php.ini相同(无论如何您都必须使用CGI )。他们都通过了SAPI。您的应用程序将不需要任何更改,也不需要使用相对URL。

我认为这应该可以工作,但话又说回来,我没有尝试过,我也不太可能这样做,因为我没有与您相同的要求。不过,如果你真的尝试过,请发表评论。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/524508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档