Home  >  Article  >  Backend Development  >  Beginners must read PHP file upload progress comprehensively revealed_PHP tutorial

Beginners must read PHP file upload progress comprehensively revealed_PHP tutorial

WBOY
WBOYOriginal
2016-07-15 13:27:25879browse

PHP is still relatively commonly used, so I studied the progress of PHP uploading files and shared it with you here. I hope it will be useful to everyone. The reason why it is difficult to implement an upload progress bar in PHP is because when we upload files to the server, we have to wait until all files are sent to the server before executing the corresponding PHP file. Before this, the file data was saved in a temporary file, and PHP could not obtain the path and size of this file.

Starting from Actionscript 2.0, Flash supports file upload and download. Although we cannot get the file upload progress on the server side, we can get the file sending progress on the server side. Based on this principle, you can use Flash to create an upload progress bar effect. I have seen some information on the Internet, but I feel it is flawed. So I did some research myself, strengthened the security and robustness of the program on the basis of predecessors, and added some customizable parameters. At present, there are two methods that I know of. One is to use the APC extension module written by Rasmus Lerdorf, the founder of PHP. The other method is to use the PECL extension module uploadprogress to implement it. Here are two examples of their respective implementations for reference. More Flexible application can be modified according to your needs.

APC implementation method of PHP file upload progress:

Install APC and refer to the official documentation for installation. You can use the PECL module installation method to quickly and easily configure PHP. There is no description here. ini, set the parameter apc.rfc1867=1 to enable APC to support the upload progress bar function. There are code examples in the APC source code description document:

<ol class="dp-xml">
<li class="alt"><span><span>if($_SERVER['REQUEST_METHOD']=='POST'){//上传请求  </span></span></li>
<li class="">
<span>$</span><span class="attribute"><font color="#ff0000">status</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">apc_fetch</font></span><span>('upload_'.$_POST['APC_UPLOAD_PROGRESS']);  </span>
</li>
<li class="alt"><span>$status['done']=1;  </span></li>
<li class=""><span>echojson_encode($status);//输出给用户端页面里的ajax调用,相关文档请自己寻找  </span></li>
<li class="alt"><span>exit;  </span></li>
<li class=""><span>}elseif(isset($_GET['progress_key'])){//读取上传进度  </span></li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">status</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">apc_fetch</font></span><span>('upload_'.$_GET['progress_key']);  </span>
</li>
<li class=""><span>echojson_encode($status);  </span></li>
<li class="alt"><span>exit;  </span></li>
<li class=""><span>}else{  </span></li>
<li class="alt"><span>//其他代码,比如上传表单等  </span></li>
<li class=""><span>} </span></li>
</ol>

PHP upload progress module implementation method for file upload progress :

Use the PECL module installation method to install the module. Set uploadprogress.file.filename_template="/tmp/upd_%s.txt" in php.ini. Code example:

<ol class="dp-xml">
<li class="alt"><span><span>if($_SERVER['REQUEST_METHOD']=='POST'){  </span></span></li>
<li class=""><span>if(is_uploaded_file($_FILES['upfile']['tmp_name'])){  </span></li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">upload_dir</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">'your_path/'</font></span><span>;  </span>
</li>
<li class="">
<span>$</span><span class="attribute"><font color="#ff0000">ext</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">strrchr</font></span><span>($_FILES['video']['name'],'.');  </span>
</li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">sessid</font></span><span>=$_POST['UPLOAD_IDENTIFIER'];  </span>
</li>
<li class="">
<span>$</span><span class="attribute"><font color="#ff0000">tmpfile</font></span><span>=$upload_dir.$sessid;  </span>
</li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">sessfile</font></span><span>=$upload_dir.$sessid.$ext;  </span>
</li>
<li class=""><span>if(move_uploaded_file($_FILES['upfile']['tmp_name'],$tmpfile)){  </span></li>
<li class="alt"><span>//上传成功  </span></li>
<li class=""><span>}else{  </span></li>
<li class="alt"><span>//上传失败  </span></li>
<li class=""><span>}else{  </span></li>
<li class="alt"><span>//上传错误  </span></li>
<li class=""><span> </span></li>
<li class="alt"><span>}elseif(!empty($_GET['sessid'])){  </span></li>
<li class=""><span>header("Expires:Mon,26Jul199705:00:00GMT");  </span></li>
<li class="alt"><span>header("Last-Modified:".gmdate("D,dMYH:i:s")."GMT");  </span></li>
<li class=""><span>header("Cache-Control:no-store,no-cache,must-revalidate");  </span></li>
<li class="alt">
<span>header("</span><span class="attribute"><font color="#ff0000">Cache-Control:post-check</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">0</font></span><span>,</span><span class="attribute"><font color="#ff0000">pre-check</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">0</font></span><span>",false);  </span>
</li>
<li class=""><span>header("Pragma:no-cache");  </span></li>
<li class="alt">
<span>header("Content-Type:text/html;</span><span class="attribute"><font color="#ff0000">charset</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">UTF</font></span><span>-8");  </span>
</li>
<li class=""><span> </span></li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">unique_id</font></span><span>=$_GET['sessid'];  </span>
</li>
<li class="">
<span>$</span><span class="attribute"><font color="#ff0000">uploadvalues</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">uploadprogress_get_info</font></span><span>($unique_id);  </span>
</li>
<li class="alt"><span> </span></li>
<li class=""><span>if(is_array($uploadvalues)){  </span></li>
<li class="alt"><span>echojson_encode($uploadvalues);  </span></li>
<li class=""><span>}else{  </span></li>
<li class="alt"><span>//读取进度失败,另外处理逻辑  </span></li>
<li class=""><span>}  </span></li>
<li class="alt"><span> </span></li>
<li class=""><span>}else{  </span></li>
<li class="alt"><span>//显示上传表单  </span></li>
<li class=""><span>}  </span></li>
</ol>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/446544.htmlTechArticlePHP is still relatively commonly used, so I studied the progress of uploading files in PHP and shared it with you here. , hope it is useful to everyone. The reason why it is difficult to implement upload progress bar in PHP is...
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