介紹了使用PHP的APC模組製作上傳進度條,需要的朋友可以參考下。跟隨小編去看看吧!
APC模組,它的全稱是Alternative PHP Cache。APC可以將所有PHP程式碼會被快取起來, 另外它可提供一定的記憶體快取功能.但是這個功能並不是十分完美,有報告說如果頻繁使用APC快取的寫入功能,會導致不可預料的錯誤.如果想使用這個功能,可以看看apc_fetch,apc_store等幾個與apc快取相關的函式。
值得高興的是從5.2開始APC加入了APC_UPLOAD_PROGRESS,解決了困擾大家已久的`進度條問題。並且它把原來的上傳時把臨時檔案全部快取到記憶體改成了當臨時檔案達到設定值時就自動儲存到硬碟,有效地改善了記憶體利用狀況。
它的作用原理是在上傳時候賦予每個上傳一個唯一的ID,當PHP 指令碼收到一個上傳檔案時,解釋程式將自動檢查$_POST陣列中名為APC_UPLOAD_PROGRESS 的隱藏欄位,它將成為快取變數,儲存關於上傳的資訊,這樣指令碼就可以通過上傳的ID來訪問上傳檔案的狀態資訊。
<!–以下為上傳表單–>
<form enctype="multipart/form-data" id="upload_form" action="" method="POST">
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="upid"/>
視訊標題:<input type="text" id="subject" name="subject"/>
視訊說明:<input type="text" id="content" name="content"/>
視訊TAG(以逗號分割)<input type="text" id="tag" name="tags"/>
<input type="file" id="upfile" name="upfile"/>
<input type="submit" id="filesubmit" value="上傳" onclick="startProgress(‘upid'); return true;"/>
<!–注意:startProgress(‘upid')中的引數是你從php中分配的唯一上傳引數–>
</form>
<!–以下為上傳進度條–>
<p id="upstatus" style="width: 500px; height: 30px; border: 1px solid ##ffffde; color:#796140;">
</p
<p id="progressouter" style="width: 500px; height: 20px; border: 3px solid #de7e00; display:none;">
<p id="progressinner" style="position: relative; height: 20px; color:#796140; background-color: #f6d095; width: 0%; "></p>
</p>
最主要的就是那個APC_UPLOAD_PROGRESS的隱藏域,有了它指令碼才能去訪問目前上傳檔案的狀態,另外加一個顯示上傳狀態的p就好了。
下面是處理Ajax的指令碼,用了Jquery框架,json傳遞訊息。
function getProgress(upid){
var url = "<{$siteurl}>epadmin/upprocess";
$SON(
url,
{ progress_key: upid },
function(json){
$("#progressinner")h(+"%");
$("#upstatus")(‘檔案大小:'+l+‘KB'+‘ 已上傳:'+ent+‘KB');
if ( < 100){
setTimeout(function(){
getProgress(upid);
}, 10);
}else{
$("#upstatus")("視訊上傳完成,正在處理資料,請稍後……");
}
}
)
}
function startProgress(upid){
$("#progressouter")({ display:"block" });
setTimeout(function(){
getProgress(upid);
}, 100);
}
再下來就是讀取上傳狀態的PHP程式碼了,至於上傳檔案的處理可以按照平常自己的來寫。
//上傳檔案操作函式,可按照自己的需要編寫
function upflvAction()
{
if($_SERVER['REQUEST_METHOD']==‘POST'){
$subject = trim($this->f->filter($this->_request->getPost(‘subject')));
$content = trim($this->f->filter($this->_request->getPost(‘content')));
Zend_Loader::loadClass(‘Custom_FlvOp');
$flv = new Custom_FlvOp;
$flv->uploadFlv(‘upfile',$subject,$content);
}
}
//這就是讀取上傳狀態的函數了~~
function upprocessAction()
{
if(isset($_GET['progress_key'])) {
$status = apc_fetch(‘upload_'.$_GET['progress_key']);
$json = array(
‘per'=>$status['current']/$status['total']*100,
‘total'=>round($status['total']/1024),
‘current'=>round($status['current']/1024),
);
require_once("Zend/");
echo Zend_Json::encode($json);
}
}
好了,現在就可以將其部署自己的站點中了,自己看看效果是不是很酷?
以上就是PHP的APC模組製作上傳進度條的關鍵點介紹,希望對大家的學習有所啟發,對大家有所幫助。