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

CMD from PHP script - get feedback

我有很多(将近 300 个)旧 SVN 存储库要使用 git2svn 迁移到 git。

经过考虑GOLANG和PYTHON,我最终决定使用PHP是最简单的方法。可能是一个 糟糕的 有问题的决定,但这似乎很容易。

因此,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>";

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

我发现可能接近我需要的唯一问题是 here - 但老实说 - 我对答案的了解不多...

我知道这只是一个一次性脚本 - 但用例让我对如何实际实现它很感兴趣(如果可能的话)。

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

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

数据库中的列 table 可以命名为类似 "finished" 的名称,一旦该布尔值为真,您就知道它已完成,输出可以存储在数据库中。

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;
    }
}