Php 运行composer remove package name/composer要求bash文件中的包名无效

Php 运行composer remove package name/composer要求bash文件中的包名无效,php,composer-php,Php,Composer Php,我面临着一个独特的问题,因为我创建了一个脚本,使用php文件中的api安装包,该api使用shell_exec运行bash文件,该bash文件用于安装包或删除包 但这两个命令不起作用,但在我运行composer-v或它给出输出的任何其他命令时。那有什么许可证吗 $projectPath = './uninstall.sh '.$name.' '.$version; $page = shell_exec($projectPath); .sh file composer re

我面临着一个独特的问题,因为我创建了一个脚本,使用php文件中的api安装包,该api使用shell_exec运行bash文件,该bash文件用于安装包或删除包

但这两个命令不起作用,但在我运行composer-v或它给出输出的任何其他命令时。那有什么许可证吗

   $projectPath = './uninstall.sh  '.$name.'  '.$version;
   $page = shell_exec($projectPath);

   .sh file
composer remove $1 $2  --- not working
composer -v     -- working

命令
composer remove
确实应该只从
compose.json
文件中删除需求-它不删除目录

关于安装(您没有演示),我猜在安装过程中有一些错误没有显示出来

重要
shell_exec()
命令没有捕获已执行shell的“标准错误”流(这在中的文档记录得很差)。相反,对于仅输出到stderr的命令,它返回
NULL
——如果执行的shell命令返回非零结果代码,它也会返回该值,从而丢弃该shell命令的所有实际输出,因此您经常会错过实际错误

如果shell命令使用
shell_exec()
运行,并输出到标准错误流,则该错误流将被传输到连接到正在运行的PHP脚本的终端,或者如果在服务器API下运行,则会被传输到服务器错误流(通常是错误日志)——因此我建议对此进行检查


话虽如此,您可能不应该将
shell_exec()
用于任何非琐碎的事情,尤其是可能失败的事情
system()
更好,因为对于以非零退出代码结尾的命令,它不会返回
NULL
,但最好的选择显然是使用
proc_open()

您的shell脚本文件似乎不完整:您是否输入了hashbang头(
!/bin/sh
)?另外,当你说“不工作”时,你的意思是-根本没有输出,或者显示了一些错误消息-如果是,什么错误?@Guss根本没有输出它没有安装任何包或在删除时只从package.json中删除名称,但不删除文件夹