>  기사  >  백엔드 개발  >  PHP에서 진행률 표시줄을 구현하는 방법

PHP에서 진행률 표시줄을 구현하는 방법

藏色散人
藏色散人원래의
2020-09-01 10:19:383021검색

PHP에서 진행률 표시줄을 구현하는 방법: 1. "출력 버퍼 제어"를 사용하여 진행률 표시줄을 직접 출력합니다. 2. ajax를 사용하여 먼저 논리 처리 주소를 요청한 다음 세션 또는 기타 저장 매체를 사용하여 저장합니다. 처리 진행 상황.

PHP에서 진행률 표시줄을 구현하는 방법

추천: "PHP Video Tutorial"

PHP에서 진행률 표시줄을 구현하는 방법은 크게 두 가지가 있습니다. 하나는 "출력 버퍼 제어"를 사용하여 직접 출력하는 것입니다. 진행률 표시줄과 다른 하나는 ajax 방법이 있습니다

우선 "출력 버퍼 제어" 방법에 대해 이야기해 보겠습니다.

이 방법은 주로 PHP의 여러 버퍼 기능을 사용합니다. 이 방법은 변경하지 않고 직접 실행할 수 있습니다.

<?php
set_time_limit(0);  //设置程序执行时间
ignore_user_abort(true);    //设置断开连接继续执行
header(&#39;X-Accel-Buffering: no&#39;);    //关闭buffer
header(&#39;Content-type: text/html;charset=utf-8&#39;);    //设置网页编码
ob_start(); //打开输出缓冲控制
echo str_repeat(&#39; &#39;,1024*4);    //字符填充
$width = 1000;
$html = &#39;<div style="margin:100px auto; padding: 8px; border: 1px solid gray; background: #EAEAEA; width: %upx"><div style="padding: 0; background-color: white; border: 1px solid navy; width: %upx"><div id="progress" style="padding: 0; background-color: #FFCC66; border: 0; width: 0px; text-align: center; height: 16px"></div></div><div id="msg" style="font-family: Tahoma; font-size: 9pt;">正在处理...</div><div id="percent" style="position: relative; top: -34px; text-align: center; font-weight: bold; font-size: 8pt">0%%</div></div>&#39;;
echo sprintf($html, $width+8, $width);
echo ob_get_clean();    //获取当前缓冲区内容并清除当前的输出缓冲
flush();   //刷新缓冲区的内容,输出
$length = 11;
for($i=0; $i<$length; $i++) {
    sleep(rand(1,2));
    $proportion = ($i+1)/$length;
    if($i+1 == $length){
        $msg = &#39;同步完成&#39;;
    }else{
        $msg = &#39;正在同步第&#39; . ($i+1) . &#39;个用户&#39;;
    }
    $script = &#39;<script>document.getElementById("percent").innerText="%u%%";document.getElementById("progress").style.width="%upx";document.getElementById("msg").innerText="%s";</script>&#39;;
    echo sprintf($script, intval($proportion*100), intval(($i+1)/$length)*$width, $msg);
    echo ob_get_clean();    //获取当前缓冲区内容并清除当前的输出缓冲
    flush();   //刷新缓冲区的内容,输出
}

참고: 진행률 표시줄 스타일은 약간 수정한 후 원하는 스타일로 바꿀 수 있습니다.

"ajax 방법"은 좀 더 번거롭습니다. 이 방법의 논리는 Ajax를 사용하여 먼저(마지막 비동기 요청을 사용하는 것이 가장 좋음) "논리적 처리" 주소를 요청하는 것입니다. 논리적 처리 중에 세션이나 기타 저장 매체(예: Memcache, Redis 등)를 사용합니다. 처리 진행 상황을 저장하고 ajax를 사용하여 실시간 피드백을 달성하기 위해 다른 쿼리 진행 주소를 요청(동기 요청 선호) 정기적으로 확인하는데 setinterval을 사용하지 않고 setTimeout을 사용하는 이유는 설정 시간이 너무 짧으면 요청 응답 시간이 너무 길어서 표시 혼란이 생기기 때문입니다

​ 2.

사용 후 시간 내에 세션을 해제하도록 주의하세요. 그렇지 않으면 세션이 잠겨 있으므로 쿼리가 계속 대기하게 됩니다. 사용 후 해제하는 것이 가장 좋습니다.


위 내용은 PHP에서 진행률 표시줄을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.