我正在尋找用於異步數據處理的PHP組件。PHP批量處理解決方案
基本上我需要的是顯示一個頁面的進度條,用JavaScript刷新顯示一些數據處理的進度。
在後端,您將定義您的數據處理限制。這是調用處理單個項目的開始,結束和功能。
在CMS和框架上有很多解決方案。我正在尋找原始PHP中的某些東西,這些東西可以包含在我的應用程序中。
我正在尋找用於異步數據處理的PHP組件。PHP批量處理解決方案
基本上我需要的是顯示一個頁面的進度條,用JavaScript刷新顯示一些數據處理的進度。
在後端,您將定義您的數據處理限制。這是調用處理單個項目的開始,結束和功能。
在CMS和框架上有很多解決方案。我正在尋找原始PHP中的某些東西,這些東西可以包含在我的應用程序中。
我在不久前做了類似的事情。我寫了一個函數,將進度記錄爲一個JSON對象的文本文件。然後我寫了一個PHP函數,它按照jQuery的要求以特定的時間間隔將該JSON對象返回給瀏覽器。
我的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);
}
檢索的數據是如此簡單:
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;
}
從jQuery的,你有你兩個AJAX調用,一個啓動你的進程,一個輪詢文本文件。我對輪詢呼叫的JavaScript看起來像這樣:
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文件,否則你投票直到進程調用完成後,調用纔會結束。
看看我的這個答案,以防萬一它可以幫助你:http://stackoverflow.com/questions/9062078/asychronous-php/9062164#9062164 – xbonez 2012-03-19 18:14:19
你可以給你一個什麼樣的信息的例子處理? – 2012-03-19 18:22:31
謝謝你讓我們知道。我希望你找到你正在尋找的東西! – 2012-03-19 18:46:03