PHP檔案上傳進度條完整程式實現 jQuery Ajax apc
實現效果:
準備工作:
1、參考IBM的PHP V5.2 中的新增功能,第 5 部分: 跟蹤檔案上傳進度,以下是連結地址:http://www.ibm.com/developerworks/cn/opensource/os-php-v525/
這篇文章對php檔案上傳進度講得很詳細,不過,是用iframe實現的。
2、下載php_apc.dll。在網上很容易搜到php_apc.dll的下載地址。
將php_apc.dll放在ext資料夾下,比如:C:\AppServ\php5\ext。在C:\WINDOWS的php.ini檔案中找到;extension=php_zip.dll這行,在這行之後新增:
extension=php_apc.dll
;apc.enabled = 1
;apc.shm_segments = 1
;apc.shm_size = 64
;apc.optimization = 0
;apc.num_files_hint = 1000
;apc.ttl = 0
;apc.gc_ttl = 3600
;apc.cache_by_default = On
;apc.slam_defense = 0
;apc.file_update_protection = 2
;apc.enable_cli = 0
;apc.stat=0
apc.rfc1867=1
apc.max_file_size = 100M
upload_max_filesize = 100M
post_max_size = 100M
以上被註釋掉的內容,是另外一些對配置的設定的說法。我發現,如果這樣設定,每次網頁檔案修改後,都必須重啟伺服器,才能重新整理,否則,修改後,無法看到修改後的網頁內容。
修改完配置,記得重啟伺服器。
3、因為實現提交和顯示進度條用到jQuery的內容,上傳檔案也採用了jQuery的彈出對話方塊的方式,所以,要下載jQuery的核心檔案和UI檔案。
jQuery的核心檔案在jQuery的首頁上就可以下載,檔名為jquery-1.4.3.js,注意版本號,如果下載的版本號與後續程式中的不一致,記得修改程式中的檔名。
UI檔案的下載地址:
可以將可選元件全部勾選。下載的資料夾名jquery-ui-1.8.6.custom。在後續程式中用到的js檔案和css檔案全部可以在這個資料夾中找到。注意:在該資料夾的development-bundle子資料夾中,必須有jquery-1.4.3.js(或者其它版本)檔案存在,否則,資料夾中的demos子資料夾中的例子程式,都無法執行。
還要下載jQuery的表單外掛,下載地址:
頁面組成
1、lwjUpload1.php 顯示檔案上傳的客戶端頁面
2、lwjfileUp.php 處理檔案上傳的伺服器端頁面
3、getProgress.php 獲得檔案上傳進度快取的伺服器端頁面
程式實現
lwjUpload1.php 顯示檔案上傳的客戶端頁面
ord-wrap:normal;word-break:normal;color:#0670FF;">">
">
//初始化對話方塊,讓對話方塊隱藏,不自動彈出,並設定對話方塊關閉的速度(速率)
$.fx.speeds._default = 500; //對話方塊顯示和隱藏的速度
$(function(){
$("#dialog").dialog({
autoOpen: false,
show: 'scale', //對話方塊顯示的方式
hide: 'explode' //對話方塊隱藏的方式
})
});
//彈出檔案上傳的對話方塊
var uid ; //為隱藏表單APC_UPLOAD_PROGRESS定義value的變數
function dialogOpen()
{
//document.getElementByIdx_x("fileUpload").value = "";//無法透過這個方式給file型別的input賦值,只讀
//每次開啟“檔案上傳”對話方塊時,先清空對話方塊中上次顯示的Ajax訊息、上傳進度百分數和進度條
document.getElementByIdx_x("output1").innerHTML="";
document.getElementByIdx_x("test1").innerHTML="";
document.getElementByIdx_x("progressouter").style.display="none";
$("#dialog").dialog("open");
return false;
}
//設定ajaxSubmit的引數
var options = {
target:'#output1',
beforeSubmit:showResponse
//一定要設定為提交前(beforeSubmit),不能是提交後(success),否則無法獲得檔案上傳的快取
};
function showResponse(responseText,statusText){
//alert('狀態:' + statusText + '\n返回的內容是:\n' + responseText);
var newId = document.getElementByIdx_x("progress_key");
//產生一個由時間戳和隨機陣列成的字串,作為隱藏表單APC_UPLOAD_PROGRESS的value
var temp1 = new Date().getTime().toString();
var temp2 = Math.random().toString();
uid = temp1 + temp2;
//uid必須在每次單擊“檔案上傳”時生成一遍,保證每個上傳的檔案有不同的APC_UPLOAD_PROGRESSid
//否則,傳完一個檔案後,再傳第二個檔案時,沒有進度條的效果
newId.value = uid;
document.getElementByIdx_x("progressouter").style.display="block";
document.getElementByIdx_x("progressinner").style.width = "0%";
getProgress();
}
function getProgress()
{
$.ajax({
success:getStatus,
url:'getProgress.php?progress_key=' + uid,
type:'get',
dataType:'text',
cache:false //一定要加上這個條件,保證不快取,否則,頁面不會動態重新整理,就沒有進度條效果
});
}
function getStatus(responseText,statusText)
{
var t1 = document.getElementByIdx_x("test1");
t1.innerHTML = responseText.toString()+"%";
if(responseText<100)
{
document.getElementByIdx_x("progressinner").style.width = responseText+"%";
setTimeout("getProgress()",10);
}
else if(responseText>=100)
{
document.getElementByIdx_x("progressinner").style.width = "100%";
}
}
function ajaSub()
{
$('#myForm').ajaxSubmit(options);
return false;
}
//這一段用來檢查apc是否可用
if (function_exists('apc_fetch')) {
lwjfileUp.php 處理檔案上傳的伺服器端頁面
$upfile.上傳成功。 Thank you!
?>
getProgress.php 獲得檔案上傳進度快取的伺服器端頁面
if(isset($_GET['progress_key'])) {
$status = apc_fetch('upload_'.$_GET['progress_key']);
echo 'it surpport apc model!';
} else {
echo "it's not support apc model!";
}
?>
李婉佳的檔案上傳
header("Content-Type:text/html; charset=utf-8");
if($_SERVER['REQUEST_METHOD']=='POST')
{
$dirName = 'D:/Code/精通CSS(第2版)/'; //存放上傳檔案的伺服器端資料夾路徑
$dirName = iconv("utf-8","gb2312//IGNORE",$dirName); //轉換字元編碼,否則,中文路徑會出錯
$temp = $_FILES['myfile']['name'];
$temp = iconv("utf-8","gb2312//IGNORE",$temp);
$upfile = $dirName.time().$temp;
//$upfile = $dirName.time().$_FILES['myfile']['name'];
if(!move_uploaded_file($_FILES["myfile"]["tmp_name"], $upfile))
{
echo '不能將檔案移動到指定目錄';
exit;
}
$upfile = iconv("gb2312","utf-8//IGNORE",$upfile);
echo "
}
if($status['total'] == 0)
{
$temp = 0;
}
else
{
$temp = $status['current']/$status['total']*100;
}
echo ceil($temp);
}
?>
--------->>轉載於:http://blog.sina.com.cn/s/blog_48ed03c80100nrzq.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1193203/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jQuery監聽檔案上傳實現進度條效果jQuery
- HTML5向量實現檔案上傳進度條HTML
- 向量HTML5實現檔案上傳進度條HTML
- 上傳檔案帶進度條
- AjaxFileUpload檔案上傳元件(php+jQuery+ajax)元件PHPjQuery
- ajax實現檔案上傳
- 帶進度條的檔案上傳
- js實現帶上傳進度的檔案上傳JS
- 基於HT for Web向量實現HTML5檔案上傳進度條WebHTML
- 基於HT for Web向量實現HTML5上傳檔案進度條WebHTML
- PHP+jQuery+Ajax實現多圖片上傳介紹PHPjQuery
- 基於uploadify.js實現多檔案上傳和上傳進度條的顯示JS
- ajax利用FormData、FileReader實現多檔案上傳php獲取ORMPHP
- jQuery+ASP.NET的AJAX檔案上傳jQueryASP.NET
- 【ajax】 html js jquery ajax上傳檔案【一眼就會】【實用】HTMLJSjQuery
- 贊!帶進度條的 jQuery 檔案拖放上傳外掛jQuery
- 檔案上傳進度提示
- PHP實現圖片(檔案)上傳PHP
- PHP實現單檔案、多檔案上傳 封裝 物件導向實現檔案上傳PHP封裝物件
- 關於jQuery在Asp.Net Mvc 框架下Ajax檔案上傳的實現jQueryASP.NETMVC框架
- 配置php.ini實現PHP檔案上傳功能PHP
- bat檔案進度條程式碼BAT
- Ajax 之檔案上傳
- 利用FormData物件實現AJAX檔案上傳功能及後端實現ORM物件後端
- OSS實現檔案下載進度條顯示
- php檔案上傳之多檔案上傳PHP
- jQuery 進度條效果程式碼jQuery
- JavaScript+PHP實現影片檔案分片上傳JavaScriptPHP
- ajax進度條 非同步下載進度條非同步
- Ajax+PHP實現非同步圖片上傳PHP非同步
- Simple WPF: S3實現MINIO大檔案上傳並顯示上傳進度S3
- jquery defered的progress方法實現進度條jQuery
- Flex4/Flash多檔案上傳(帶進度條)例項分享Flex
- PHP上傳檔案PHP
- PHP 檔案上傳PHP
- jQuery實進度條效果詳解jQuery
- Node.js:上傳檔案,服務端如何獲取檔案上傳進度Node.js服務端
- ajax上傳檔案的請求