溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在PHP中利用APC模塊實(shí)現(xiàn)一個(gè)進(jìn)度條功能

發(fā)布時(shí)間:2020-12-25 15:27:10 來源:億速云 閱讀:140 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)如何在PHP中利用APC模塊實(shí)現(xiàn)一個(gè)進(jìn)度條功能,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

APC模塊的參數(shù)配置,代碼如下:

復(fù)制代碼 代碼如下:

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


好了配置好了現(xiàn)在就開始寫程序了

XML/HTML代碼如下:

復(fù)制代碼 代碼如下:

<!–以下為上傳表單–> 
<form enctype="multipart/form-data" id="upload_form" action="" method="POST"> 
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="upid"/> 
視頻標(biāo)題:<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')中的參數(shù)是你從php中分配的唯一上傳參數(shù)–> 
</form> 
<!–以下為上傳進(jìn)度條–> 
<div id="upstatus" > 
</div 
<div id="progressouter" > 
<div id="progressinner" ></div> 
</div>


最主要的就是那個(gè)APC_UPLOAD_PROGRESS的隱藏域,有了它腳本才能去訪問目前上傳文件的狀態(tài),另外加一個(gè)顯示上傳狀態(tài)的div就好了.

下面是處理Ajax的腳本,我用了Jquery框架,json傳遞消息.

JavaScript代碼如下:

復(fù)制代碼 代碼如下:

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("視頻上傳完成,正在處理數(shù)據(jù),請稍后……"); 




function startProgress(upid){ 
$("#progressouter").css({ display:"block" }); 
setTimeout(function(){ 
getProgress(upid); 
}, 100); 
}


再下面就是讀取上傳狀態(tài)的PHP代碼了,至于上傳文件的處理可以按照平常自己的來寫,代碼如下:

復(fù)制代碼 代碼如下:

//上傳文件操作函數(shù),可按照自己的需要編寫 
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); 
}

//這就是讀取上傳狀態(tài)的函數(shù)了~~ 
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); 

}


一些關(guān)于apc配置詳解:

apc.enabled  布爾型

apc.enabled 可以被設(shè)成 0 來禁用 APC,這主要是有用的,當(dāng) APC 被靜態(tài)編譯入 PHP 時(shí),因?yàn)闆]有其它方法來禁用它,當(dāng)編譯為 DSO 的時(shí)候,可以將 php.ini 中的 extension 行注釋掉.

apc.shm_segments  整型

對編譯緩存分配共享內(nèi)存塊的數(shù)量,如果APC用光了共享內(nèi)存,而且你已經(jīng)設(shè)置 apc.shm_size為系統(tǒng)允許的最大值的情況下,你可以試著去提高這個(gè)參數(shù)的值.

apc.shm_size  整型

每個(gè)共享內(nèi)存塊的大小是以MB為單位的。在默認(rèn)情況下,一些系統(tǒng)(包括大多數(shù)BSD變種系統(tǒng))的共享內(nèi)存塊的大小限制的很低。

apc.optimization  整型

優(yōu)化等級。設(shè)為0則禁用優(yōu)化,越高的值使用越強(qiáng)有力的優(yōu)化。期待有適度的速度上的改進(jìn)。這個(gè)還是實(shí)驗(yàn)性質(zhì)的。

apc.num_files_hint  整型

對在你的Web服務(wù)器上被包含和請求的不同的源文件的數(shù)量的提示。如果你無法確定,設(shè)置為0或者省略;這個(gè)設(shè)置主要可能用于有成千的源文件的站點(diǎn)。

apc.ttl  整型

當(dāng)一個(gè)緩存條目在緩存區(qū)的位置被另一個(gè)條目需要時(shí),我們需要考慮的是這個(gè)緩存條目在緩存區(qū)的位置被允許空閑的秒數(shù)。將這個(gè)參數(shù)設(shè)置為0意味著你的緩存可能充滿不新鮮的條目,同時(shí)導(dǎo)致新的條目無法被緩存。

apc.gc_ttl  整型

緩存條目在垃圾收集列表中存活的秒數(shù)。這個(gè)值提供了出錯(cuò)保護(hù)在執(zhí)行一個(gè)緩存源文件,而同時(shí)服務(wù)器進(jìn)程死了的事件中。如果那個(gè)源文件被修改,內(nèi)存分配給舊版本的緩存條目將不會(huì)被回收,直到這個(gè)參數(shù)設(shè)定的TTL值到的時(shí)候。設(shè)置為0就是禁止這個(gè)特性。

apc.cache_by_default  布爾型

默認(rèn)為On,但可以被設(shè)置為Off并和以加號開頭的apc.filters配合使用,文件僅僅在匹配過濾器時(shí)才被緩存。

apc.filters  字符串

一個(gè)以逗號分割的POSIX擴(kuò)展正則表達(dá)式的列表。如果任何模式匹配源文件名,這個(gè)文件將不會(huì)被緩存。注意用來匹配的文件名是傳遞給 include/require 的文件名,而不是絕對路徑。如果正則表達(dá)式的第一個(gè)字符是 + ,則這個(gè)表達(dá)式就意味著任何匹配表達(dá)式的文件將會(huì)被緩存,如果第一個(gè)字符是 - 則任何匹配都不會(huì)被緩存。 - 是默認(rèn)值,所以可以被省略。

apc.mmap_file_mask  字符串

apc.slam_defense  整型

在非常繁忙的服務(wù)器上,無論你啟動(dòng)服務(wù)還是修改文件,你都會(huì)導(dǎo)致一種多進(jìn)程都試圖在同一個(gè)時(shí)間緩存同一個(gè)文件的競爭。這個(gè)選項(xiàng)設(shè)置了進(jìn)程跳過試圖去緩存一個(gè)未被緩存的文件的百分比?;蛘呖梢园堰@個(gè)想象成一個(gè)單獨(dú)進(jìn)程跳過緩存的機(jī)率。例如,設(shè)置apc.slam_defense為75就意味著進(jìn)程有75%的機(jī)率不去緩存未被緩存的文件。所以,設(shè)置的越高,越能減少緩存的碰撞機(jī)率。設(shè)置為0則禁用這個(gè)特性。

apc.file_update_protection  整型

當(dāng)你在一個(gè)運(yùn)行著的服務(wù)器上修改文件時(shí),你應(yīng)該執(zhí)行原子操作。也就是,先寫一個(gè)臨時(shí)文件,當(dāng)寫完后再重命名(mv)這個(gè)文件到它的最終位置。許多文本編輯器,cp,tar和其他一些類似程序都不是這樣操作的。這就意味著有機(jī)會(huì)去訪問和(緩存)文件,當(dāng)這個(gè)文件還在被寫的情況下。apc.file_update_protection的設(shè)置使得緩存標(biāo)記新文件的延遲。默認(rèn)值是2,意味著如果發(fā)現(xiàn)文件的修改時(shí)間距離訪問時(shí)間不到2秒,文件將不會(huì)被緩存。訪問寫到一半的文件的不幸用戶將會(huì)看到離奇的情況,但至少這種情況不是持續(xù)的。如果你確信你經(jīng)常使用原子操作來更新你的文件,你可以關(guān)閉這個(gè)保護(hù)通過設(shè)置這個(gè)參數(shù)為0。如果你的系統(tǒng)充滿io操作,并導(dǎo)致更新程序花費(fèi)超過2秒,你可能需要去增大這個(gè)值。

apc.enable-cli  整型

大多是為了測試和調(diào)試,為CLI版本的PHP開啟動(dòng)APC功能,一般來說,你將不會(huì)想到為每一個(gè) CLI請求創(chuàng)建,移植和放棄APC的緩存,但對于各種測試情況,這是很容易的為了CLI版本開啟APC.

以上就是如何在PHP中利用APC模塊實(shí)現(xiàn)一個(gè)進(jìn)度條功能,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI