Home  >  Article  >  Backend Development  >  Use PHP's APC module to create an upload progress bar

Use PHP's APC module to create an upload progress bar

墨辰丷
墨辰丷Original
2018-06-06 16:01:301462browse

This article mainly introduces the use of PHP's APC module to create upload progress bars. Interested friends can refer to it. I hope it will be helpful to everyone.

APC module, its full name is Alternative PHP Cache. APC can cache all PHP code. In addition, it can provide a certain memory caching function. However, this function is not perfect. There are reports that if the write function of APC cache is used frequently, it will lead to unpredictable errors. If If you want to use this function, you can take a look at apc_fetch, apc_store and other functions related to apc cache.
It is gratifying that APC has joined APC_UPLOAD_PROGRESS starting from 5.2, which solves the progress bar problem that has been bothering everyone for a long time. And it changes from the original cache of all temporary files to the memory during uploading to automatically saving to the hard disk when the temporary files reach the set value, which effectively improves the memory utilization.
How it worksis to give each upload a unique ID when uploading. When the PHP script receives an uploaded file, the interpreter will automatically check the $_POST array A hidden field named APC_UPLOAD_PROGRESS, which will become a cache variable that stores information about the upload, so that scripts can access the status information of the uploaded file through the upload ID.

<!–以下为上传表单–>
<form enctype="multipart/form-data" id="upload_form" action="" method="POST">
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="upid"/>
视频标题:<input type="text" id="subject" name="subject"/>
视频说明:<input type="text" id="content" name="content"/>
视频TAG(以逗号分割)<input type="text" id="tag" name="tags"/>
<input type="file" id="upfile" name="upfile"/>
<input type="submit" id="filesubmit" value="上传" onclick="startProgress(‘upid&#39;); return true;"/>
<!–注意:startProgress(‘upid&#39;)中的参数是你从php中分配的唯一上传参数–>
</form>
<!–以下为上传进度条–>
<p id="upstatus" style="width: 500px; height: 30px; border: 1px solid ##ffffde; color:#796140;">
</p
<p id="progressouter" style="width: 500px; height: 20px; border: 3px solid #de7e00; display:none;">
<p id="progressinner" style="position: relative; height: 20px; color:#796140; background-color: #f6d095; width: 0%; "></p>
</p>

The most important thing is the hidden field of APC_UPLOAD_PROGRESS. With it, the script can access the status of the currently uploaded file, and just add a p to display the upload status.
The following is a script for processing Ajax, using the Jquery framework and json to deliver messages.

function getProgress(upid){
var url = "<{$siteurl}>epadmin/upprocess";
$.getJSON(
url,
{ progress_key: upid },
function(json){
$("#progressinner").width(json.per+"%");
$("#upstatus").html(‘文件大小:&#39;+json.total+‘KB&#39;+‘ 已上传:&#39;+json.current+‘KB&#39;);
if (json.per < 100){
setTimeout(function(){
getProgress(upid);
}, 10);
}else{
$("#upstatus").html("视频上传完成,正在处理数据,请稍后……");
}
}
)
}
function startProgress(upid){
$("#progressouter").css({ display:"block" });
setTimeout(function(){
getProgress(upid);
}, 100);
}

The next step is to read the PHP code of the upload status. As for the processing of uploaded files, you can write it as usual.
//Upload file operation function, you can write it according to your own needs

function upflvAction()
 {
 if($_SERVER[&#39;REQUEST_METHOD&#39;]==‘POST&#39;){
 $subject = trim($this->f->filter($this->_request->getPost(‘subject&#39;)));
 $content = trim($this->f->filter($this->_request->getPost(‘content&#39;)));
 Zend_Loader::loadClass(‘Custom_FlvOp&#39;);
 $flv = new Custom_FlvOp;
 $flv->uploadFlv(‘upfile&#39;,$subject,$content);
 }
 }
 //这就是读取上传状态的函数了~~
 function upprocessAction()
 {
 if(isset($_GET[&#39;progress_key&#39;])) {
 $status = apc_fetch(‘upload_&#39;.$_GET[&#39;progress_key&#39;]);
 $json = array(
 ‘per&#39;=>$status[&#39;current&#39;]/$status[&#39;total&#39;]*100,
 ‘total&#39;=>round($status[&#39;total&#39;]/1024),
 ‘current&#39;=>round($status[&#39;current&#39;]/1024),
 );
 require_once("Zend/Json.php");
 echo Zend_Json::encode($json);
 }
 }

Okay, now you can deploy it in your own site. See for yourself. Is the effect cool?

Summary: The above is the entire content of this article, I hope it will be helpful to everyone's study.

Related recommendations:

php image upload class and calling method

Notes and example analysis on modifying array key by array_unshift() in php

php method to convert html format to text format

The above is the detailed content of Use PHP's APC module to create an upload progress bar. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn