......怎麼
我們必須假定有一些方法來確定總的工作(100%),而PHP腳本是在(與%了狀態)的地步,所以如果它是讀取/解析文本文件時,可以通過將總行數寫入數據庫或文本文件來啓動解析函數。然後,它還可以每5秒將同一個文件寫入哪個行號。 js ajax函數調用該文本文件以獲取總數和點數。當PHP文本解析器完成後,它破壞了狀態文件,以防止其佔用的服務器空間,文件名衝突等
例子:
首先,(jQuery的)AJAX功能的POST服務器:
$.post("parser.php", { file: "somefile.txt"});
//I admit, I'm not sure if this is how a file would be posted with ajax
接下來,PHP拉文件並啓動解析器功能:
$tmpName = $_FILES['userfile']['tmp_name'];
$fileName = $_FILES['userfile']['name'];
//Turn the file into an array, so that you can use the array count for status:
$content = file($tmpName);
// Get the array count as the total, as it equals the line count:
$total = count($content);
//Write the filesize to a unique "total" txt file:
$total_file = fopen($fileName."-total.txt", 'x');
fwrite($total_file, $total);
fclose($total_file);
//Pass the Array to the parser function:
parser($content, $fileName);
//Kill the file when the function is done:
unlink($fileName);
function parser ($file_array, $filename) {
//creates the status file and then closes it, to ensure that it
//exists for the loop but gets overwritten each time
$status_file = fopen($filename."-status.txt", 'x');
fclose($status_file);
foreach($file_array as $position => $data) {
//Do your parsing here //
.............
//reopen status file and wipe out what is in it already:
$status_file = fopen($filename."-status.txt", 'w');
fwrite($status_file, $position);
fclose($status_file);
}
}
因此,由於狀態和總文件共享希望上傳文件的唯一名稱,ajax函數知道去哪裏看。它可以做到這一點:
total = $.get("somefile-total.txt");
current = $.get("somefile-status.txt");
status = current/total;
嘿,感謝您的幫助。我沒有想過這樣做,這是有道理的,雖然寫入一個單獨的文本文件不是一個安全問題?應該玩一下,看看我們如何去。謝謝 – rich 2009-08-25 12:49:11
我試圖想像某種方式讓解析的腳本能夠響應ajax請求,當它解析,或有另一個腳本檢查狀態,但我很確定這些都是不太可能的。另一個選項是打開一個「長輪詢」服務器推送類型的情況,其中ajax和腳本之間的連接保持打開狀態,並且在上面的例子中循環返回到ajax函數而不是文本文件。 – Anthony 2009-08-25 13:11:27
是的,它的一個噩夢真的這...我可以堅持只是傳統的圖形...嗯 感謝您的所有幫助,雖然,其巨大的讚賞!可以研究一下長期投票的內容,我認爲它看起來相關。 – rich 2009-08-25 13:16:17