Composer命令不可用的根本原因是系统环境变量缺失且PHP禁用函数,需分别配置root的.bashrc、解除PHP禁用函数并重启服务、在PHP中使用绝对路径调用。

Composer 命令提示 command not found:根本不是宝塔的问题
这是典型的系统级环境变量缺失,和宝塔面板本身无关。宝塔的终端(SSH 或面板终端)默认不加载用户 shell 的 ~/.bashrc 或 ~/.profile,所以即使你本地装好了 Composer,composer 命令在宝塔里也找不到。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 先确认 Composer 是否真已安装:
which composer—— 如果没输出,说明根本没装,别急着配环境变量 - 如果输出类似
/usr/local/bin/composer,说明已装但不可见;这时要把它加进全局PATH - 不要改
/etc/profile或/etc/environment,宝塔部分服务(如计划任务、网站 PHP 运行环境)不读这些 - 正确做法是修改宝塔使用的 shell 初始化文件:
/www/server/panel/pyenv/bin/activate不影响它;应改/root/.bashrc并执行source /root/.bashrc
PHP 执行 shell_exec('composer --version') 报错:被禁用函数拦住了
宝塔默认在 php.ini 里禁用了 shell_exec、exec、system 等函数,这是 PHP 层面的拦截,和 shell 环境变量完全无关。哪怕你在终端能跑通 composer,PHP 脚本里照样失败。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 进宝塔 → 网站 → 设置 → PHP 管理 → 禁用函数 → 找到并删掉
shell_exec(如有exec、system也一并删) - 改完必须重启 PHP 服务,只重载不生效
- 注意:禁用函数列表里可能有空格或换行分隔,删的时候别带多余字符,否则 PHP 启动失败
- 不推荐仅为了 Composer 开一堆危险函数,更安全的做法是改用
proc_open+ 显式调用绝对路径(如/usr/local/bin/composer)
手动配置 PATH 后仍不生效:宝塔终端和 PHP CLI 的 PATH 不一致
宝塔的「终端」和「PHP CLI」其实是两套环境:前者走 root 用户的 shell 配置,后者走 PHP 自己的运行时环境,它压根不读 .bashrc。所以你在终端里 echo $PATH 看到有 /usr/local/bin,不代表 PHP CLI 也能找到 composer。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 验证 PHP CLI 的真实 PATH:
php -r "print_r($_SERVER['PATH']);" - 如果输出里没有 Composer 所在目录,就得在 PHP 代码里显式指定全路径,比如
shell_exec('/usr/local/bin/composer install') - 不想硬编码?可在 PHP 中动态拼接:
$composer = '/usr/local/bin/composer'; shell_exec("{$composer} update") - 别试图用
putenv('PATH=...')临时覆盖——PHP 可能已缓存原始 PATH,且该操作不保证跨进程生效
Composer 安装依赖失败:PHP 版本或扩展不匹配
很多项目 require 特定 PHP 版本或扩展(如 ext-zip、ext-openssl),而宝塔默认 PHP 可能缺这些。此时报错不是权限或命令问题,而是 Composer 在校验环境时直接退出,错误信息常含 Your requirements could not be resolved 或 ext-zip * is missing。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 进宝塔 → 软件商店 → 当前 PHP 版本 → 安装扩展 → 勾选
zip、openssl、mbstring、curl - 确认 PHP CLI 使用的是宝塔管理的那个版本:
which php应该返回/www/server/php/X.X/bin/php,不是系统自带的/usr/bin/php - 如果
php -v和宝塔面板显示的版本不一致,说明 PATH 混了,得清理 shell 的 PATH 或直接用绝对路径调用 - 某些旧版宝塔 PHP 编译时没启用
--with-curl,就算装了扩展也可能无效,此时需重新编译或换版本
事情说清了就结束。最常漏掉的是:PHP CLI 的 PATH 和终端不一致 + 禁用函数改了但没重启 PHP + Composer 路径写错成 composer.phar 却没给执行权限。这三处卡住,其他都白搭。



















