2012-03-19 7 views
-1

私は、非同期データ処理用のPHPコンポーネントを探しています。PHP一括処理ソリューション

基本的には、いくつかのデータ処理の進捗状況を表示するjavascriptでリフレッシュされた進行状況バーが表示されたページを表示するだけです。

バックエンドでは、データ処理の制限を定義します。これは、個々のアイテムを処理するための開始、終了、および関数です。

CMSとフレームワークには、このためのソリューションがたくさんあります。私は、私のアプリケーションに含めることができる生のPHPで何かを探しています。

+0

私のこの回答を見て、あなたを助けてください:http://stackoverflow.com/questions/9062078/asychronous-php/9062164#9062164 – xbonez

+0

あなたはどのような情報の例を挙げることができますか?処理? –

+0

私たちにお知らせいただきありがとうございます。私はあなたが探しているものを見つけることを願っています! –

答えて

0

私はあまりにもずっと前に何か類似したことをしました。 JSONオブジェクトとしてテキストファイルに進捗状況を記録する関数を書いた。その後、jQueryの要求に応じてJSONオブジェクトをブラウザに返すPHP関数を作成しました。

私のPHPコードは次のようになります。

function logProgress($task, $status, $progress) { 


$basedir = "/var/www/" . SITE_ROOT . "/"; 
$log_file = $basedir . "logs/progress.log"; 

$logFileContent = file_get_contents($mrp_log_file); 

if($logFileContent){ 
    $logFileArray = json_decode($logFileContent, TRUE); 
} else { 
    $logFileArray = array(); 
} 

$logFileArray[$task]=array('task'=>$task,'status'=>$status,'progress'=>$progress); 

$logFile = fopen($log_file, 'w+') or error_log("Failed to open progress file $mrp_log_file for writing"); 

fwrite($logFile, json_encode($logFileArray)); 

fclose($logFile); 

} 

データを取得するには、このように簡単です:jQueryのから

function readProgressLog() { 
//Returns a JSON object stored in the progress log. 
$basedir = "/var/www/" . SITE_ROOT . "/"; 
$log_file = $basedir . "logs/progress.log"; 

$logFileContents = file_get_contents($log_file); 

return $logFileContents; 

}

、次の2つのAJAX呼び出しになるだろう、 1つはプロセスを開始し、もう1つはテキストファイルをポーリングします。

function updateProgress() { 
var data = { 
    action:'getProgressUpdate'}; 
var settings = {success: function(json){ 
    var done = false; 

    if(json!=null) { 
     //Put your code to update the progress bar here. 
        //I look for a JSON property called Done to flag the process as completed.      
     if(json.Done==null) { 
      var t2 = setTimeout("updateProgress()", 1000); 
     } else { 
      clearTimeout(t2); 
      done = true; 
      clearProgressLog(); 
     } 
    } else { 
     var t2 = setTimeout("updateProgress()", 1000); 
    } 
}, 
data:data, 
cache:false, 
type: 'POST', 
dataType:"json"}; 

$.ajax('/ajax/polling.ajax.php', settings); 

}

私が気づいたことの一つは、そうでない場合は、あなたのポーリング、あなたはポーリングAJAX呼び出しは、あなたのプロセスのAJAX呼び出しとは異なるPHPファイルを使用して確認してくださいということです:ポーリング呼び出しのための私のjavascriptは、このようになりますコールはプロセスコールが終了するまで終了しません。

+0

私のコードブロックで書式設定をお詫びします。私はStack ExchangeのUIにまだ慣れています。 – chapkom

+0

お返事ありがとうございます、私はあなたのコードからいくつかのアイデアを取ることができます。私は前にjQuery UIのプログレスバーを使用し、ファイルの代わりにPHPセッションで進捗変数を保存することを考えていました。複数のバッチプロセスが同時に発生した場合のプロセスにバッチIDを割り当てることもできます。 – Flupkear