이 기사의 예에서는 PHP apc ajax로 구현된 ajax_upload 업로드 진행률 바코드를 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.
업로드 진행률 표시줄은 어떻게 구현되나요? 찾아보고 업로드를 선택하면 임시 파일이 생성됩니다. 업로드가 완료된 후 이 임시 파일을 서버에 업로드하세요. 삭제됩니다. 이 임시 파일의 크기를 읽을 수 있으면 업로드 진행 상황을 알 수 있습니다. php apc 모듈은 이 기능을 구현할 수 있습니다.
1. APC 모듈을 설치합니다
다운로드 주소: http://pecl.php.net/package/apc
tar zxvf APC-3.1.8.tgz cd APC-3.1.8/ /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install
2. php.ini 수정
extension = apc.so apc.rfc1867 = 1 apc.max_file_size = 200M upload_max_filesize = 1000M post_max_size = 1000M max_execution_time = 600 max_input_time = 600 memory_limit = 128M
수정 후 Apache 등을 다시 시작하여 확인하세요
[root@BlackGhost php]# php -m [PHP Modules] apc cgi-fcgi ctype curl date dom eAccelerator 。。。。。。。。
3. upload_test.php
<?php $id = uniqid(rand(), true); ?> <html> <script type='text/javascript' src='jquery-1.3.2.js'></script> <script type='text/javascript' src='ajaxupload.3.1.js'></script> <script type='text/javascript' src='upload.js'></script> <body style="text-align:center;"> <h1>上传测试</h1><form enctype="multipart/form-data" id="upload" method="POST"> <input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="<?=$id?>" /> <input type="file" id="file" name="file" value=""/><br/><input id="submit" type="submit" value="Upload!" /> </form> <div id="progressouter" style="width: 500px; height: 20px; border: 1px solid black; display:none;"> <div id="progressinner" style="position: relative; height: 20px; background-color: red; width: 0%; "> </div> </div> <br /> <div id='showNum'></div><br> <div id='showInfo'></div><br> </body> </html> <script type="text/javascript"> $(document).ready(function(){ form_submit(); }); </script>
APC_UPLOAD_PROGRESS의 용도는 무엇인가요? 업로드된 파일에 태그를 추가하고 이 태그를 사용하여 다른 PHP 프로그램에서 액세스할 수 있습니다. APC 읽기에 대한 지원을 제공합니다.
upload.js에 의해 비동기적으로 업로드된 js 파일:
function form_submit (){ new AjaxUpload('#upload', { action: 'upload.php', name: 'file', data: { APC_UPLOAD_PROGRESS:$("#progress_key").val() }, autoSubmit: true, onSubmit: function(file, extension){ $('#progressouter').css('display', 'block'); progress(); }, onComplete: function(file, response){ $("#showInfo").html(response); } }); } function progress (){ $.ajax({ type: "GET", url: "progress.php?progress_key="+$("#progress_key").val(), dataType: "json", cache:false, success: function(data){ if(data == 0) { var precent = 0; } else { for (i in data) { if (i == "current") { var json_current = parseInt(data[i]); } if (i == "total") { var json_total = parseInt(data[i]); } } var precent = parseInt(json_current/json_total * 100); $("#progressinner").css("width",precent+"%"); $("#showNum").html(precent+"%"); $("#showInfo").html("ok"); } if ( precent < 100) { setTimeout("progress()", 100); } } }); }
위에서 주의할 점은 APC_UPLOAD_PROGRESS:$("#progress_key").val()입니다. 여기서 키는 APC_UPLOAD_PROGRESS가 아니면 apc가 임시 파일을 찾을 수 없습니다. 여기서 ajax_upload.js를 사용해야 하는 이유는 jquery와 함께 제공되는 ajax에는 파일 업로드를 위한 매개변수가 없기 때문입니다. 즉, type='file'의 콘텐츠는 PHP 끝에서 얻을 수 없습니다.
4. upload.php 파일 업로드
<?php if($_SERVER['REQUEST_METHOD'] == 'POST') { if(empty($_FILES["file"]["tmp_name"])){ echo "no file"; die; } $tmp_name = $_FILES["file"]["tmp_name"]; $name = dirname($_SERVER['SCRIPT_FILENAME'])."/upload/".$_FILES["file"]["name"]; move_uploaded_file($tmp_name, $name); echo "<p>File uploaded.</p>"; } ?>
파일이 비교적 큰 경우 http를 사용하여 업로드하지 마세요. 너무 느리고 웹사이트의 안정성에 영향을 미칩니다.
5. Progress.php는 Ajax 호출에 사용되는 진행 파일입니다
<?php if(isset($_GET['progress_key'])) { $status = apc_fetch('upload_'.$_GET['progress_key']); if($status['total']!=0 && !empty($status['total'])) { echo json_encode($status); } else { echo 0; } } ?>
Ajax 비동기 요청으로 생성된 데이터를 살펴보세요.
php apc ajax 업로드 진행 표시줄
매개변수 설명:
총 파일 크기
현재 업로드된 크기
filename 업로드 파일명
이름 태그 이름
done 업로드 성공 횟수는 1입니다
cancel_upload 사용자가 업로드를 취소합니다. 이는 업로드가 완료된 후에만 발생합니다.
rate 업로드 속도, 업로드가 완료된 경우에만 사용 가능
start_time 시작 시간
PHP 파일 및 Ajax 작업과 관련된 더 많은 콘텐츠에 관심이 있는 독자는 이 사이트의 특별 주제인 "php 파일 작업 요약" 및 "PHP ajax 기술 및 응용 프로그램 요약을 확인할 수 있습니다. "
이 기사가 PHP 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.