2017-01-02 9 views
0

git2svnを使用してgitに移行するLOT(ほぼ300)の古いSVNリポジトリがあります。PHPスクリプトのCMD - フィードバックを入手する

GOLANGとPYTHONを考えた後、私は最後に、PHPを使うのが一番簡単な方法だと決めました。 悪い 疑わしい決定かもしれないかもしれませんが、それは容易に思えました。

15分後、テストで多かれ少なかれ実行中のI did have a scriptです。醜いスクリプトが、それはワンタッチです。

問題は、プロセスが多くの時間を要し、単純なほぼ空のレポが30秒かかる可能性があるということです。そして1分。大規模なものでも、10分さえも、生産に持ち込む前に、私はいくつかのフィードバックメカニズムを持ちたいと思っています。実際に何が起こっているのかを実際に見ることができます。今の

..as、スクリプトが出力にそのようなコマンドのフィードバックを行います。

$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>"; 

..but私ができる、これは各レポが処理を終えた後にのみ..本当のcmd実行ようにされていませんが手順を参照してください。

私はそれは私が必要なものに近いかもしれない見つけた唯一の問題は、hereだった - しかし、正直なところ - 私は答えから多くを理解していなかった...

私はそれだけで1タイマースクリプトです知っている - しかし、実際にそれを達成する方法(そして可能であれば)にユースケースが関心を持っていました。

私はwin7ローカルマシンにいますが、可能であれば* nixも知りたいと思います。

答えて

0

代わりにコマンドを実行し、データベースのレコードを更新するバックグラウンドでスクリプトまたはプログラムを実行することをお勧めします。レコードを変更するためにAJAXなどを使用してサーバーをポーリングできます。これにより、ユーザーにとってすばらしい環境が実現します。

データベーステーブルの列の名前は "finished"のように指定できます。ブール値がtrueになると、その完全性がわかり、出力をデータベースに格納できます。

0

shell_execプロセスが終了するまで待機します。 CMDと同じように、プロセスを作成して聞く必要があります。

$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; 
    } 
} 
を使用してください。
関連する問題