Maison  >  Article  >  développement back-end  >  Utilisez le module APC de PHP pour créer une barre de progression de téléchargement

Utilisez le module APC de PHP pour créer une barre de progression de téléchargement

墨辰丷
墨辰丷original
2018-06-06 16:01:301403parcourir

Cet article présente principalement l'utilisation du module APC de PHP pour créer des barres de progression de téléchargement. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Module APC, son nom complet est Alternative PHP Cache. APC peut mettre en cache tout le code PHP. De plus, il peut fournir une certaine fonction de mise en cache de la mémoire. Cependant, certains rapports indiquent que si la fonction d'écriture du cache APC est utilisée fréquemment, cela entraînera des erreurs imprévisibles. Si vous souhaitez utiliser cette fonction, vous pouvez consulter apc_fetch, apc_store et d'autres fonctions liées au cache apc.
Ce qui est gratifiant, c'est qu'à partir de la 5.2, APC a rejoint APC_UPLOAD_PROGRESS, ce qui résout le problème de la barre de progression qui dérange tout le monde depuis longtemps. Et cela a modifié la méthode originale de mise en cache de tous les fichiers temporaires dans la mémoire pendant le téléchargement pour les enregistrer automatiquement sur le disque dur lorsque les fichiers temporaires atteignent la valeur définie, ce qui a effectivement amélioré l'utilisation de la mémoire.
Son principe de fonctionnement est de donner à chaque téléchargement un identifiant unique lors du téléchargement Lorsque le script PHP reçoit un fichier téléchargé, l'interpréteur vérifiera automatiquement le tableau $_POST Un champ caché. nommé APC_UPLOAD_PROGRESS deviendra une variable de cache qui stocke les informations sur le téléchargement, afin que les scripts puissent accéder aux informations d'état du fichier téléchargé via l'ID de téléchargement.

<!–以下为上传表单–>
<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&#39;); return true;"/>
<!–注意:startProgress(‘upid&#39;)中的参数是你从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>

La chose la plus importante est le champ caché de APC_UPLOAD_PROGRESS Avec lui, le script peut accéder à l'état du fichier actuellement téléchargé, et il suffit d'ajouter un p pour afficher l'état du téléchargement.
Ce qui suit est un script pour traiter Ajax, utilisant le framework Jquery et json pour transmettre des messages.

function getProgress(upid){
var url = "<{$siteurl}>epadmin/upprocess";
$.getJSON(
url,
{ progress_key: upid },
function(json){
$("#progressinner").width(json.per+"%");
$("#upstatus").html(‘文件大小:&#39;+json.total+‘KB&#39;+‘ 已上传:&#39;+json.current+‘KB&#39;);
if (json.per < 100){
setTimeout(function(){
getProgress(upid);
}, 10);
}else{
$("#upstatus").html("视频上传完成,正在处理数据,请稍后……");
}
}
)
}
function startProgress(upid){
$("#progressouter").css({ display:"block" });
setTimeout(function(){
getProgress(upid);
}, 100);
}

L'étape suivante consiste à lire le code PHP pour l'état de téléchargement. Quant au traitement des fichiers téléchargés, vous pouvez l'écrire comme d'habitude.
//Fonction d'opération de téléchargement de fichier, vous pouvez l'écrire selon vos propres besoins

function upflvAction()
 {
 if($_SERVER[&#39;REQUEST_METHOD&#39;]==‘POST&#39;){
 $subject = trim($this->f->filter($this->_request->getPost(‘subject&#39;)));
 $content = trim($this->f->filter($this->_request->getPost(‘content&#39;)));
 Zend_Loader::loadClass(‘Custom_FlvOp&#39;);
 $flv = new Custom_FlvOp;
 $flv->uploadFlv(‘upfile&#39;,$subject,$content);
 }
 }
 //这就是读取上传状态的函数了~~
 function upprocessAction()
 {
 if(isset($_GET[&#39;progress_key&#39;])) {
 $status = apc_fetch(‘upload_&#39;.$_GET[&#39;progress_key&#39;]);
 $json = array(
 ‘per&#39;=>$status[&#39;current&#39;]/$status[&#39;total&#39;]*100,
 ‘total&#39;=>round($status[&#39;total&#39;]/1024),
 ‘current&#39;=>round($status[&#39;current&#39;]/1024),
 );
 require_once("Zend/Json.php");
 echo Zend_Json::encode($json);
 }
 }

D'accord, maintenant vous pouvez le déployer sur votre propre site et voir par vous-même l'effet est cool, n'est-ce pas n'est-ce pas ?

Résumé : Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Classe de téléchargement d'images php et méthode d'appel

Précautions et exemple d'analyse pour la modification de la clé de tableau par array_unshift() dans php

Comment convertir le format html au format texte en php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn