Maison  >  Article  >  développement back-end  >  Interprétation détaillée de la barre de progression du téléchargement php (recommandé)

Interprétation détaillée de la barre de progression du téléchargement php (recommandé)

墨辰丷
墨辰丷original
2018-06-05 17:56:582459parcourir

Cet article présente principalement l'interprétation détaillée de la barre de progression du téléchargement PHP (recommandé. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Trois solutions pour télécharger des fichiers sur le Web Partager avec tout le monde :

Ce que je souhaite utiliser ici, c'est le méthode de formulaire . En définissant l'attribut enctype="multipart/form-data" pour l'élément de formulaire, les données soumises par le formulaire sont soumises en codage binaire et le contenu du fichier téléchargé peut être obtenu en utilisant le flux binaire pour obtenir le contenu dans le servlet qui reçoit cette demande. Cela permet le téléchargement de fichiers.

L'attribut enctype de l'élément form spécifie la méthode d'encodage des données du formulaire :

J'ai trouvé deux méthodes sur Internet. . PHP coopère avec apc pour l'implémenter et utilise uploadprogress pour l'implémenter. Cette fois, je veux utiliser uploadprogress Cliquez sur l'adresse pour télécharger la dll de la version correspondante de php. Installez l'extension php_uploadprogress.dll et redémarrez Apache.

Principe d'implémentation de la barre de progression :

Une méthode iframe de téléchargement de fichiers sans actualisation est utilisée ici.

L'image une fois le téléchargement terminé :

<body>
  <p style="padding:20px">
   <form action="action.php" enctype="multipart/form-data" method="post" target="iframeUpload">
    <iframe name="iframeUpload" width="400" height="400" frameborder=&#39;1&#39;></iframe>
    <input type="hidden" name="UPLOAD_IDENTIFIER" value="1" />
    <input id="file1" name="file1" type="file"/> 
    <input value="上传" type="submit" onclick="startProgress()"/> 
   </form>
  </p>
  <p style="width: 500px; height: 20px;border:1px solid red"> 
   <p style="position: relative; height: 20px; background-color: purple; width: 0%;" class="barinner"></p>
  </p>
  <p id=&#39;showNum&#39;></p>
  <p class="prbar">
   <p class="prpos barinner"></p>
  </p>
 </body>

Dans le code HTML ci-dessus, veuillez faire attention à UPLOAD_IDENTIFIER Ceci est utilisé pour localiser lequel. fichier pour voir la progression du téléchargement. Je vais l'écrire sous la forme d'un 1 ici, mais vous pouvez l'écrire sous la forme d'un nombre aléatoire généré par PHP. Voici le script JS :

 var proNum=0; 
  var loop=0; 
  var progressResult = ""; 
  var interval; 
  function sendURL() { 
   $.ajax({ 
    type : &#39;GET&#39;, 
    url : "getprogress.php", 
    async : true, 
    cache : false, 
    dataType : &#39;json&#39;,
    data: "progress_key=" + $(&#39;input[name=UPLOAD_IDENTIFIER]&#39;).val(),
    success : function(e) { 
     proNum=parseInt(e); 
     if(e){ 
      $(&#39;.barinner&#39;).css(&#39;width&#39;, proNum+"%");
      $(&#39;#showNum&#39;).html(proNum+"%");
      setTimeout("getProgress()", 200); 
   
     }else{ 
      if(interval == 1){ 
       $(&#39;.barinner&#39;).css(&#39;width&#39;, "100%");
       $(&#39;#showNum&#39;).html("100%");
      } 
     }
    } 
   }); 
  } 
  function getProgress(){ 
   loop++; 
   sendURL(); 
  } 
  function startProgress(){ 
   interval = 1;
   $(&#39;.barinner&#39;).css(&#39;width&#39;, proNum+"%"); 
   $(&#39;#showNum&#39;).html(proNum+"%");
  setTimeout("getProgress()", 500); 
  }

Voici le contenu du fichier getprogress.php :

 <?php 
 if (function_exists("uploadprogress_get_info")) {
  $info = uploadprogress_get_info($_GET[&#39;progress_key&#39;]);
  if(!empty($info)){
   if(($info[&#39;bytes_uploaded&#39;] < $info[&#39;bytes_total&#39;]) && !empty($info[&#39;bytes_uploaded&#39;]) && !empty($info[&#39;bytes_total&#39;])){
    $proNum = floor(($info[&#39;bytes_uploaded&#39;]/$info[&#39;bytes_total&#39;])*100);  
   }else{
    $proNum = 100;
   }
   echo $proNum;
  }else{
   echo 0;
  }
 }

Une fois le téléchargement terminé, j'affiche le CSS des deux barres de progression, la seconde Le type est écrit en utilisant le dernier CSS3. Certaines propriétés d'animation CSS3 sont utilisées.

 .prbar {
  margin:5px;
  width:500px;
  background-color:#dddddd;
  overflow:hidden;
  
  /* 边框效果 */
  border: 1px solid #bbbbbb;
  -moz-border-radius: 15px;
  border-radius: 15px;
    
  /* 为进度条增加阴影效果 */
  -webkit-box-shadow: 0px 2px 4px #555555;
  -moz-box-shadow: 0px 2px 4px #555555;
  box-shadow: 0px 2px 4px #555555;   
 }
 /* No rounded corners for Opera, because the overflow:hidden dont work with rounded corners */
 doesnotexist:-o-prefocus, .prbar {
 border-radius:0px;
 }
 .prpos {
  width:0%;
  height:30px;
  background-color:#3399ff;
  border-right:1px solid #bbbbbb;
  /* CSS3 进度条渐变 */
  transition: width 2s ease;
  -webkit-transition: width 0s ease;
  -o-transition: width 0s ease;
  -moz-transition: width 0s ease;
  -ms-transition: width 0s ease;
  /* CSS3 Stripes */
  background-image: linear-gradient(135deg,#3399ff 25%,#99ccff 25%,#99ccff 50%, #3399ff 50%, #3399ff 75%,#99ccff 75%,#99ccff 100%);
  background-image: -moz-linear-gradient(135deg,#3399ff 25%,#99ccff 25%,#99ccff 50%, #3399ff 50%, #3399ff 75%,#99ccff 75%,#99ccff 100%);
  background-image: -ms-linear-gradient(135deg,#3399ff 25%,#99ccff 25%,#99ccff 50%, #3399ff 50%, #3399ff 75%,#99ccff 75%,#99ccff 100%);
  background-image: -o-linear-gradient(135deg,#3399ff 25%,#99ccff 25%,#99ccff 50%, #3399ff 50%, #3399ff 75%,#99ccff 75%,#99ccff 100%);
  background-image: -webkit-gradient(linear, 100% 100%, 0 0,color-stop(.25, #99ccff), color-stop(.25, #3399ff),color-stop(.5, #3399ff),color-stop(.5, #99ccff),color-stop(.75, #99ccff),color-stop(.75, #3399ff),color-stop(1, #3399ff));
  background-image: -webkit-linear-gradient(135deg,#3399ff 25%,#99ccff 25%,#99ccff 50%, #3399ff 50%, #3399ff 75%,#99ccff 75%,#99ccff 100%);
  background-size: 40px 40px;
  /* Background stripes animation */
  animation: bganim 3s linear 2s infinite;
  -moz-animation: bganim 3s linear 2s infinite;
  -webkit-animation: bganim 3s linear 2s infinite;
  -o-animation: bganim 3s linear 2s infinite;
  -ms-animation: bganim 3s linear 2s infinite;
 }
 @keyframes bganim {
  from {background-position:0px;} to { background-position:40px;}
 }
 @-moz-keyframes bganim {
  from {background-position:0px;} to { background-position:40px;}
 }
 @-webkit-keyframes bganim {
  from {background-position:0px;} to { background-position:40px;}
 }
 @-o-keyframes bganim {
  from {background-position:0px;} to { background-position:40px;}
 }
 @-ms-keyframes bganim {
  from {background-position:0px;} to { background-position:40px;}
 }

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

Recommandations associées :

php Explication détaillée de l'exemple de code de formatage des données d'arbre de classification infinie

Interface du système d'authentification unique SSO implémentée par php Analyse d'exemples fonctionnels

Explication détaillée des exemples de fonctions de robot d'exploration multithread de pool de threads implémentés par PHP et python

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