APC方法实现PHP上传多个文件原理剖析
我们在上传多个文件的时候可能往往需要很长的等待时间,而且受网络和软件等的影响,经常会出现超时及上传失败的现象。如何在PHP上传多个文件时实时的得到文件上传进度,以及如何避开php和其他因素的限制上传任意大小的文件呢?
- 经验总结:示例PHP上传文件代码
- 五分钟解决PHP上传文件代码演示
- 挖掘PHP上传文件类型原理实现
- 三步FTP实现PHP上传文件代码剖析
- 两种PHP上传文件大小限制解决方案
先说说流程,首先用php的socket函数库建立一个临时的http服务器,在某一端口监听,然后把 ip地址和端口号通知客户端,客户端把上传表单提交(临时服务器), 临时服务器接受客户端请求,并读取post数据,分析并获取客户端上传的文件信息,把文件保存在服务器上,然后关闭临时服务器,释放资源,上传完成。有点绕,不过思路还是简单的。
稍后我会发布一个类库,暂定名为:UGiA Visual PHP Uploader, 这样大家就可以在程序中很方便的调用了。PHP上传多个文件效果如下:
PHP上传多个文件之APC实现方法:
安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明配置php.ini,设置参数 apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明代码范例:
<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 模块实现方法:
<ol class="dp-xml"> <li class="alt"><span><span>使用PECL模块安装方法安装该模块php.ini里面设置 </span><span class="attribute"><font color="#ff0000">uploadprogress.file.filename_template</font></span><span> = “/tmp/upd_%s.txt”代码范例: </span></span></li> <li class=""><span>if($_SERVER['REQUEST_METHOD']=='POST') { </span></li> <li class="alt"><span>if (is_uploaded_file($_FILES['upfile']['tmp_name'])) { </span></li> <li class=""> <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="alt"> <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=""> <span>$</span><span class="attribute"><font color="#ff0000">sessid</font></span><span> = $_POST['UPLOAD_IDENTIFIER'] ; </span> </li> <li class="alt"> <span>$</span><span class="attribute"><font color="#ff0000">tmpfile</font></span><span> = $upload_dir . $sessid; </span> </li> <li class=""> <span>$</span><span class="attribute"><font color="#ff0000">sessfile</font></span><span> = $upload_dir . $sessid .$ext; </span> </li> <li class="alt"><span>if (move_uploaded_file($_FILES['upfile']['tmp_name'],$tmpfile)) { </span></li> <li class=""><span>//上传成功 </span></li> <li class="alt"><span>} else { </span></li> <li class=""><span>//上传失败 </span></li> <li class="alt"><span>} else { </span></li> <li class=""><span>//上传错误 </span></li> <li class="alt"><span> </span></li> <li class=""><span>} elseif (!empty($_GET['sessid'])) { </span></li> <li class="alt"><span>header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); </span></li> <li class=""><span>header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); </span></li> <li class="alt"><span>header("Cache-Control: no-store, no-cache, must-revalidate"); </span></li> <li class=""> <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="alt"><span>header("Pragma: no-cache"); </span></li> <li class=""> <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="alt"><span> </span></li> <li class=""> <span>$</span><span class="attribute"><font color="#ff0000">unique_id</font></span><span> = $_GET['sessid']; </span> </li> <li class="alt"> <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=""><span> </span></li> <li class="alt"><span>if (is_array($uploadvalues)) { </span></li> <li class=""><span>echo json_encode($uploadvalues); </span></li> <li class="alt"><span>} else { </span></li> <li class=""><span>//读取进度失败,另外处理逻辑 </span></li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"><span>} else { </span></li> <li class=""><span>//显示上传表单 </span></li> </ol>

핫 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에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

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

CakePHP에 로그인하는 것은 매우 쉬운 작업입니다. 한 가지 기능만 사용하면 됩니다. cronjob과 같은 백그라운드 프로세스에 대해 오류, 예외, 사용자 활동, 사용자가 취한 조치를 기록할 수 있습니다. CakePHP에 데이터를 기록하는 것은 쉽습니다. log() 함수는 다음과 같습니다.

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