初心者は必ずお読みください PHP ファイルのアップロードの進捗状況を包括的に明らかに_PHP チュートリアル

WBOY
リリース: 2016-07-15 13:27:25
オリジナル
840 人が閲覧しました

PHP はまだ比較的一般的に使用されているため、PHP ファイルのアップロードの進捗状況を研究し、ここで皆さんと共有したいと思います。 PHP でアップロードの進行状況バーを実装するのが難しい理由は、サーバーにファイルをアップロードするときに、対応する PHP ファイルを実行する前に、すべてのファイルがサーバーに送信されるまで待機する必要があるためです。これまでは、ファイル データは一時ファイルに保存されており、PHP はこのファイルのパスとサイズを取得できませんでした。

Actionscript 2.0 以降、Flash はファイルのアップロードとダウンロードをサポートします。サーバー側でファイルのアップロードの進行状況を取得することはできませんが、サーバー側でファイルの送信の進行状況を取得することができます。この原則に基づいて、Flash を使用してアップロードの進行状況バー効果を作成できます。インターネット上でいくつかの情報を見ましたが、間違いがあるようです。そこで私は自分で調査を行い、以前のプログラムに基づいてプログラムのセキュリティと堅牢性を強化し、カスタマイズ可能なパラメータをいくつか追加しました。 現在私が知っている方法は 2 つあります。1 つは、PHP の創設者である Rasmus Lerdorf によって作成された APC 拡張モジュールを使用する方法です。もう 1 つは、PECL 拡張モジュール Uploadprogress を使用して実装する方法です。それぞれの実装を参照してください。必要に応じて、より柔軟なアプリケーションを変更できます。

PHPアップロードファイルのAPC実装方法:

APCをインストールします。インストールについては公式ドキュメントを参照してください。PECLモジュールのインストール方法を使用して素早く簡単に行うことができます。php.iniの設定はここでは説明しません。パラメータ apc.rfc1867=1 なので、APC はアップロード プログレス バー関数をサポートします。APC ソース コードの説明ドキュメントにコード例があります:

<ol class="dp-xml">
<li class="alt"><span><span>if($_SERVER['REQUEST_METHOD']=='POST'){//上传请求  </span></span></li>
<li class="">
<span>$</span><span class="attribute"><font color="#ff0000">status</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">apc_fetch</font></span><span>('upload_'.$_POST['APC_UPLOAD_PROGRESS']);  </span>
</li>
<li class="alt"><span>$status['done']=1;  </span></li>
<li class=""><span>echojson_encode($status);//输出给用户端页面里的ajax调用,相关文档请自己寻找  </span></li>
<li class="alt"><span>exit;  </span></li>
<li class=""><span>}elseif(isset($_GET['progress_key'])){//读取上传进度  </span></li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">status</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">apc_fetch</font></span><span>('upload_'.$_GET['progress_key']);  </span>
</li>
<li class=""><span>echojson_encode($status);  </span></li>
<li class="alt"><span>exit;  </span></li>
<li class=""><span>}else{  </span></li>
<li class="alt"><span>//其他代码,比如上传表单等  </span></li>
<li class=""><span>} </span></li>
</ol>
ログイン後にコピー

PHP アップロード ファイルの進行状況の Uploadprogress モジュール実装メソッド:

を使用します。モジュールをインストールし、php.ini .filename_template="/tmp/upd_%s.txt" で Uploadprogress.file を設定する PECL モジュールのインストール方法 コード例:

<ol class="dp-xml">
<li class="alt"><span><span>if($_SERVER['REQUEST_METHOD']=='POST'){  </span></span></li>
<li class=""><span>if(is_uploaded_file($_FILES['upfile']['tmp_name'])){  </span></li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">upload_dir</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">'your_path/'</font></span><span>;  </span>
</li>
<li class="">
<span>$</span><span class="attribute"><font color="#ff0000">ext</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">strrchr</font></span><span>($_FILES['video']['name'],'.');  </span>
</li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">sessid</font></span><span>=$_POST['UPLOAD_IDENTIFIER'];  </span>
</li>
<li class="">
<span>$</span><span class="attribute"><font color="#ff0000">tmpfile</font></span><span>=$upload_dir.$sessid;  </span>
</li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">sessfile</font></span><span>=$upload_dir.$sessid.$ext;  </span>
</li>
<li class=""><span>if(move_uploaded_file($_FILES['upfile']['tmp_name'],$tmpfile)){  </span></li>
<li class="alt"><span>//上传成功  </span></li>
<li class=""><span>}else{  </span></li>
<li class="alt"><span>//上传失败  </span></li>
<li class=""><span>}else{  </span></li>
<li class="alt"><span>//上传错误  </span></li>
<li class=""><span> </span></li>
<li class="alt"><span>}elseif(!empty($_GET['sessid'])){  </span></li>
<li class=""><span>header("Expires:Mon,26Jul199705:00:00GMT");  </span></li>
<li class="alt"><span>header("Last-Modified:".gmdate("D,dMYH:i:s")."GMT");  </span></li>
<li class=""><span>header("Cache-Control:no-store,no-cache,must-revalidate");  </span></li>
<li class="alt">
<span>header("</span><span class="attribute"><font color="#ff0000">Cache-Control:post-check</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">0</font></span><span>,</span><span class="attribute"><font color="#ff0000">pre-check</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">0</font></span><span>",false);  </span>
</li>
<li class=""><span>header("Pragma:no-cache");  </span></li>
<li class="alt">
<span>header("Content-Type:text/html;</span><span class="attribute"><font color="#ff0000">charset</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">UTF</font></span><span>-8");  </span>
</li>
<li class=""><span> </span></li>
<li class="alt">
<span>$</span><span class="attribute"><font color="#ff0000">unique_id</font></span><span>=$_GET['sessid'];  </span>
</li>
<li class="">
<span>$</span><span class="attribute"><font color="#ff0000">uploadvalues</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">uploadprogress_get_info</font></span><span>($unique_id);  </span>
</li>
<li class="alt"><span> </span></li>
<li class=""><span>if(is_array($uploadvalues)){  </span></li>
<li class="alt"><span>echojson_encode($uploadvalues);  </span></li>
<li class=""><span>}else{  </span></li>
<li class="alt"><span>//读取进度失败,另外处理逻辑  </span></li>
<li class=""><span>}  </span></li>
<li class="alt"><span> </span></li>
<li class=""><span>}else{  </span></li>
<li class="alt"><span>//显示上传表单  </span></li>
<li class=""><span>}  </span></li>
</ol>
ログイン後にコピー

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/446544.html技術記事 PHP はまだ比較的一般的に使用されているため、PHP でのファイルのアップロードの進行状況を研究し、ここで皆さんに共有したいと思います。 PHPでアップロードプログレスバーを実装するのが難しい理由は...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!