shell_exec(';git push origin master';)赢得';不起作用


shell_exec('git push origin master') won't work

我想把一个包含数据的文件夹推送到atlassian Git存储库中的一个空存储库中。存储库是通过rest api创建的。远程原点已设置。当我进入时

$ git push origin master

在外壳中,一切都很好。当我使用PHP交互式shell并输入时

exec('git push origin master');

它也起作用。但是当在我的PHP文件中调用代码时,什么也不会发生。当然,代码是一样的。我在正确的工作目录中(我在shell_exec之前用chdir()更改它)。没有错误报告(即使error_reporting设置为E_ALL),并且当我在exec()中设置输出参数时,我得到一个空数组。

有人能帮忙吗?

当您通过shell交互执行代码或命令时,您是在您的用户帐户和shell环境下执行的。

我认为这不起作用的原因是您正在以另一个用户的身份执行PHP脚本(并且可能缺少ssh/git环境配置)。

需要更多的信息来更好地回答你的问题,但你可能想从验证用户开始,你正在执行你的PHP文件,因为它也可以通过执行以下操作来执行git push origin master

sudo su -s /bin/bash -c "cd /my/git/repo/dir; git push origin master" MYPHPEXECUTEUSER

我发现我必须添加'2>&1'添加到shell命令的末尾,以在使用shell_exec()时获得错误输出。它返回"致命:无法读取"url"的密码:未配置设备"。我只需要以http基本身份验证的方式将密码添加到url中。现在一切都很好。感谢您的回答:)