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