运行composer删除软件包名称/ composer要求bash文件中的软件包名称不起作用

时间:2019-12-03 09:23:44

标签: php composer-php

我面临一个独特的问题,因为我已经创建了一个脚本来使用php文件中的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

1 个答案:

答案 0 :(得分:1)

实际上,命令composer remove只能从compose.json文件中删除要求,而不会删除目录。

关于安装(您未演示),我猜测安装过程中会出现一些未显示的错误。

重要shell_exec()命令无法捕获已执行外壳程序的“标准错误”流(在the shell_exec() function reference中记录很少)。相反,对于仅输出到stderr的命令,它将返回NULL-如果执行的shell命令返回的结果代码非零,它也会返回该值,并丢弃该shell命令的所有实际输出,因此您经常错过实际错误。

如果使用shell_exec()运行的shell命令输出到标准错误流,则该​​命令将流到连接到正在运行的PHP脚本的终端,或者流到服务器错误流(通常是错误日志)(如果在以下条件下运行)服务器API-所以我建议检查一下。

话虽这么说,您可能不应将shell_exec()用于任何不重要的事情,尤其是可能失败的事情。 system()更好,因为对于以非零退出代码结尾的命令,它不返回NULL,但是最好的选择显然是使用proc_open()更为复杂。 / p>