phpenv仅切换php版本,不管理扩展、fpm、web服务器或composer环境;laravel部署失败主因是php-fpm配置、扩展启用、composer运行环境、nginx socket路径及mysql连接方式未同步对齐。

phpenv 本身不参与 Laravel 部署,它只管切换 PHP 版本;真正跑 Laravel 的是 PHP-FPM、Apache 或 Nginx,而依赖安装靠 Composer。 直接用 phpenv 切到 PHP 8.2 后却跑不起来 Laravel?大概率卡在环境链路断点上,不是版本问题,而是后续环节没对齐。
phpenv 切换 PHP 版本后,Laravel 仍报错“Class not found”或“mbstring missing”
这是最常见误判:以为 phpenv global 8.2 一执行,所有扩展就自动启用——其实 phpenv 只改了 php 命令指向,不碰 php.ini 和扩展配置。
你得手动确认当前生效的 php.ini 路径,并检查扩展是否加载:
- 运行
php --ini,看输出的 “Loaded Configuration File”,别信默认路径 - 打开那个
php.ini,确认这几行没被注释:extension=mbstring、extension=pdo_mysql、extension=openssl - 重启 PHP-FPM(如
sudo systemctl restart php8.2-fpm)或 Web 服务器,否则修改不生效
composer install 失败,提示 “Your requirements could not be resolved”
phpenv 切换版本后,Composer 可能还在用旧 PHP SAPI 运行(比如 CLI 用的是 8.1,但 Composer 缓存或 shebang 指向了别的版本)。
验证方式:which composer → 看是不是软链接到 /usr/bin/composer;head -1 $(which composer) → 检查第一行是否为 #!/usr/bin/env php,如果是,它会走 phpenv shell 当前设置;否则可能固定绑死某个 PHP。
更稳妥的做法是:
- 用
phpenv which php查当前 PHP 路径,然后显式调用:/path/to/php8.2/bin/php /usr/local/bin/composer install - 或者重装 Composer:
curl -sS https://getcomposer.org/installer | /path/to/php8.2/bin/php -- --install-dir=/usr/local/bin --filename=composer
Nginx 报 502 Bad Gateway,日志里写 “connect() to unix:/run/php/php8.1-fpm.sock failed”
这说明 Nginx 配置里写的 socket 路径,和你 phpenv 切换的 PHP-FPM 实际监听路径不一致。phpenv 不管理 PHP-FPM 服务,那是系统级守护进程。
关键动作:
- 查你实际启用的 PHP-FPM 服务名:
systemctl list-units | grep fpm,常见如php8.2-fpm.service - 确认该服务已启动:
sudo systemctl start php8.2-fpm - 检查 Nginx 配置中
fastcgi_pass是否匹配,例如:fastcgi_pass unix:/run/php/php8.2-fpm.sock; - 别漏掉
sudo systemctl reload nginx
php artisan migrate 报错 “SQLSTATE[HY000] [2002] No such file or directory”
这不是 Laravel 或 phpenv 的问题,而是 .env 里的 DB_HOST=127.0.0.1 和 MySQL 实际连接方式不匹配。本地开发常用 socket 连接,但 Laravel 默认走 TCP。
快速验证:mysql -u root -p -h 127.0.0.1 如果连不上,但 mysql -u root -p(无 -h)可以,说明 MySQL 监听的是 socket。
解决方法二选一:
- 改 .env:
DB_HOST=localhost(注意不是 127.0.0.1),PHP 会自动 fallback 到 socket - 或显式指定 socket:
DB_SOCKET=/var/run/mysqld/mysqld.sock(路径按mysql --help | grep socket输出为准)
最容易被忽略的一点:phpenv 切换 PHP 版本后,php artisan 命令本身没问题,但 public/index.php 被 Web 服务器调用时,走的是 PHP-FPM 的配置,和 CLI 完全独立——两个地方的扩展、ini 设置、甚至 OPCache 开关都可能不同。调试时务必分清是 CLI 环境出错,还是 FPM 环境出错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











