現在、ファイルのダウンロードの進行状況を判断するための多くのオプションがあります:クライアントテクノロジーとサーバーテクノロジーの両方を使用しています。 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';
レイアウトは無効です-たとえば、可能な限り縮小します。
明確にするためのスクリーンショット:

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