PHP でアップロードの進行状況バーを実装する方法は数多くあります。たとえば、現在では ajax を使用するか、iframe を使用してファイルのアップロードの進行状況バーの効果を実現します。
現在、私が知っている方法は 2 つあります。1 つは、PHP の創設者である Rasmus Lerdorf によって作成された APC 拡張モジュールを使用する方法です (http://pecl.php.net/package/apc)。 PECL 拡張モジュール Uploadprogress を使用して実装します (http://pecl.php.net/package/uploadprogress)。より柔軟なアプリケーションの場合は、独自のニーズに応じて変更できる 2 つの個別の実装例を示します。
APC実装方法:
APCをインストールします。インストールについては公式ドキュメントを参照してください。PECLモジュールのインストール方法を使用すると、ここでは説明されていませんが、迅速かつ簡単に行うことができます
php.iniを設定し、パラメータapc.rfc1867=1を設定します、APC がアップロード プログレス バー関数をサポートするように、APC ソース コードのドキュメントに指示があります
コード例:
コードは次のとおりです | コードをコピーします |
if ($_SERVER['REQUEST_METHOD '] == 'POST') { //アップロードリクエスト $ status = apc_fetch('upload_' . $_POST['APC_UPLOAD_PROGRESS']); $status['done'] = 1; echo json_encode($status) ; //クライアントページのajax呼び出しへの出力、関連ドキュメント 自分で見つけてください exit; } elseif (isset($_GET['progress_key'])) { //アップロードの進行状況を読み取ります $status = apc_fetch(' Upload_'.$_GET['progress_key']); echo json_encode ($status); exit; } else { //アップロードフォームなどのその他のコード } |
uploadprogress モジュール実装メソッド:
PECL モジュールのインストール方法を使用して、モジュールをインストールします
php.ini で、uploadprogress を設定します。file.filename_template = "/tmp/upd_%s.txt"
コード例:
コードは次のとおりです | コードをコピーします |
if($_SERVER['REQUEST_METHOD']=='POST') { if (is_uploaded_file($_FILES['upfile']['tmp_name'])) { $upload_dir = 'your_path/ '; $ext = strrchr($_FILES['video']['name'], '. ') move_uploaded_file($_FILES['upfile'] ['tmp_name'],$tmpfile)) { id'] ) ) { header("有効期限: 月曜日、1997 年 7 月 26 日 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" ) ; header("Cache-Control: no-store、no-cache、must-revalidate"); header("Cache-Control: post-check=0、pre-check=0"、false); header ( "Pragma: no-cache"); header("Content-Type:text/html;charset=UTF-8"); $unique_id = $_GET['sessid']; $uploadvalues = Uploadprogress_get_info ($unique_id ; }
統合
あとは、すべてを接続するだけです。これは、progress.php ページから行うことができます。
5.最終的な進行状況ページ コードは次のとおりです。
アップロード例 |
style="border: none; height: 100px; width: 400px;" >
< div id="progressouter" style= "幅: 500px; 高さ: 20px; ボーダー: 6px 赤一色; 表示: なし;"> "位置: 相対; 高さ: 20px; 背景色: 紫; 幅: 0%; "> から下から順に、リスト 1 の Upload.php スクリプトを埋め込む iframe を追加し、ページの上部に生成される一意の ID を与えます。 さて、このフォームの送信ボタンをまだ覚えていますか?
コードは次のとおりです コードをコピー type="submit" value="Upload!"/>
このボタンは 2 つのジョブを実行します。通常の送信ボタンと同様にフォームを送信しますが、その前にメイン ウィンドウで startProgress() スクリプトを呼び出します。 startProgress() スクリプトは、進行状況バーにそれ自体を表示するように指示します。表示属性なしで開始し、次に getProgress() スクリプトを実行する前に 1 秒待つようにブラウザーに指示します。
さて、getProgress() スクリプトを使用すると、興味深いことが起こります。前に、ファイルの進行状況を確認するには Ajax または同様の方法を使用する必要があると述べたのを覚えていますか?はい、この場合、フォームはショートカットを取得し、Google Maps API ライブラリから GdownloadUrl() 関数を呼び出します (フォームはページの上部にあるライブラリをインポートすることに注意してください。アクセスするには独自のキーを取得する必要があります)このライブラリは Google から無料で入手できます)。
この関数は、URL のコンテンツ (この場合は getprogress.php スクリプト) をダウンロードし、その中で定義されている匿名関数を実行します。関数が受け入れる最初の引数は、URL から返されるデータ (この場合はパーセンテージ) であるため、進行状況バーを更新するために使用できます。最後に、ファイルのダウンロードが完了していない場合は、10 分の 1 秒ごとに再試行するようにブラウザに指示します (実際には、これらの呼び出しはそれほど速く行われない可能性がありますが、ブラウザは最善を尽くします)。
最終結果は、ユーザーがアップロード中のファイルの進行状況を表示できるページです。
ファイルが大きすぎる場合は、次のことができます:
PHP は最初にアップロードファイルのサイズを制限します:
php.ini の次の行を表示します:
upload_max_filesize = 8M
post_max_size = 10M memory_limit = 20M
これらの値を上記の値に変更し、問題があるかどうかを確認してください。また、アップロードされた
http://www.bkjia.com/PHPjc/444650.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/444650.html技術記事 php でアップロードの進行状況バーを実装するには、現在では ajax が主流になったり、iframe を使用してそれを実現したりする方法がたくさんあります。ここでは、ファイルのアップロードの進行状況バーの効果を実現するために、php の apc と Uploadprogress を紹介します...
|