PhpStorm的Environment variables仅影响当前运行/调试配置启动的PHP进程,不修改系统环境、不影响Terminal,Web请求需服务器配置或.env文件支持。

运行配置里填 Environment variables 输入框,不是设系统环境变量
PhpStorm 的「Environment variables」输入框只影响当前运行/调试配置启动的 PHP 进程,不修改系统 PATH、不写入 ~/.zshrc、也不影响 Terminal 工具窗口。它本质是给 php 命令加 -d 和环境变量参数,比如实际执行的是:php -d variables_order=EGPCS APP_ENV=local script.php。
- 键值对用分号
;分隔,Windows/macOS/Linux 都一样,别用冒号或换行 - 值里含空格或特殊字符(如
C:\my app\config)要加英文双引号:CONFIG_PATH="C:\my app\config" - 如果变量名重复(比如同时在全局设置和运行配置里写了
APP_ENV),运行配置里的值会覆盖全局设置 - 不要在这里写
PATH=...—— 它不会追加到原有 PATH,而是完全替换,容易导致composer或扩展找不到
为什么 getenv('APP_ENV') 在 Terminal 里返回 false
Terminal 工具窗口直接调用你系统的 shell(zsh、bash 或 cmd.exe),完全不读取 PhpStorm 运行配置里的环境变量。它只认你 shell 启动时加载的那些变量(比如 ~/.zshrc 里 export 的)。
- 验证方式:在 Terminal 里执行
php -r "var_dump(getenv('APP_ENV'));",返回false是正常现象 - 真正生效场景:右键 PHP 文件 →
Run 'xxx.php',或执行一个已绑定环境的 PHPUnit 配置 - 想让 Terminal 也带变量?得手动改 shell 配置文件,或者用
env APP_ENV=local php script.php临时注入
项目级 Environment 和运行配置绑定必须两步走
光在项目根目录右键新建一个 myapp-prod 环境,不等于它就自动生效。必须显式挂载到具体配置上,否则 getenv() 拿不到任何值。
- 先启用环境:右键项目根目录 →
Environments→ 右键你的环境名 →Enable - 再绑定配置:打开
Edit Configurations→ 选中目标配置(如某个PHP Script)→ 切到Environment标签页 → 下拉框选中已启用的环境名(不是变量列表) - 下拉为空?说明没启用过环境,或项目未刷新 —— 尝试右键项目根目录 →
Reload project,或重启 PhpStorm -
Include parent environment variables默认不勾选;勾选后会把系统HOME、USER等全带进来,可能意外覆盖你设的DB_HOST
调试 Web 请求时环境变量不走这个入口
Xdebug 断点触发的是 Web SAPI(如 Apache 或 php-fpm),它不通过 PhpStorm 的 CLI 运行配置启动,所以你在「Environment variables」里填的变量对浏览器访问无效。
立即学习“PHP免费学习笔记(深入)”;
- Web 场景要靠服务器配置:Apache 用
SetEnv,Nginx 用fastcgi_param,php-fpm 用env[APP_ENV] = local配置段 - 或在代码里硬编码兜底:
$_SERVER['APP_ENV'] ??= 'local'; - 想统一管理?用
.env文件 +vlucas/phpdotenv,比依赖 IDE 注入更可靠、更可移植
环境变量在 PhpStorm 里是“按需注入”,不是“全局接管”。最容易被忽略的是:Terminal 不继承、Web 请求不生效、多环境切换后必须重启对应配置才能更新变量值。


















