PHP

如何在一个服务器上运行多个版本的PHP

Thien Tran Duy
分享

在这篇文章中,我们将演示一个解决方案,安装多个版本的Phalcon和PHP,并在单个web服务器上运行它们。PHP 5.5。X和5.6。这里将使用X,但您可以将它们替换为其他版本。任何支持PHP-FPM的服务器都应该足够了,但我们建议使用Nginx。本教程中使用的环境是Fedora OS—一种Linux系统,但对于任何其他*nix OS的说明几乎相同。

初步的报告

本教程将介绍PHP 5.5的安装。使用Phalcon 1.3。x和PHP 5.6。使用Phalcon 2.0.0。我们还将构建一些额外的PHP扩展,如APC、memcache、memcached和ioncube。

安装Nginx

Nginx在Fedora OS中是一个可用的包,我们可以按照如下方式安装:

Sudo yum安装nginx

然后,我们为Nginx创建系统启动链接并启动它

Sudo chkconfig nginx在Sudo服务nginx启动

构建PHP

在开始使用PHP之前,我们需要安装构建PHP5的先决条件:

  • GCC或其他编译器套件。
  • 提供C标准库,包括头文件。
  • 这是PHP使用的构建管理工具。
  • Autoconf(2.59或更高版本)用于生成配置脚本。
  • automake(1.4或更高),生成Makefile。在文件中。
  • Libtool,帮助我们管理共享库。
  • bison(2.4或更高版本),用于生成PHP解析器。
  • (可选)re2c,用于生成PHP lexer。由于git存储库已经包含了一个生成的lexer,如果您希望对它进行更改,则只需要re2c。

在Centos/Fedora上,您可以使用以下命令安装所有这些:

sudo yum install gcc libxml2-devel libXpm-devel gmp-devel libicu-devel t1lib-devel aspell-devel openssl-devel bzip2-devel libcurl-devel libjpeg-devel libvx -devel libpng-devel libtidy-devel libxsl -devel libmcrypt-devel pcre-devel curl-devel mysql-devel ncurss -devel net-snmp-devel libevent-devel libtool-ltdl-devel libc-client-devel postgresql-devel bison gcc make

然后我们需要得到它的源代码。有两种方法可以做到这一点:您可以从PHP的下载页面或者克隆git存储库Github

我们建议从git中查看源代码,因为它为您提供了一种简单的方法,使您的安装保持最新,并尝试不同版本的代码。如果您想为PHP提交补丁或提取请求,还需要git签出。

要克隆存储库,在终端上运行以下命令:

Sudo mkdir /opt/source && CD /opt/source git克隆git@github.com:php/php-src.git && CD php-src

默认情况下,您将在主分支上,因此如果您想移动到开发版本,您需要检查稳定分支。为例。

PHP5.3PHP-5.3PHP5.4PHP-5.4PHP5.6PHP-5.6PHP的头Git checkout master

在进入各个构建步骤之前,我们必须为“默认”PHP构建执行一些命令。这只需要从git构建。

sudo。/ buildconf

。/ buildconf生成配置脚本。这可能需要几分钟。

在我看来,将整个web服务器存储在一个目录中是最好的,所以我使用/ opt在这里。打开终端,输入以下命令。

Sudo mkdir -p /opt/php-5.6 Sudo mkdir -p /opt/php-5.5

一旦. / configure脚本是通过上面的步骤生成的,您可以使用它来定制您的PHP构建。你可以使用-help列出所有支持的选项:

. / configure——help

上面的命令将列出各种通用选项,所有基于autoconf的配置脚本都支持这些选项。前面已经提到了其中一个-prefix =DIR,它将更改制作安装.另一个有用的选项是-C,它将在配置中缓存各种测试的结果。缓存文件和加速后续. / configure调用。只有当您已经有了一个可用的构建,并且希望在不同的配置之间快速更改时,使用此选项才有意义。

下面是一些有用的设置:

[…用法:./configure [OPTION]…(价值VAR =)……要分配环境变量(例如,CC, CFLAGS…),请将它们指定为VAR=VALUE。有关一些有用变量的描述,请参见下面。选项的默认值在括号中指定。配置:-h,——help显示此帮助并退出——help=特定于此包的短帮助选项——help=递归显示所有包含的包的短帮助-V,——version显示版本信息并退出-q,——quiet,——silent do not print ' checking…' messages——cache- FILE =FILE缓存测试结果在FILE [disabled] -C,——config-cache别名为'——cache- FILE =config。-n,——no-create不创建输出文件——srcdir=DIR在DIR[配置DIR或' ..']安装目录:——prefix= prefix install architecture-independent files in prefix [/usr/local]——exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [prefix]默认情况下,' make install'将安装' /usr/local/bin', ' /usr/local/lib'等目录下的所有文件。您可以使用'——prefix'指定' /usr/local'以外的安装前缀,例如'——prefix=$HOME'。为了更好地控制,请使用下面的选项。 Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] [...]

在完成准备工作后,我们将安装PHP 5.6版本。执行如下命令:

. / configure \——prefix = / opt / php - 5.6 \——with-pdo-pgsql \ with-zlib-dir \——with-freetype-dir \ enable-mbstring \——with-libxml-dir = / usr \ enable-soap \——enable-calendar \——使用curl \ with-mcrypt \ with-zlib \——与gd \ with-pgsql \——disable-rpath \——enable-inline-optimization \ with-bz2 \ with-zlib \——enable-sockets \ enable-sysvsem \——enable-sysvshm \ enable-pcntl \——enable-mbregex \ with-mhash \——enable-zip \使用mysql——with-pcre-regex \ \ with-pdo-mysql——with-mysqli \——with-png-dir=/usr \——with-openssl \——with- ffm -user=nginx \——with- ffm -group=nginx \——with-libdir=lib64 \——with- ftp \——with-imap \——with-imap-ssl \——with-kerberos \——with-gettext \——with-gd \——with-jpeg-dir=/usr/lib/——enable-fpm

最后一个开关(-enable-fpm)使这个PHP版本可以使用PHP- fpm。如果你想在Apache上使用这个PHP-FPM版本,请使用——with-fpm-user = apache而且——with-fpm-group = apache.另一方面,如果你想使用这个带有nginx的PHP-FPM版本,请使用——with-fpm-user = nginx而且——with-fpm-group = nginx

一条成功的消息应该像这样打印在终端上:

[…创建libtool附加配置标签“CXX”到libtool生成文件创建主/ internal_functions.c创建主/ internal_functions_cli.c地位  +--------------------------------------------------------------------+ | 许可:| |本软件受PHP许可证,可在这| |分布在文件许可。通过继续本| |安装过程,您将受到本许可协议条款的约束。| |如果您不同意本许可证的条款,您必须在此时终止| |安装过程。| +--------------------------------------------------------------------+ 感谢您使用PHP。配置。状态:正在创建php5。规范配置。状态:正在创建main/build-defs.h配置。状态:正在创建脚本/phpize配置。状态:正在创建脚本/man1/phpize。1配置。状态:正在创建脚本/php-config config。状态:正在创建脚本/man1/php-config。1配置。status: creating sapi/cli/php.1 config.status: creating sapi/fpm/php-fpm.conf config.status: creating sapi/fpm/init.d.php-fpm config.status: creating sapi/fpm/php-fpm.service config.status: creating sapi/fpm/php-fpm.8 config.status: creating sapi/fpm/status.html config.status: creating sapi/cgi/php-cgi.1 config.status: creating ext/phar/phar.1 config.status: creating ext/phar/phar.phar.1 config.status: creating main/php_config.h config.status: executing default commands

现在,你可以使用make来执行实际的编译:

使

此操作的主要结果将是用于已启用的sapi的PHP二进制文件(默认为sapi/cli/ PHP和sapi/cgi/ PHP -cgi),以及modules/目录中的共享扩展。

现在可以运行“make install”将PHP安装到/usr/local(默认)或其他目录——前缀配置。在这种情况下/ opt / php - 5.6

Sudo make install

请注意制作安装不会创建ini文件。

/opt/php-5.6/bin/php——ini配置文件(php.ini)路径:/opt/php-5.6/lib加载的配置文件:(none)扫描额外的。ini文件:(none)解析额外的。ini文件:(none)

将php.ini和php-fpm.conf拷贝到正确的目录:

sudo cp/选择//php-src/php-fpm相依默认的/选择/php-5.6//php-fpmConf sudo cp/选择//php-src/phpini-生产/选择/php-5.6/自由/phpini

我们再次验证和检查php版本。

/opt/php-5.6/bin/php——ini配置文件(php.ini)路径:/opt/php-5.6/lib加载配置文件:/opt/php-5.6/lib/php.ini扫描额外的。ini文件解析:(none) ###检查php /opt/php-5.6/bin/php——version php 5.6.2-dev (cli)(构建:2014年10月2日17:20:23)版权所有(c) 1997-2014 php Group Zend Engine v2.6.0,版权所有(c) 1998-2014 Zend Technologies

开放/ opt / php - 5.6 / etc / php-fpm.conf并调整监听行中的设置。您必须更改为未使用的端口(例如:9001;端口9000可能正在被Fedora使用)

vi / opt / php - 5.6 / etc / php-fpm.conf
[…[pid = run/php-fpm.]pid[…user = nginx group = nginx[…][…][…]) # include = / opt / php - 5.6 / etc / pool.d / * . conf

初始化脚本设置

您可能需要为新的php-fpm创建一个初始化脚本。幸运的是,PHP 5.3+已经为您提供了它,只需将init脚本复制到您的目录并更改权限:

Sudo cp /opt/source/php-src/sapi/fpm/init.d.p p-fpm /etc/init.d/php5.6-fpm Sudo chmod 755 /etc/init.d/php5.6-fpm

初始化脚本已经准备好了。现在,你可以启动,停止和重新加载php-fpm:

Sudo /etc/init.d/php5.6-fpm start Sudo /etc/init.d/php5.6-fpm stop Sudo /etc/init.d/php5.6-fpm reload

构建第二个PHP (5.5.x)

我们打开终端并输入以下命令。

git checkout php - 5.5 sudo。/ buildconf . / configure \——prefix = / opt / php - 5.5 \——with-pdo-pgsql \ with-zlib-dir \——with-freetype-dir \ enable-mbstring \——with-libxml-dir = / usr \ enable-soap \——enable-calendar \——使用curl \ with-mcrypt \ with-zlib \——与gd \ with-pgsql \——disable-rpath \——enable-inline-optimization \ with-bz2 \ with-zlib \——enable-sockets \ enable-sysvsem \——enable-sysvshm \——enable-pcntl \ enable-mbregex \ with-mhash enable-zip \ \——with-pcre-regex \——with-mysql \——with-pdo-mysql \——with-mysqli \——with-png-dir=/usr \——enable-gd-native-ttf \——with-openssl \——with- ffm -user=nginx \——with- ffm -group=nginx \——with-libdir=lib64 \——enable-ftp \——with-imap \——with-imap-ssl \——with-kerberos \——with-gettext \——with-gd \——with-jpeg-dir=/usr/lib/ \——enable-fpm make && sudo make install

构建PHP Phalcon扩展

要安装多个版本的Phalcon,包括Phalcon 2.0,我们需要安装Zephir

Git克隆https://github.com/json-c/json-c.git CD json-c sh autogen.sh ./configure make && sudo make install Git克隆https://github.com/phalcon/zephir CD zephir sudo ./install -c. sh

安装PHP扩展的方法有很多种。我们将使用phpize来构建它。

Phpize的作用与。/ buildconf脚本用于PHP构建:首先,它将通过复制文件导入PHP构建系统到您的扩展$前缀/ lib / php /构建.这些文件包括acinclude.m4(PHP的M4宏),phpize.m4(它将被重命名为configure。在您的扩展和包含主要构建指令)和run-tests.php

然后,phpize将调用autoconf生成. / configure文件,该文件可用于自定义扩展构建。例如安装memcached,您必须添加——enable-memcache

记住!您必须指定——with-php-config选项(除非您只有一个单独的、全局的PHP安装)。否则. / configure无法正确确定PHP版本和标志。此外,php-config脚本还确保“make install”命令将移动生成的文件*所以文件到正确的扩展目录。

构建第一个PHP Phalcon (2.0)

git clone http://github.com/phalcon/cphalcon cd cpalcon && git checkout 2.0.0 zephir compile cd ext && /opt/php-5.6/bin/phpize ./configure——with-php-config=/opt/php-5.6/bin/php-config make && sudo make install安装共享扩展:/ opt/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/

请检查是否成功

ls / opt / php - 5.6 / lib / php /扩展/不-调试-非zt型- 20131226 /

安装扩展后。你仍然需要通过在php.ini文件中包含它来激活它。

Sudo su echo "extension=phalcon。输入>> /opt/php-5.6/lib/php.ini exit

构建第二个PHP Phalcon (1.3.x)

git克隆http://github.com/phalcon/cphalcon cd cpalcon && git checkout master cd ext && /opt/php-5.5/bin/phpize ./configure——with-php-config=/opt/php-5.5/bin/php-config make && sudo make install安装共享扩展:/ opt/php-5.5/lib/php/extensions/no-debug-non-zts-20121212/

我们再次检查以确保安装成功

Ls /opt/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/ sudo su echo "extension=phalcon. Ls /opt/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/ sudo su echo "输入>> /opt/php-5.5/lib/php.ini exit

配置Nginx

vi /etc/nginx/nginx.conf

下面的配置将创建两个服务器:phalcon-prd。localhost运行在PHP 5.5上。X和phalcon-dev。localhost适用于PHP 5.6.x。这是一个例子,你可以自定义为任何你想要的,参见Nginx文档

[…] HTTP{包含mime.types;default_type应用程序/八进制;sendfile;keepalive_timeout 65;# gzip;包括/etc/nginx/conf.d/ * . conf;索引Index .php Index .html Index .htm;#生产环境Phalcon服务器{监听80;server_name phalcon-prd.localhost; root /usr/share/nginx/html/phalcon-prd; location / { index index.php; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9001; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } #Development environment Phalcon server { listen 80; server_name phalcon-dev.localhost; root /usr/share/nginx/html/phalcon-prd; location / { index index.php; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9002; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } } [...]

设置本地主机文件

如果你使用的是Linux系统,你可以编辑主机文件:

Sudo vi /etc/hosts .使用实例

新的主机文件将如下所示。

[…127.0.0 localhost phalcon-dev。localhost phalcon-prd。Localhost::1 localhost6。Localdomain6 localhost6[…]

这个会拦截所有的请求phalcon-dev.localhost而且phalcon-prd.localhost然后将它们发送到您的服务器。

测试

为了进行测试,我们创建了一个名为test.php的新文件,并将其放入与上述Nginx配置对应的文件夹中。在每个文件中,我们添加以下命令。

<?phpphpinfo? >

现在,运行test.php在每个服务器上,我们看到一个Phalcon 1.3.x文件phpinfo ()http://phancon-prd.localhost/test.phphttp://phancon-dev.localhost/test.php应该有phpinfo ()Phalcon 2.0.x。

总之

在本教程中,我们学习了如何在我们的服务器上轻松地拥有多个正在运行的PHP版本,如果需要,每个版本都有自己的一组不同的扩展。例如,如果你正在做共享托管,或者如果你需要支持古老的遗留应用程序,同时能够在前沿版本上开发和部署,这可以派上用场。

在下面的评论中留下你的反馈,和往常一样,如果你喜欢这篇文章,请分享它!

Baidu