PHP 输出当前执行进度

一、基本概述

PHP 中在处理和执行耗时任务时一般需要实现对当前执行的进度进行输出的功能。
PHP 语言中实现上述功能可以有多种方式,例如:
  1)直接输出 HTML 进行绘制的进度
  2) 可以在执行任务时将每一个进度保到 session 中并在前端 HTML 页面结合 Ajax 以及 定时器 进行异步进度输出
PHP 语言中如果采用方式 1)进行实现时通常会遇到缓冲区的问题等不直接输出而是等所有任务执行完之后才进行输出,本文结合 PHP 语言中的 ob_* 系列函数实现了一个方式一 1)无缓存直接在 HTML 中输出进度的一个实例

二、代码实现

<?php
// 缓冲设置
ob_start();
$buffer = str_repeat(" ", 4096)."\r\n<span></span>\r\n";
// 进度设置
$total = 100;
$current_progress_value = 0;
for ($i = 0; $i <= $total; $i++) {
    // 更新当前进度
    $current_progress_value = intval(($i / $total) * 100);
    // 输出进度信息
    echo $buffer;
    echo '<script>document.body.innerHTML="";</script>';
    echo <<<EOT
    当前进度:
    <div style="display:inline-block;width: 100px;height: 20px;border: 1px solid black;">
        <div style="width: {$current_progress_value}px;height: 20px;line-height: 20px;font-size: 14px;text-align: center;background-color: darkorange;">
            <span style="color: red;">{$current_progress_value}</span>
        </div>
    </div>
    EOT;
    ob_flush();
    flush();
    // 这里模拟耗时任务
    sleep(1);
}
ob_end_flush();

三、效果预览

posted on 2021-07-08 16:12  陈先生的博客  阅读(496)  评论(0编辑  收藏  举报

导航