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

Bash脚本在PHP页面运行失效但终端可正常执行的问题排查

问题原因与解决方案

核心原因

XAMPP中PHP进程的环境变量PATH和你终端用户的PATH不一致。system_profiler命令位于/usr/sbin或/usr/bin目录下,但XAMPP的Apache/PHP进程默认的PATH里没有包含这些系统命令目录,导致脚本找不到该命令。

而你在终端能正常运行脚本,是因为终端会加载用户的shell配置文件(如.zshrc、.bash_profile),自动把系统命令目录加入PATH。

解决方法

方法1:在脚本中使用system_profiler的绝对路径

  1. 先在终端执行以下命令,获取system_profiler的绝对路径:
    which system_profiler
    
    通常会输出/usr/sbin/system_profiler。
  2. 修改你的sysinfo1.sh脚本,把所有system_profiler替换成上面得到的绝对路径,比如:
    # 原脚本中的行
    # system_profiler SPSoftwareDataType
    # 替换为
    /usr/sbin/system_profiler SPSoftwareDataType
    

方法2:在脚本开头手动添加PATH环境变量

在sysinfo1.sh的最开头添加一行,把系统命令目录加入PATH:

export PATH="/usr/sbin:/usr/bin:$PATH"
# 后面的原有脚本内容

方法3:在PHP的proc_open中传递完整环境变量

在调用proc_open时,手动传入包含正确PATH的环境变量数组:

// 先在终端执行 echo $PATH,复制输出的内容
$env = [
    'PATH' => '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/你的其他路径'
];
$descriptorspec = [
    0 => ['pipe', 'r'],
    1 => ['pipe', 'w'],
    2 => ['pipe', 'w']
];
$process = proc_open('./sysinfo1.sh', $descriptorspec, $pipes, __DIR__, $env);
// 后续的读取和关闭逻辑

额外验证

修改后,重新访问PHP页面,应该就能正常获取system_profiler的输出,不会再出现"command not found"的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:57:05