レンダリング:
PHPなどは、この点でアップロードの進行中の画期的なされていません。昨日は、代替のPHPキャッシュの略APCと呼ばれるPHPモジュールを、見つけました。あなたが頻繁にAPCキャッシュ書き込み機能を使用する場合、予期しないエラーが発生する可能性がありという報告があり、すべてのPHPコードはキャッシュされているAPCは、それはいくつかの追加のメモリキャッシュを提供することができますが、この機能は非常に完璧ではありません。場合私は、APCは5.2スタートから、我々は長いプログレスバーの問題を抱えている問題を解決するためにAPC_UPLOAD_PROGRESSと呼ばれるものを追加することを嬉しく思います。APCキャッシュに関連したapc_store他のいくつかの機能、あなたはapc_fetchを見てとることができ、この機能を使用したいです。それは自動的にハードディスク、効果的に改善されたメモリの使用率に保存された設定値に達したときにメモリにすべての一時ファイルは、一時ファイルをキャッシュする際に、元にアップロードします。その役割は、それぞれの時間をアップロードするPHPスクリプトは、プログラムの説明、アップロードファイルを受け取り、ユニークIDは、自動的にチェックします原則としてアップロードして提供することです
$_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>
<!–以下为上传进度条–>
<div id="upstatus" style="width: 500px; height: 30px; border: 1px solid ##ffffde; color:#796140;">
</div
<div id="progressouter" style="width: 500px; height: 20px; border: 3px solid #de7e00; display:none;">
<div id="progressinner" style="position: relative; height: 20px; color:#796140; background-color: #f6d095; width: 0%; "></div>
</div>
最も重要なのはそのAPC_UPLOAD_PROGRESS隠しフィールドであり、それをスクリプトの現在の状態へのアクセスは、ファイルをアップロードするために、プラスワンの余分なdivのアップロードステータスの表示だけで罰金。以下は、私は、JSONメッセージを配信するjQueryのフレームワークを使用し、Ajaxの処理をスクリプトです。F
unction 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);
}
}
さて、今、あなたは自分のサイトを展開し、その効果はそのクールではありません自分で見ることができますか?
ます。https://my.oschina.net/766/blog/211429で再現