phpenv仅管理PHP解释器版本,不涉及站点配置;多站点需由Web服务器(如Apache/Nginx)通过server_name、DocumentRoot等指令管理,并通过环境变量在应用层区分行为。

phpenv 不管理“站点”,它只管理 PHP 版本。你混淆了两个完全不同的东西:PHP 版本管理 和 Web 服务器多站点配置。
如果你在查 phpenv 怎么给 site-a.com 或 site-b.net 加备注、分组、打标签——它做不到,也不该做。这是 Web 服务器(Nginx/Apache)和应用层逻辑的事。
下面说清楚三个关键点,避免继续踩坑:
phpenv 的作用边界很窄:只管 PHP 解释器版本
- 它不碰域名、不读
DocumentRoot、不解析HTTP_HOST - 它的
local命令只在当前目录写一个.php-version文件,内容就是8.3.13这样的纯版本号 - 没有
phpenv site add、phpenv site list或任何“站点”相关子命令
多站点真正的管理位置在 Web 服务器配置里
你需要手动或脚本化维护的是:
立即学习“PHP免费学习笔记(深入)”;
-
/etc/nginx/sites-available/site-a.com这类文件里的server_name和root - Apache 的
/etc/apache2/sites-available/site-b.conf中的ServerName和DocumentRoot - 如果想加“备注”,直接在配置文件顶部写注释就行:
# [备注] 用于客户后台,PHP 7.4,数据库前缀 cust_
# [备注] 新版 API 服务,需启用 opcache,禁用 xdebug
站点级 PHP 行为差异,靠环境变量 + 应用代码控制
不要指望 phpenv 给每个站点设不同 php.ini 参数。正确做法是:
- 在 Nginx 配置中为每个
server块注入环境变量:fastcgi_param SITE_ENV "site_a";
- 或 Apache 的
VirtualHost里:SetEnv SITE_ENV site_b
- 然后 PHP 里用
$_SERVER['SITE_ENV']切换配置文件、日志路径、DB 连接参数等
真正容易被忽略的是:很多人花半天折腾 phpenv local 8.2,结果发现访问网站还是跑在 PHP 8.1 上——因为 Web 服务器根本没连到那个版本的 PHP-FPM socket。你得同步改 fastcgi_pass 指向对应版本的 sock,比如 unix:/run/php/php8.2-fpm.sock。否则 phpenv 再灵,也影响不到 HTTP 请求的执行环境。



















