Valet 同时使用多个 PHP FPM 版本

更新:Valet 3.x 后支持不同版本的 PHP 站点共存,无需此文的操作,详见 翻译:Laravel Valet 3 发布,支持多版本 PHP(终于等到你)

说明

现状:系统里使用 HomeBrew 安装了 php7.4/php8/php8.1 ,代码库里有多个项目依赖于不同版本的 PHP。

Valet 只支持 valet use php@8.0 命令来切换版本,就如 Valet 集成环境《Laravel 8 中文文档》 文档里提到的:

注意: 即使您安装了多个 PHP 版本,Valet 服务一次只能提供一个 PHP 版本。

不过 Valet 说到底还是在使用 NGINX 和 PHP-FPM ,修改下他们的配置就可以很简单实现共存:

  1. 修改 PHP-FPM 配置,创建单独版本的 sock ;
  2. 修改 NGINX 配置,按需设置不同项目使用不同的 sock;

1. 修改 PHP 配置

PHP 配置目录:

$ cd /usr/local/etc/php

罗列版本:

$ ls
7.4 8.0 8.1

修改 PHP FPM 8.0 的 配置:

$ vi 8.0/php-fpm.d/valet-fpm.conf

下面这一行在 PHP FPM 运行时会根据配置创建 UNIX Socket :

listen = /Users/{用户名}/.config/valet/php80.sock

其他版本的也按照此种方法修改,例如 7.4 的改为:

listen = /Users/{用户名}/.config/valet/php74.sock

修改完成后查看目前 PHP-FPM 服务的状态:

brew services list

重启下 PHP FPM :

brew services restart php@7.4
brew services restart php@8.0

重启成功后,使用以下命令 可以看到 php74.sock 和 php80.sock 两个 socket 文件:

ls -al ~/.config/valet/

原本的 valet.sock 可以删掉。

2. 修改 NGINX 配置

假如本地有 app1.test 和 app2.test 两个项目,他们对应使用 PHP 7.4 和 8.0 。

先使用 (注意没有后缀):

valet secure app1
valet secure app2

secure 命令会让站点使用 https ,不过我们需要的是这个命令的副作用,就是在 ~/.config/valet/Nginx 目录下创建对应的配置信息:

$ ls ~/.config/valet/Nginx
app1.test app2.test

打开站点的配置信息:

vi ~/.config/valet/Nginx/app1.test

找到 fastcgi_pass 修改为你需要的 PHP 版本 socket

fastcgi_pass "unix:/Users/{用户名}/.config/valet/php74.sock";

同样的 app2 的 Nginx 配置信息也按此法修改使用 php80 的 socket。

最后使用命令:

valet restart

会重启 NGINX 等服务。

至此配置完成。

摈弃世俗浮躁,追求技术精湛
Summer
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 6

不错不错,现在我php7.4和php8.0来会折腾,太难了

2年前 评论

要是可以通过不同的后缀 test 使用不同的版本就很方便了 有时候需要多个版本切换测试

2年前 评论
雪风 2年前

分享另一种思路,通过创建删除符号链接实现版本切换 github.com/yangliuan/ubuntu-develo...

file

2年前 评论

使用docker-compose 来管理开发环境,多版本php毫无压力

2年前 评论

美滋滋 不用切php版本

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!