PHP에서 진행률 표시줄을 구현하는 방법은 무엇입니까
PHP가 진행률 표시줄을 구현하는 방식은 다음과 같습니다. 1. ajax를 사용하여 논리적 처리 주소를 요청합니다. 2. 논리적 처리 중에 세션을 사용하여 처리 진행 상황을 저장합니다. 3. ajax를 사용하여 쿼리할 다른 주소를 요청합니다. 진행을 통해 실시간 피드백을 얻을 수 있습니다.
PHP에서 진행률 표시줄을 구현하는 방법에는 크게 두 가지가 있습니다. 하나는 "출력 버퍼 제어"를 사용하여 진행률 표시줄을 직접 출력하는 방법이고, 다른 하나는 Ajax 방식입니다.
(학습 영상 추천: java 강좌)
먼저 "출력 버퍼 제어" 방법에 대해 이야기해 보겠습니다.
이 방법은 주로 PHP의 여러 버퍼 기능을 사용합니다. 이 방법은 구성 파일을 변경하지 않고 직접 실행할 수 있습니다.
<?php set_time_limit(0); //设置程序执行时间 ignore_user_abort(true); //设置断开连接继续执行 header('X-Accel-Buffering: no'); //关闭buffer header('Content-type: text/html;charset=utf-8'); //设置网页编码 ob_start(); //打开输出缓冲控制 echo str_repeat(' ',1024*4); //字符填充 $width = 1000; $html = '<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>'; 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 = '同步完成'; }else{ $msg = '正在同步第' . ($i+1) . '个用户'; } $script = '<script>document.getElementById("percent").innerText="%u%%";document.getElementById("progress").style.width="%upx";document.getElementById("msg").innerText="%s";</script>'; echo sprintf($script, intval($proportion*100), intval(($i+1)/$length)*$width, $msg); echo ob_get_clean(); //获取当前缓冲区内容并清除当前的输出缓冲 flush(); //刷新缓冲区的内容,输出 }
"ajax 방법"은 좀 더 번거롭습니다. 이 방법의 논리는 ajax를 사용하여 "논리적 처리"의 주소를 먼저 요청(바람직하게는 비동기 요청)하고 세션을 사용하는 것입니다. 또는 논리적 처리 중에 미디어(예: memcache, redis 등)는 처리 진행 상황을 저장하고 실시간 피드백을 달성하기 위해 진행 상황을 쿼리하기 위해 ajax를 사용하여 다른 주소를 요청(바람직하게는 동기 요청)합니다.
코드는 다음과 같습니다.
첫 번째는 html 파일입니다.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script type="text/javascript" src="./jquery-1.10.2.min.js"></script> <title>同步</title> </head> <body> <input type="button" name="syn" id="syn" value="同步" /> <div id="progressBar" style="margin: 50px auto; padding: 8px; border: 1px solid gray; background: #EAEAEA; width: 1008px;display:none"> <div style="padding: 0; background-color: white; border: 1px solid navy; width: 1000px"> <div id="progress" style="padding: 0; background-color: #FFCC66; border: 0; width: 0px; text-align: center; height: 16px"></div> </div> <div id="msg">正在处理...</div> <div id="percent" style="position: relative; top: -18px; text-align: center; font-weight: bold; font-size: 8pt">0%</div> </div> </body> <script> function query(timestamp){ $.ajax({ type:'post', url:'/test1.php', //查询进度 data:{ timestamp:timestamp}, dataType: "json", async:false, success: function(data){ if(data.code=='10000'){ data1 = data.data; document.getElementById("percent").innerText= data1.percent + "%"; document.getElementById("progress").style.width=data1.progress + "px"; document.getElementById("msg").innerText=data1.msg; if(data1.percent == 100){ $("#syn").attr('disabled', false); return ; } }else{ document.getElementById("msg").innerText=data.msg; } setTimeout('query(' + timestamp + ')', 1000); } }); } $("#syn").click(function(){ var timestamp = Date.parse(new Date()); $("#syn").attr('disabled', 'disabled'); $("#progressBar").css('display', 'block'); $.ajax({ type:'post', url:'/test.php', //执行处理 data:{ timestamp:timestamp}, dataType: "json", async:true, success: function(data){ if(data.code=='10000'){ console.log('同步成功'); //data1 = data.data; //document.getElementById("percent").innerText= data1.percent + "%"; //document.getElementById("progress").style.width=data1.progress + "px"; //document.getElementById("msg").innerText=data1.msg; }else{ document.getElementById("msg").innerText=data1.msg; } } }); setTimeout('query(' + timestamp + ')', 1000); }); </script> </html>
test.php 파일입니다.
<?php set_time_limit(0); //设置程序执行时间 ignore_user_abort(true); //设置断开连接继续执行 $timestamp = $_POST['timestamp']; //省略一切校验 $width = 1000; $length = 11; for($i=0; $i<$length; $i++) { sleep(rand(1,2)); //模拟处理时间 $proportion = ($i+1)/$length; if($i+1 == $length){ $msg = '同步完成'; }else{ $msg = '正在同步第' . ($i+1) . '个用户'; } $data = array( 'percent' => intval($proportion*100), 'progress' => intval($width*($i+1)/$length), 'msg' => $msg ); session_start(); $_SESSION['now_percent' . $timestamp] = $data; session_write_close(); //释放session锁 } echo json_encode(array( 'code' => 10000, 'data' => $data ));
test1.php
<?php //忽略所有校验,直接写主要部分 $timestamp = $_POST['timestamp']; //省略一切校验 session_start(); $now_percent = @$_SESSION['now_percent' . $timestamp]; session_write_close(); if(empty($now_percent)){ echo json_encode(array( 'code' => 10001, 'msg' => '正在处理...' ));exit; }else{ echo json_encode(array( 'code' => 10000, 'data' => $now_percent ));exit; }
추가:
1. setTimeout을 사용하는 이유는 설정하면 시간이 너무 짧고 요청 응답 시간이 너무 길면 디스플레이 혼란이 발생하기 때문입니다.
2. 세션을 사용한 후에는 시간 내에 해제하도록 주의하세요. 그렇지 않으면 세션이 잠겨 있으므로 쿼리가 대기하게 됩니다. 사용 후 해제하는 것이 가장 좋습니다.
관련 권장 사항: php training
위 내용은 PHP에서 진행률 표시줄을 구현하는 방법은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다
