我有一个需要很长时间才能执行的PHP脚本,因为每个操作都必须对另一个网站进行SOAP调用。我想添加一个进度条指示器,以便我可以看到此脚本的完成百分比。
我相信这样做的方法是执行一个执行PHP的异步Ajax调用,然后再进行另一个更新%complete的Ajax调用。但我把这些问题放在一起有很多问题。
到目前为止,我只有这个:
<script language='Javascript'>
$().ready(init);
function init() {
$.get('importStatement.php');
}
$(function() {
$( "#progressbar" ).progressbar({
value: 0
});
});
</script>
<div id="progressbar"></div>
我的PHP脚本输出完成百分比($ i):
$current_day = $date->today;
$days_to_read = 45;
// Scroll through the last $days_to_read dates and import a statement for that day
for ($i = 0; $i < $days_to_read; $i++) {
$statement_date = $date->convertToMysql($current_day);
$bank->importStatement($statement_date, true);
$percent = intval($i/($days_to_read-1) *100). "%";
// disable caching
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-cache, must-revalidate');
header('Pragma: no-cache');
header('Expires: Mon, 26 Jul 1991 05:00:00 GMT'); // disable IE caching
header('Content-Type: text/plain; charset=utf-8');
echo $i;
$current_day = $date->decreaseDay($current_day);
}
我为什么要争斗是因为输出进度的importStatement.php与进度条“断开连接”或无关。进度条需要从此脚本输入。有人可以指导我吗?
答案 0 :(得分:0)
之前我已经实现了这样的进度条(不确定这是最好的方法,但它对我有用)。
有另一个MySQL表来存储进度。
当您启动实际报告时,请在“进度”表中创建一个带有作业ID的条目。让长时间运行的PHP脚本不断更新“进度”表,而不是将进度回显到屏幕上。将AJAX进度条指向一个快速的PHP脚本,该脚本接受作业ID并从数据库中回显进度。