您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何在PHP中利用APC模塊實現一個進度條功能,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
APC模塊的參數配置,代碼如下:
復制代碼 代碼如下:
Name Default Changeable Changelog
apc.enabled 1 PHP_INI_ALL
apc.shm_segments 1 PHP_INI_SYSTEM
apc.shm_size 30 PHP_INI_SYSTEM
apc.optimization 0 PHP_INI_ALL
apc.num_files_hint 1000 PHP_INI_SYSTEM
apc.ttl 0 PHP_INI_SYSTEM
apc.gc_ttl 3600 PHP_INI_SYSTEM
apc.cache_by_default On PHP_INI_SYSTEM
apc.filters "" PHP_INI_SYSTEM
apc.mmap_file_mask "" PHP_INI_SYSTEM
apc.slam_defense 0 PHP_INI_SYSTEM
apc.file_update_protection 2 PHP_INI_SYSTEM
apc.enable_cli 0 PHP_INI_SYSTEM > APC 3.0.6
好了配置好了現在就開始寫程序了
XML/HTML代碼如下:
復制代碼 代碼如下:
<!–以下為上傳表單–>
<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>
<!–以下為上傳進度條–>
<div id="upstatus" >
</div
<div id="progressouter" >
<div id="progressinner" ></div>
</div>
最主要的就是那個APC_UPLOAD_PROGRESS的隱藏域,有了它腳本才能去訪問目前上傳文件的狀態,另外加一個顯示上傳狀態的div就好了.
下面是處理Ajax的腳本,我用了Jquery框架,json傳遞消息.
JavaScript代碼如下:
復制代碼 代碼如下:
function getProgress(upid){
var url = "<{$siteurl}>epadmin/upprocess";
$.getJSON(
url,
{ progress_key: upid },
function(json){
$("#progressinner").width(json.per+"%");
$("#upstatus").html('文件大小:'+json.total+'KB'+' 已上傳:'+json.current+'KB');
if (json.per < 100){
setTimeout(function(){
getProgress(upid);
}, 10);
}else{
$("#upstatus").html("視頻上傳完成,正在處理數據,請稍后……");
}
}
)
}
function startProgress(upid){
$("#progressouter").css({ 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/Json.php");
echo Zend_Json::encode($json);
}
}
一些關于apc配置詳解:
apc.enabled 布爾型
apc.enabled 可以被設成 0 來禁用 APC,這主要是有用的,當 APC 被靜態編譯入 PHP 時,因為沒有其它方法來禁用它,當編譯為 DSO 的時候,可以將 php.ini 中的 extension 行注釋掉.
apc.shm_segments 整型
對編譯緩存分配共享內存塊的數量,如果APC用光了共享內存,而且你已經設置 apc.shm_size為系統允許的最大值的情況下,你可以試著去提高這個參數的值.
apc.shm_size 整型
每個共享內存塊的大小是以MB為單位的。在默認情況下,一些系統(包括大多數BSD變種系統)的共享內存塊的大小限制的很低。
apc.optimization 整型
優化等級。設為0則禁用優化,越高的值使用越強有力的優化。期待有適度的速度上的改進。這個還是實驗性質的。
apc.num_files_hint 整型
對在你的Web服務器上被包含和請求的不同的源文件的數量的提示。如果你無法確定,設置為0或者省略;這個設置主要可能用于有成千的源文件的站點。
apc.ttl 整型
當一個緩存條目在緩存區的位置被另一個條目需要時,我們需要考慮的是這個緩存條目在緩存區的位置被允許空閑的秒數。將這個參數設置為0意味著你的緩存可能充滿不新鮮的條目,同時導致新的條目無法被緩存。
apc.gc_ttl 整型
緩存條目在垃圾收集列表中存活的秒數。這個值提供了出錯保護在執行一個緩存源文件,而同時服務器進程死了的事件中。如果那個源文件被修改,內存分配給舊版本的緩存條目將不會被回收,直到這個參數設定的TTL值到的時候。設置為0就是禁止這個特性。
apc.cache_by_default 布爾型
默認為On,但可以被設置為Off并和以加號開頭的apc.filters配合使用,文件僅僅在匹配過濾器時才被緩存。
apc.filters 字符串
一個以逗號分割的POSIX擴展正則表達式的列表。如果任何模式匹配源文件名,這個文件將不會被緩存。注意用來匹配的文件名是傳遞給 include/require 的文件名,而不是絕對路徑。如果正則表達式的第一個字符是 + ,則這個表達式就意味著任何匹配表達式的文件將會被緩存,如果第一個字符是 - 則任何匹配都不會被緩存。 - 是默認值,所以可以被省略。
apc.mmap_file_mask 字符串
apc.slam_defense 整型
在非常繁忙的服務器上,無論你啟動服務還是修改文件,你都會導致一種多進程都試圖在同一個時間緩存同一個文件的競爭。這個選項設置了進程跳過試圖去緩存一個未被緩存的文件的百分比。或者可以把這個想象成一個單獨進程跳過緩存的機率。例如,設置apc.slam_defense為75就意味著進程有75%的機率不去緩存未被緩存的文件。所以,設置的越高,越能減少緩存的碰撞機率。設置為0則禁用這個特性。
apc.file_update_protection 整型
當你在一個運行著的服務器上修改文件時,你應該執行原子操作。也就是,先寫一個臨時文件,當寫完后再重命名(mv)這個文件到它的最終位置。許多文本編輯器,cp,tar和其他一些類似程序都不是這樣操作的。這就意味著有機會去訪問和(緩存)文件,當這個文件還在被寫的情況下。apc.file_update_protection的設置使得緩存標記新文件的延遲。默認值是2,意味著如果發現文件的修改時間距離訪問時間不到2秒,文件將不會被緩存。訪問寫到一半的文件的不幸用戶將會看到離奇的情況,但至少這種情況不是持續的。如果你確信你經常使用原子操作來更新你的文件,你可以關閉這個保護通過設置這個參數為0。如果你的系統充滿io操作,并導致更新程序花費超過2秒,你可能需要去增大這個值。
apc.enable-cli 整型
大多是為了測試和調試,為CLI版本的PHP開啟動APC功能,一般來說,你將不會想到為每一個 CLI請求創建,移植和放棄APC的緩存,但對于各種測試情況,這是很容易的為了CLI版本開啟APC.
以上就是如何在PHP中利用APC模塊實現一個進度條功能,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。