如何在一个服务器上运行多个版本的PHP
在这篇文章中,我们将演示一个解决方案,安装多个版本的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.3:PHP-5.3PHP5.4:PHP-5.4PHP5.6:PHP-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-fpm.Conf sudo cp/选择/源/php-src/php.ini-生产/选择/php-5.6/自由/php.ini
我们再次验证和检查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.php在http://phancon-dev.localhost/test.php应该有phpinfo ()
Phalcon 2.0.x。
总之
在本教程中,我们学习了如何在我们的服务器上轻松地拥有多个正在运行的PHP版本,如果需要,每个版本都有自己的一组不同的扩展。例如,如果你正在做共享托管,或者如果你需要支持古老的遗留应用程序,同时能够在前沿版本上开发和部署,这可以派上用场。
在下面的评论中留下你的反馈,和往常一样,如果你喜欢这篇文章,请分享它!