转过来的,原文看这里,https://www.symfony.fi/page/how-to-run-both-php-5-6-and-php-7-x-with-homebrew-on-os-x-with-php-fpm

How to run both PHP 5.6 and PHP 7.x with Homebrew on OS X with PHP-FPM

The latest iterations of PHP in the 7.x branch are great improvement over the last PHP 5 version, which is 5.6. However many applications don't support it and it will be useful to run many versions on a local environment. In my case a laptop running macOS (OS X) and using the Homebrew packet manager. This is how to run both PHP 5.6 and PHP 7.1 simultaneously.

PHP 7.0 was a large release of the popular programming language and platform powering large parts of the web. The new release of PHP brings performance improvements and new features. The PHP community goes to great lengths to make sure that the release is backwards compatible. To a large part this is true, but there are certain incompatibilities which are described in the official Migration Guide.

eZ Publish 5 is a hybrid application with both contemporary PHP as well as older code dating back to 2003. That version was an intermediary step to more to a whole new architecture. Development of new features on eZ Publish was frozen in 2014 when the team focused on the new product known as eZ Platform.

Despite not receiving new features, eZ Publish is still a valid product and will continue to be supported way until 2021. The last major version was released before PHP 7 was launched and will likely never receive (official) support for it. The new Symfony Framework powered eZ Platform is already stable with PHP 7 for development use.

This is the case not only for eZ products, but many developers working with PHP will need to keep many versions of the runtime in action for years to come.

Installing two versions of PHP with Homebrew

Developers working with PHP on OS X (El Capitan) have a number of options for installing PHP. Ranging from enabling the built in PHP to running a dedicated virtual machine for the LAMP environment. One great option is to use the Homebrew packet manager.

Homebrew is a lot like APT or Yum familiar to many Linux users, but for OS X. If you do don't have Homebrew installed yet, then head over to the homepage or the installation guide. As an added benefit to some approaches of running PHP on OS X, you can easily install PHP extensions required to run eZ using brew, such as php-imagick, php-intl, php-xsl and others.

Brew has a number of PHP versions in it's repositories. They are specified in the package names with a number, such as php56 for PHP 5.6 and php70 for PHP 7.0. The "dot releases" in PHP bring new functionalities and can brake backwards compatibility, so in the future there will be packages like php71 for PHP 7.1 in the future.

Once you've got the packet manager up and running it's time to install PHP. Let's start with installing PHP 5.6:

 brew install php56

This will take a while to run, but after that you will have the latest PHP 56 installed. Once this is done you can check that you've now got PHP 56 installed by issuing the php --version command:

janit@turska ~ -  $ php --version
PHP 5.6.18 (cli) (built: Feb 6 2016 06:53:53)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

However in this case we'll want to make PHP 7.0 the default version, so we'll need to issue a command to remove symlinks to the PHP files:

janit@turska ~ -  $ brew unlink php56
Unlinking /usr/local/Cellar/php56/5.6.18... 18 symlinks removed

This now removed filesystem links pointing to php56. Next we'll want to install PHP 7.0:

 brew install php70

Once this is done, verify that the default version is now PHP 7:

PHP 7.0.4 (cli) (built: Mar  9 2016 12:26:14) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

To make it easy for us to run PHP 5.6 on the command line by creating a symlink and using it:

 ln -s /usr/local/Cellar/php56/5.6.NN/bin/php /usr/local/bin/php56

Once this is done you can use PHP 5.6 from the command line with the command php56.

Setting up multiple PHP versions using PHP-FPM

PHP is most often used to power web applications, so we'll need to link our two PHP versions to versions. PHP-FPM is a modern way of running PHP with a process manager and the FastCGI protocol. This enables high performance as well as easy switching between various versions of PHP.

Using PHP-FPM is possible with the Apache web server as well, but in this case we'll use the Nginx web server. To install Nginx with Homebrew, follow these instructions. They contain all that you need to get Nginx and PHP-FPM running on OS X.

By default PHP-FPM is configured to use ports for communication. An IP Addressand a Port together form a Socket, which allows running multiple backends with a single IP. In case of PHP-FPM the default socket used is marked in the virtual host configurations (located in /usr/local/etc/nginx/servers/) with:

fastcgi_pass 127.0.0.1:9000;

This means that FastCGI requests coming in to Nginx will be passed to a PHP process manager listening at IP 127.0.0.1 and port 9000. The port 9000 is just a default value and we can modify it by changing the configurations. We'll leave PHP 7.0 to listen in the default port, but set 5.6 to listen to port 9056.

Open up the configuration file in a text editor: /usr/local/etc/php/5.6/fpm.d/www.conf

listen = 127.0.0.1:9056

Now we've got two PHP-FPMs configured to listening in different ports (9000 and 9056), but they're not running at the moment. You'll need to both of them to processes that will start when booting up the machine. This is done using the standard Homebrew approach.

Create the directory for Launch agents (it might already exist):

mkdir -p ~/Library/LaunchAgents

Copy startup scripts to the LaunchAgents directory:

cp /usr/local/opt/php70/homebrew.mxcl.php70.plist ~/Library/LaunchAgents/
cp /usr/local/opt/php56/homebrew.mxcl.php56.plist ~/Library/LaunchAgents/

Finally launch both PHP-FPM processes - only required this time, they will start automatically on next boot up:

launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php70.plist
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

Next you'll want to create two virtual hosts for Nginx and configure them to different ports. In your eZ Platform config, for example you'll only need to switch between the two lines with comments to go from PHP 5.6 to 7.0 and back to 5.6:

# PHP 7.0
fastcgi_pass 127.0.0.1:9000; # PHP 5.6
# fastcgi_pass 127.0.0.1:9056;

That's it, you can now switch back and forth between different PHP versions when using OS X without the overhead of running virtual machines.

[macOS] PHP双版本,5.6跟7.1的更多相关文章

  1. windows下怎么解决Python双版本问题

    相信大家会在windows下会遇到Python双版本问题 当我们装了Python2和Python3时我们好只能在命令栏调出最高版本的那个低版本的难道消失了吗?今天我们就解决这个问题! 1.下载 我们在 ...

  2. python在windows(双版本)及linux环境下安装

    python下载 下载地址:https://www.python.org/downloads/ 可以下载需要的版本,这里选择2.7.12和3.6.2 下面第一个是linux版本,第二个是windows ...

  3. 【转】Windows下安装python2和python3双版本

    [转]Windows下安装python2和python3双版本 现在大家常用的桌面操作系统有:Windows.Mac OS.ubuntu,其中Mac OS 和 ubuntu上都会自带python.这里 ...

  4. 如何在openWRT系统上实现双版本

    最近由于项目需要,需要在AR9331芯片单板(原来是4MBFlash,后来扩充到16MB Flash)上,实现openwrt双版本机制. 双版本的好处,主要是:在升级版本过程中,如果遇到断电等情况,不 ...

  5. centos下搭建python双版本环境

    目录 centos下搭建python双版本环境 一.安装python3 1.理清自带python位置 2.更新用于下载编译python3的相关包 3.安装pip 4.用pip安装wget 5.用wge ...

  6. python在windows(双版本)及linux(源码编译)环境下安装

    python下载 下载地址:https://www.python.org/downloads/ 可以下载需要的版本,这里选择2.7.12和3.6.2 下面第一个是linux版本,第二个是windows ...

  7. [转帖]如何在VirtualBox中运行macOS Catalina Beta版本

    如何在VirtualBox中运行macOS Catalina Beta版本 secist2019-08-03共2179人围观系统安全 https://www.freebuf.com/articles/ ...

  8. [linux]centos7.4上升级python2版本到python3.6.5 【安装双版本,默认python3】

    版本声明 centos7.4 前言:linux上的python默认是版本2的,之前学django项目用的是3的版本 所以得升级下版本~ 1.下载python3.6.5 cd /usr/local/ w ...

  9. Windows下安装python2和python3双版本

    现在大家常用的桌面操作系统有:Windows.Mac OS.ubuntu,其中Mac OS 和 ubuntu上都会自带python.这里我们只介绍下Windows(我用的Win10)环境下的pytho ...

随机推荐

  1. flask wigs 服务器

    Nginx:Hey,WSGI,我刚收到了一个请求,我需要你作些准备,然后由Flask来处理这个请求. WSGI:OK,Nginx.我会设置好环境变量,然后将这个请求传递给Flask处理. Flask: ...

  2. error connecting: Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置

    [参考]Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置 [参考][数据库-MySql] MySqlConnection error connec ...

  3. vue双向绑定的时候把遍历的数组转为了字符串,并且再转回去数组进行绑定

    我的问题大家可能不太懂,我详细再解释一下,就是我通过遍历一个大的数组,多层遍历之后,最后的值还是一个小的数组,形如: aaa:[ { bbb1:[ "111","&quo ...

  4. h5 ios手机 隐藏input输入光标

    前面在做一个H5中用到的6位数字密码弹框(类似支付.微信那种)时,遇到一个可怕问题,那就是在浏览器和安卓中是不显示输入光标的,但是在ios手机上光标总是能看见,像穿透一样地显示最外层. 先说下实现密码 ...

  5. cf 938E

    哇自闭了. 一样个毛啊. 和之前见过的几道感觉很类似啊. 首先一个数如果有贡献那么在他后面一定有一个大于它的数,并且前面的全比他小,然后我就跑偏了... 于是我们先排个序,显然无影响,我们可以考虑从 ...

  6. Linux 的基本操作(系统的远程登录)

    系统的远程登录 首先要说一下,该部分内容对于linux初学者来讲并不是特别重要的,可以先跳过该章节,先学下一章,等学完后再回来看这一章. Linux大多应用于服务器,而服务器不可能像PC一样放在办公室 ...

  7. Vue.js——60分钟快速入门(转载)

    Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们 ...

  8. CF886C Petya and Catacombs

    题目描述 A very brave explorer Petya once decided to explore Paris catacombs. Since Petya is not really ...

  9. LPVOID 没有类型的指针

    可以将LPVOID类型的变量赋值给任意类型的指针,比如在参数传递时就可以把任意类型传递给一个LPVOID类型为参数的方法,然后在方法内再将这个“任意类型”从传递时的“LPVOID类型”转换回来. 示例 ...

  10. ES6(六) --- Symbol

    概述: ES5 中属性名都是字符串,这容易就造成命名的冲突,特别是在混入模式(mixin模式)下.为解决这个问题ES6 引入了Symbol, Symbol是一种新的基本数据类型,表示独一无二的值!   ...