我有一个简单的PHP脚本:
exec('git pull origin master', $shell_output, $output);
print_r($shell_output);
print_r($output)
当我通过CLI php git.php
调用它时,它运行正常。我得到了预期的输出,返回值为0.当我通过Web浏览器访问该页面时,它失败并返回值为1.
我已将文件权限设置为777,并确保php.ini
不会阻止exec()
功能。
答案 0 :(得分:3)
CLI使用当前登录的用户(您)凭据运行,它很可能与Web服务器进程使用的不同。执行exec('whoami')
等验证。
答案 1 :(得分:3)
我能够在Ates Goral的帮助下解决这个问题。
为了调试这个问题,我跑了:
sudo -u www-data php git.php
了解在www-data
用户下运行时脚本的行为方式。有两个问题:
www-data
没有自己的公钥。我创建了一个并将其添加到github仓库。
.git
无法读取www-data
文件夹。这是通过chown
目录修复的,以便为I和apache都属于的组www-data
授予权限。