来自PHP脚本的CMD - 获得反馈

时间:2017-01-02 02:18:39

标签: php git command-line-interface feedback

我有一个很多(差不多300个)旧的SVN存储库,可以使用git2svn迁移到git。

在考虑了GOLANG和PYTHON后,我终于决定最简单的方法是使用PHP。可能是一个 bad 可疑的决定,但这似乎很容易。

所以,15分钟后,我did have a script或多或少在测试中运行正常。丑陋的剧本,但它是一个单一的计时器。

问题是这个过程需要花费很多时间,即使是简单的几乎空的回购也需要30秒。甚至一分钟。在大的 - 甚至10分钟 - 所以在投入生产之前,我想有一些反馈机制 - 所以我实际上可以看到发生了什么。

..截至目前,脚本确实输出了命令反馈:

$cmd = "cd ".$GITrepoPath." && svn2git svn://127.0.0.1/". $repoName . " --username " .$SVNusername ." --authors authors.txt --notags --nobranches --notrunk";
            $output = shell_exec($cmd);
            echo "<pre>$output</pre>";

..但这只是在每个仓库完成处理之后..不像真正的cmd执行,我可以看到这些步骤。

我发现的唯一问题可能与我所需要的是here - 但老实说 - 我对答案的理解并不多......

我知道它只是一个单一计时器的脚本 - 但是用例让我对如何实现它(如果可能的话)感兴趣。

我在win7本地机器上,但如果可能的话也想知道* nix。

2 个答案:

答案 0 :(得分:0)

我建议在运行该命令的后台运行脚本或程序,然后更新数据库中的记录,然后可以使用AJAX或其他任何方式轮询服务器以进行记录更改。这为用户提供了一个良好的环境。

数据库表中的列可以命名为“finished”,一旦布尔值为true,则表示它已完成,输出可以存储在数据库中。

答案 1 :(得分:0)

shell_exec等待进程关闭。您必须创建流程并收听它,就像CMD一样。以这种方式使用exec功能:

$cmd = ''; // your command here
$output_storage = [];
$output_showed = [];
$result = null;
exec($cmd, $output_storage, $result);
while( $result === null ){
    $diff = array_diff($output_storage, $output_showed);
    if( $diff ){
        // all new outputs here as $diff
        $output_showed = $diff;
    }
}