我有一个小的PHP函数,我用它来跟踪php执行进度。将进度放入txt文件中,并使用js函数每0.1秒检索一次。
现在的问题是,如果我在循环中使用sleep(1);
,进度条只会更新,尽管refreshProgress()
函数在执行php脚本期间运行了大约40次,这超过了足以将数据保存在12个循环的txt文件中。
同样通过在保存后回显文件内容我可以看到正确保存百分比,所以我不确定问题出在哪里,我肯定不想使用睡眠功能,因为我将运行稍后大量数据的脚本。
这里有2张图片来说明使用sleep(1)和不使用sleep时的区别 这是PHP脚本:
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
$cars_all_count = 13;
$file = "to/this/path/progress.txt";
$i = 0;
foreach ($cars as $key=>$carslist){
// some function
foreach($carslist as $single_car){
$start = microtime(true);
$i++;
// usleep(250000);
UpdateProgress( $file, $i, $cars_all_count );
$time_elapsed_secs = microtime(true) - $start;
echo '<pre>loop:'.$i.'<br>';
print_r($time_elapsed_secs);
echo '<pre>';
}
}
function UpdateProgress( $file, $i, $cars_all_count ) {
// Calculate the percentatage.
$percent = intval($i/$cars_all_count * 100);
// Put the progress percentage and message to array.
$arr_content = $percent;
// Write the progress into a file
file_put_contents($file, $arr_content);
echo file_get_contents($file).'<br>';
}
我用来刷新进度的js函数:
function refreshProgress() {
var progress_url = progress_file_link;
jQuery.get(progress_url, function(response) {
console.log(response);
if (response.length == 0){
return false;
}
var parsedData = response;
jQuery("#progress").find('.bar').css('width', parsedData + '%');
// console.log(parsedData);
// If the process is completed, we should stop the checking process.
if (parsedData == 100) {
window.clearInterval(timer);
completed();
}
});
}