我想把一个包含数据的文件夹推送到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中。现在一切都很好。感谢您的回答:)