When we write the file upload code, we also need to consider an important implementation feature, which is the progress bar required for file upload. At present, I know Here are two examples of separate implementations for reference. For more flexible applications, you can modify them according to your own needs.
How to implement the PHP file upload progress bar of APC:
Install APC, refer to the official documentation for installation, you can use the PECL module installation method to quickly and easily, not explained here
Configuring php.ini, Set the parameter apc.rfc1867=1 to enable APC to support the upload progress bar function. There are instructions in the APC source code documentation
Code example:
<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> echo json_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> echo json_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>
uploadprogress module implementation method:
Use PECL module installation method Install the PHP file upload progress bar implementation method of this 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, 26 Jul 1997 05:00:00 GMT"); </span></li> <li class="alt"><span> header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); </span></li> <li class=""><span> header("Cache-Control: no-store, no-cache, must-revalidate"); </span></li> <li class="alt"> <span> header("Cache-Control: </span><span class="attribute"><font color="#ff0000">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> echo json_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>
The above are the two specific methods of PHP file upload progress bar that we introduced to you.