我有一个简单的 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()
功能。
CLI 使用当前登录的用户(您)的凭据运行,它很可能与 Web 服务器进程使用的不同。做一个exec('whoami')
等来验证。
在 Ates Goral 的帮助下,我能够解决这个问题。
为了调试这个问题,我跑了:
sudo -u www-data php git.php
查看脚本在www-data
用户下运行时的行为。有两个问题:
www-data
没有自己的公钥。我创建了一个并将其添加到 github 存储库中。并且该.git
文件夹无法被www-data
. 这是通过chown
ing 目录以授予www-data
我和 apache 都属于的组的权限来解决的。