升级PHP后Laravel Valet切换至PHP8.1报错,artisan serve正常
排查方向与解决方案
1. 检查PHP 8.1的FPM权限配置
Valet依赖PHP-FPM运行,大概率是PHP8.1的FPM进程用户/组与站点文件权限不匹配:
- 打开PHP8.1的FPM配置文件:
open /usr/local/etc/php/8.1/php-fpm.d/www.conf - 找到
user和group配置项,修改为你的macOS用户名和staff组:user = YOUR_MAC_USERNAME group = staff - 重启PHP8.1的FPM服务并重启Valet:
brew services restart php@8.1 valet restart
2. 移除站点目录的系统隔离属性
macOS的隔离属性可能限制PHP8.1进程访问站点文件:
- 检查站点目录的扩展属性:
xattr -l /MY_LARAVEL_PROJECT - 如果存在
com.apple.quarantine属性,执行移除命令:xattr -d com.apple.quarantine /MY_LARAVEL_PROJECT
3. 重置Valet的PHP版本链接与缓存
可能Valet对PHP8.1的链接存在残留问题:
- 查看当前Valet的PHP链接指向:
ls -la ~/.config/valet/valet-php - 手动重新链接PHP8.1到Valet:
ln -sf /usr/local/opt/php@8.1/bin/php ~/.config/valet/valet-php - 清除Valet缓存并重新安装配置:
valet clear-cache valet install
4. 检查PHP 8.1的open_basedir限制
PHP的open_basedir配置可能限制了站点目录的访问:
- 打开PHP8.1的php.ini文件:
open /usr/local/etc/php/8.1/php.ini - 找到
open_basedir配置项,直接注释掉(如果不需要路径限制):;open_basedir = - 重启PHP8.1 FPM和Valet:
brew services restart php@8.1 valet restart
5. 修复PHP 8.1的FPM套接字权限
Valet通过套接字与PHP-FPM通信,套接字权限异常会导致访问失败:
- 查看PHP8.1的FPM套接字路径:
通常输出为grep listen /usr/local/etc/php/8.1/php-fpm.d/www.conflisten = /usr/local/var/run/php@8.1-fpm.sock - 检查套接字的权限与归属:
ls -la /usr/local/var/run/php@8.1-fpm.sock - 如果权限不符合
rw-rw----或归属不对,在www.conf中添加以下配置:listen.owner = YOUR_MAC_USERNAME listen.group = staff listen.mode = 0660 - 重启PHP8.1 FPM和Valet
内容的提问来源于stack exchange,提问作者kennethjayden
相关产品推荐
相关产品推荐

