You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx FastCGI下PHP-FPM执行exec时如何传递正确的ENV环境变量?

解决PHP-FPM环境变量传递问题(macOS/Brew场景)

问题根源

macOS通过Brew安装的PHP-FPM默认不会继承终端环境的完整PATH等变量,导致PHP脚本通过exec()/shell_exec()执行系统命令时找不到可执行文件,也无法读取终端里正常的环境变量;而Debian/Ubuntu的PHP-FPM默认配置已处理好环境变量继承,所以无此问题。

解决方案(macOS)

1. 定位PHP-FPM配置文件

Brew安装的PHP,配置文件路径为:

/usr/local/etc/php/<你的PHP版本>/php-fpm.d/www.conf

比如PHP 8.2对应的路径是/usr/local/etc/php/8.2/php-fpm.d/www.conf

2. 修改环境变量配置

打开上述配置文件,找到以下配置项(默认可能被注释):

;env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  • 去掉开头的分号取消注释
  • 将PATH值替换为你终端里的实际PATH(可在终端执行echo $PATH获取),比如:
    env[PATH] = /opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
    
  • 如需添加其他环境变量(比如HOME),可追加类似配置:
    env[HOME] = /Users/你的用户名
    

3. 重启PHP-FPM服务

在终端执行重启命令(替换为你的PHP版本):

brew services restart php@8.2

临时应急方案(不推荐全局使用)

如果不想修改配置,可在PHP脚本里临时设置环境变量:

// 把Brew的PHP路径加入PATH
putenv('PATH=' . getenv('PATH') . ':/opt/homebrew/bin');
var_dump(exec("php -v"));

为什么Debian/Ubuntu无需额外配置?

Debian/Ubuntu官方包的PHP-FPM默认会继承系统的基础环境变量,且php命令默认安装在/usr/bin目录(属于系统默认PATH),所以脚本能直接找到命令并读取完整环境变量。

内容的提问来源于stack exchange,提问作者DarkVss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:33:15