私は、phpプログラムの複数のインスタンスを同じバージョンに更新し続けることができる方法に取り組んでいます。
私のソフトウェアは、最新バージョンに関する情報を含むRSSフィードをチェックします。利用可能なアップデートがあることがわかると、「アップデート」ページへのリンクが表示されます。ユーザーが[更新]リンクをクリックすると、更新が必要な各ファイルを一度に1つずつ更新するjquery関数があります。
$.getJSON('http://softwareserver.com/updateFileList.php?fromver=1.0', function(data) {
var filesToDo = data.length;
$.each(data, function(num, file) {
num = num + 1;
action = file.charAt(0);
name = file.substring(1);
if ( action == "+" )
{
$('#upsole').append("<p><strong>Adding</strong> " + name + ". . .</p>");
$.get("{$var['sbpurl']}/updateAction.php", { action: "add", file: name, revision: "{$TMP['rev']}" } );
}
else if ( action == "-" )
{
$('#upsole').append("<p><strong>Removing</strong> " + name + ". . .</p>");
$.get("{$var['sbpurl']}/updateAction.php", { action: "remove", file: name, revision: "{$TMP['rev']}" } );
}
else if ( action == "~" )
{
$('#upsole').append("<p><strong>Updating</strong> " + name + ". . .</p>");
$.get("{$var['sbpurl']}/updateAction.php", { action: "update", file: name, revision: "{$TMP['rev']}", version: "{$TMP['ver']}" } );
}
var completed = num / filesToDo * 100;
$('#barcolor').css('width', completed + '%');
$('#numProgress').html(completed.toFixed(0));
if ( completed == 100 )
{
$('#conutt').html('<a href="index.php" class="button"> Continue > </a>');
$('#upsole').append("<p><strong>Update Complete</strong></p>");
}
});
});
更新中のdivコンテナに各ファイル名を表示します。また、すべてのファイルが更新されるまで各ファイルが更新されると、0から100%まで変化するプログレスバーがあります。しかし、すべてが完了すると、単純に0から100まで変化します。各ファイルが希望どおりに更新されるため、実際には進行状況は表示されません。
プログレスバーは0%から7%、15%など、100%に達するまで続くと思いますが、すべてが完了するまで何も起こりません。先ほど言ったように、0%から100%になります。
$ .eachはこれに最適なソリューションではありませんか?