この記事では主にPHPアップロードプログレスバーの詳細な解釈を紹介します(推奨)。興味のある方はぜひ参考にしてください。
Web にファイルをアップロードするための 3 つのソリューションをみんなに共有します:
ここで使用したいのは、form メソッドです。 form 要素に enctype="multipart/form-data" 属性を設定すると、フォームから送信されたデータはバイナリ エンコードで送信され、バイナリ ストリームを使用してアップロードされたファイルのコンテンツを取得できます。このリクエストを受信するサーブレットにより、ファイルのアップロードが可能になります。
form 要素の enctype 属性は、フォーム データのエンコード方法を指定します。この属性には 3 つの値があります:
PHP が apc と連携して実装する方法と、uploadprogress を使用して実装する方法の 2 つを見つけました。 . 今回使いたいのは uploadprogress のアドレスをクリックして、対応するバージョンの php をダウンロードします。 php_uploadprogress.dll 拡張機能をインストールし、Apache を再起動します。
プログレスバー実装の原則:
ここでは、更新せずにファイルをアップロードする iframe メソッドが使用されています。
アップロード完了後の画像:
<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='1'></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='showNum'></p> <p class="prbar"> <p class="prpos barinner"></p> </p> </body>
上記の HTML コードでは、UPLOAD_IDENTIFIER に注目して、どのファイルのアップロードの進行状況を確認するために使用されます。ここでは1と書きますが、PHPが生成する乱数として書いても構いません。以下は JS スクリプトです:
var proNum=0; var loop=0; var progressResult = ""; var interval; function sendURL() { $.ajax({ type : 'GET', url : "getprogress.php", async : true, cache : false, dataType : 'json', data: "progress_key=" + $('input[name=UPLOAD_IDENTIFIER]').val(), success : function(e) { proNum=parseInt(e); if(e){ $('.barinner').css('width', proNum+"%"); $('#showNum').html(proNum+"%"); setTimeout("getProgress()", 200); }else{ if(interval == 1){ $('.barinner').css('width', "100%"); $('#showNum').html("100%"); } } } }); } function getProgress(){ loop++; sendURL(); } function startProgress(){ interval = 1; $('.barinner').css('width', proNum+"%"); $('#showNum').html(proNum+"%"); setTimeout("getProgress()", 500); }
以下は getprogress.php ファイルの内容です:
<?php if (function_exists("uploadprogress_get_info")) { $info = uploadprogress_get_info($_GET['progress_key']); if(!empty($info)){ if(($info['bytes_uploaded'] < $info['bytes_total']) && !empty($info['bytes_uploaded']) && !empty($info['bytes_total'])){ $proNum = floor(($info['bytes_uploaded']/$info['bytes_total'])*100); }else{ $proNum = 100; } echo $proNum; }else{ echo 0; } }
アップロードが完了したら、2 つのプログレス バーの CSS を表示します。2 つ目は最新の CSS3 で書かれています。一部の CSS3 アニメーション プロパティが使用されます。
.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;} }
概要: 以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。
関連推奨事項:
SSOシングルサインオンシステムアクセス機能の分析 phpで実装された例
phpで実装されたスレッドプールマルチスレッドクローラとPythonの関数例を詳しく解説
以上がPHP アップロードの進行状況バーの詳細な解釈 (推奨)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。