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 ,修改下他们的配置就可以很简单实现共存:
- 修改 PHP-FPM 配置,创建单独版本的 sock ;
- 修改 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 等服务。
至此配置完成。
不错不错,现在我php7.4和php8.0来会折腾,太难了
要是可以通过不同的后缀 test 使用不同的版本就很方便了 有时候需要多个版本切换测试
分享另一种思路,通过创建删除符号链接实现版本切换 github.com/yangliuan/ubuntu-develo...
使用docker-compose 来管理开发环境,多版本php毫无压力
美滋滋 不用切php版本