PHP 大文件带进度的上传,一直是一个令PHP程序员很苦恼的问题。查询baidu 、Google ,大体做带进度的上传方式为:flash+PHP,socket,apc+PHP等,下面我介绍了
apc +PHP+ajax制作的带进度的上传
,并贴出源码,希望对大家有用。 Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。在使用apc时候,先必须使用安装apc 模块。
PHP_apc.dll
PHP.ini支持apc扩展模块。
将PHP_apc.dll放入你的ext目录,然后打开PHP.ini 加入: extension=PHP_apc.dll apc.rfc1867 = on apc.max_file_size = 100M upload_max_filesize = 100M post_max_size = 100M //以上参数可自己定义下面进入正题:
原理:
通过APC 模块,用ajas从缓存中读取上传的进度。详见:index.PHP
}else{
xmlHttp.onreadystatechange = doHttpReadyStateChange;
xmlHttp.send("progress_key=<?php echo $unid;?>");
}
}
//回调函数
function doHttpReadyStateChange() {
if (xmlHttp.readyState== 4){
proNum=parseInt(xmlHttp.responseText);
//alert(proNum);
document.getElementByIdx_x("progressinner").style.width = proNum+"%";
document.getElementByIdx_x("showNum").innerHTML = proNum+"%";
if ( proNum < 100){
setTimeout("sendURL()",200);
}else{
//上传成功后,还不能及时得到信息。还希望高人指点
document.getElementByIdx_x("progressouter").style.display="none";
document.getElementByIdx_x("progressinner").style.display="none";
document.getElementByIdx_x("showNum").style.display="none";
document.getElementByIdx_x("theframe").style.display="none";
document.getElementByIdx_x("link2").style.display="block";
}
}
}
function startProgress(){
document.getElementByIdx_x("progressouter").style.display="block";
setTimeout("sendURL()",200);
}
function newsofturl(text){
document.getElementByIdx_x("link2").style.display="block";
document.getElementByIdx_x("link2").value=text;
}
@H_502_43@ 上传成功! 文件大小为:
文件下载地址为: