PHP 5.4を使用して進行状況をアップロードする

現在、ファイルのダウンロードの進行状況を判断するための多くのオプションがあります:クライアントテクノロジーとサーバーテクノロジーの両方を使用しています。 Flashを使用したSwfuploadはクライアントテクノロジーの例であり、nginx_uploadprogress_moduleはサーバーテクノロジーの例です。

PHPの今後のリリースでは、ファイルのダウンロードの進行状況を判断するためのネイティブツールの形でギフトが提供されます。

彼に対処します。



PHPはまだRC段階ですが、まもなく専用サーバー、VDS、特に大胆なホスティングに登場します。 いずれにせよ、不確実な将来において、PHP 5.4がメインブランチになり、PHP 5.3は非推奨と宣言されます。

フォームから始めましょう:



<form action="" method="POST" enctype="multipart/form-data"> <input type="hidden" name="<?=ini_get("session.upload_progress.name")?>" value="uniqueValue" /><br /> <input type="file" name="file" /><br /> <input type="submit" /> </form>
      
      







ここで注目すべき唯一の場所は、PHP_SESSION_UPLOAD_PROGRESSという名前の隠しフィールドです(変更できるため、ここでは関数を介して定義されます)。 そして、任意の一意の値。



ランディングページのiframeにフォームを配置します。

そして、スクリプトをそこに置いて負荷の割合を決定します。



 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script> $(function() { setInterval(function() { $.get('?ajax', function(data) { $('#ajax').html(data); }); }, 500); }); </script> <div id="ajax"></div>
      
      





非同期クエリの場合、jQueryライブラリを使用してコードを削減し、読みやすさを向上させました。

この場合、非同期リクエストから取得するすべてのものを、識別子ajaxでブロックに出力します。



最後の部分はサーバー側の非同期リクエストハンドラです。



 if (isset($_SESSION["upload_progress_uniqueValue"])) { $progress = $_SESSION["upload_progress_uniqueValue"]; $percent = round(100 * $progress['bytes_processed'] / $progress['content_length']); echo "Upload progress: $percent%<br /><pre>" . print_r($progress, 1) . '</pre>'; } else { echo 'no uploading'; }
      
      





これはデバッグオプションであり、作業中のプロジェクトに不要なデータが含まれています。 しかし、私たちはそれらを見て、それに応じてダンプしたいだけです。



すべてを1ページに配置します。コードは小さい(ページの半分)ため、ここに投稿します。

 <?php session_start(); $uploadName = 'test'; //   if (isset($_GET['ajax'])) { //   if (isset($_SESSION["upload_progress_$uploadName"])) { //      $progress = $_SESSION["upload_progress_$uploadName"]; $percent = round(100 * $progress['bytes_processed'] / $progress['content_length']); echo "Upload progress: $percent%<br /><pre>" . print_r($progress, 1) . '</pre>'; } else { echo 'no uploading'; } exit; } elseif (isset($_GET['frame'])) { //   ?> <form action="" method="POST" enctype="multipart/form-data"> <input type="hidden" name="<?=ini_get("session.upload_progress.name")?>" value="<?=$uploadName?>" /><br /> <input type="file" name="file" /><br /> <input type="submit" /> </form> <?php } else { ?> <iframe src="?frame" height="100" width="500"></iframe> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script> $(function() { setInterval(function() { //   $.get('?ajax', function(data) { //    $('#ajax').html(data); //     }); }, 500); }); </script> <div id="ajax"></div> <?php }
      
      





レイアウトは無効です-たとえば、可能な限り縮小します。



明確にするためのスクリーンショット:





この記事では、ドキュメントに記載されている基本的な情報を提供していますが、これは現在の関連ドキュメントや書籍には含まれていないため、PHP開発者にとって有益だと思いました。



All Articles