当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在开发LAMP服务器上运行多个版本的PHP5.x?》经验,为你挑选了4个好方法。

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

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



1> transilvlad..:

使用CentOS,你可以使用一个版本的PHP的fastcgi和另一个版本的php-fpm的组合,如下所述:

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

基于CentOS 5.6,仅适用于Apache

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.rpm

2.安装php-5.1

CentOS/RHEL 5.x系列包含php-5.1,只需用yum安装,例如:

sudo yum install php php-mysql php-mbstring php-mcrypt

3.从源代码编译并安装php 5.2和5.3

对于php 5.2和5.3,我们可以在Internet上找到许多rpm包.但是,它们都与CentOS附带的php冲突,所以,我们最好从soure构建和安装它们,这并不难,重点是在不同的位置安装php.

但是,当安装php作为apache模块时,我们只能同时使用一个版本的php.如果我们需要在同一台服务器上运行不同版本的php,例如,同时,不同的虚拟主机可能需要不同版本的php.幸运的是,酷酷的FastCGI和PHP-FPM可以提供帮助.

在启用fastcgi的情况下构建并安装php-5.2

1)安装所需的开发包

yum install gcc libxml2-devel bzip2-devel zlib-devel \
    curl-devel libmcrypt-devel libjpeg-devel \
    libpng-devel gd-devel mysql-devel

2)编译并安装

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

#!/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/

配置php-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

然后,开始fpm

sudo /etc/init.d/php-fpm start

安装并设置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.com

2)创建Web文档根目录并删除其下的index.php,以显示phpinfo切换到用户root,运行

mkdir /var/www/fcgi-bin
for i in {1..3}; do
    web_root=/var/www/web$i
    mkdir $web_root
    echo "" > $web_root/index.php
done

注意:空/ var/www/fcgi-bin目录是必需的,请勿在以后删除

3)创建Apache配置文件(附加到httpd.conf)

NameVirtualHost *:80

# module settings
# mod_fcgid

        idletimeout 3600
        processlifetime 7200
        maxprocesscount 17
        maxrequestsperprocess 16
        ipcconnecttimeout 60 
        ipccommtimeout 90

# mod_fastcgi with php-fpm

        FastCgiExternalServer /var/www/fcgi-bin/php-fpm -host 127.0.0.1:9000



# virtual hosts...

#################################################################
#1st virtual host, use mod_php, run php-5.1
#################################################################

        ServerName web1.example.com
        DocumentRoot "/var/www/web1"

        
                
                        AddHandler php5-script .php
                
        

        
                DirectoryIndex index.php index.html index.htm
                Options -Indexes FollowSymLinks
                Order allow,deny
                Allow from all
        


#################################################################
#2nd virtual host, use mod_fcgid, run php-5.2
#################################################################

        ServerName web2.example.com
        DocumentRoot "/var/www/web2"

        
                AddHandler fcgid-script .php
                FCGIWrapper /usr/local/php52/bin/fcgiwrapper.sh
        

        
                DirectoryIndex index.php index.html index.htm
                Options -Indexes FollowSymLinks +ExecCGI
                Order allow,deny
                Allow from all
        


#################################################################
#3rd virtual host, use mod_fastcgi + php-fpm, run php-5.3
#################################################################

        ServerName web3.example.com
        DocumentRoot "/var/www/web3"


        
                ScriptAlias /fcgi-bin/ /var/www/fcgi-bin/
                AddHandler php5-fastcgi .php
                Action php5-fastcgi /fcgi-bin/php-fpm
        

        
                DirectoryIndex index.php index.html index.htm
                Options -Indexes FollowSymLinks +ExecCGI
                Order allow,deny
                Allow from all
        


4)重启apache.尊重访问3个站点以查看phpinfo并验证结果.即:

http://web1.example.com
http://web2.example.com
http://web3.example.com

如果一切正常,您可以使用3虚拟主机之一作为模板来创建具有所需php版本的新虚拟主机.



2> Dana the San..:

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


一个想法:对于PHP 5.2.1,使用端口10521.对于5.0.0,使用10500 :)
另一种选择是在不同路径下使用CGI(或FastCGI)运行它 - 即/ cgi500 /,/ cgi528 /,...
@WayneKhan不适用于例如php 5.3.22

3> Leprechaun..:

有多个apache + php实例从来没有真正让我感到惊讶,但它可能是最简单的方法.如果你不喜欢KISS ...这是一个想法.

让你的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.so

php5.2.8.load

LoadModule php5_module /usr/local/php/5.2.8/libphp5.so

要切换版本,您所要做的就是更改apache目录中的加载和conf文件,以及其他版本的包含.您可以使用简单的bash脚本自动执行此操作(删除实际文件,复制备用版本文件,然后重新启动apache.

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

认为这应该有效,但是我再次尝试过,我也没有尝试过,因为我没有和你一样的要求.如果您尝试过,请发表评论.



4> wmac..:

注意:以下方法适用于Windows.

另一种方法(如果可以一次运行单个版本的PHP)是定义多个Apache服务,每个服务将使用不同的PHP版本.

首先使用Apache配置文件中的条件:

 
    SetEnv PHPRC C:/apache/php54/
    ScriptAlias /php/ "C:/apache/php54/"
    AddType application/x-httpd-php .php
    Action application/x-httpd-php "/php/php-cgi.exe"



    SetEnv PHPRC C:/apache/php55/
    ScriptAlias /php/ "C:/apache/php55/"
    AddType application/x-httpd-php .php
    Action application/x-httpd-php "/php/php-cgi.exe"

现在使用httpd.exe从命令行创建两个单独的服务(提升为管理员):

httpd.exe -k install -n Apache224_php54 -D php54

httpd.exe -k install -n Apache224_php55 -D php55

现在您可以一次启动上述服务之一(应该在启动另一个之前关闭一个服务).

如果您之前已将Apache安装为服务,则可以使用以下命令将其删除(将服务名称替换为您使用的服务名称):

apache -k uninstall -n Apache224

另外需要注意的是,我个人使用名为"Seobiseu"的"通知区域图标程序"来根据需要启动和停止服务.我已经为它添加了上述两项服务.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有