当我使用 PuTTY 连接到我的服务器,并在控制台中手动输入所有 git 命令时,git pull将显示如下内容:remote: Enumerating objects: 3, done.remote: Counting objects: 100% (3/3), done.remote: Compressing objects: 100% (1/1), done.remote: Total 2 (delta 1), reused 2 (delta 1), pack-reused 0Unpacking objects: 100% (2/2), done.但是,当我通过 PHP 运行相同的命令时,我shell_exec()什么也没得到。它执行所有请求的操作,但在此过程中不向我显示任何信息。甚至最终没有成功或失败。它没有输出。PuTTY 控制台显示的所有这些信息来自哪里,但 PHP 不会输出?如何通过 PHP 访问这些信息?
2 回答
慕勒3428872
TA贡献1848条经验 获得超6个赞
为了完整起见,我发布了我为解决此问题而编写的实际代码:
shell_exec( 'git pull --progress origin master 2>/home/user/domain.com/stderr.txt' );
这会将所有“进度”样式的输出消息写入一个名为 stderr.txt 的文件,然后可以从单独的进程动态读取该文件。
qq_遁去的一_1
TA贡献1725条经验 获得超7个赞
Unix 命令行程序通过询问标准流 (stdin/stdout/stderr) 是否连接到终端来区分交互式和非交互式用法。PuTTY 是一个终端,因此git pull
以交互模式运行。git pull
将进度写入 stderr。
在网络(CGI、PHP 等)下,stderr 被重定向到 httpd 服务器日志,因此git pull
在非交互模式下运行。您可以git pull
使用 option强制显示进度,--progress
但您还必须将 stderr 重定向到 stdout,以便您可以捕获输出。
- 2 回答
- 0 关注
- 155 浏览
添加回答
举报
0/150
提交
取消