PHP_PHP チュートリアルでの大きなファイルのアップロードの原理の分析

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

PHP は私にとってより便利なプログラミングをもたらしてくれましたが、使用中に問題が発生する可能性があります。PHP で大きなファイルをアップロードする際の小さな問題について話しましょう。ローカルとサーバーの両方の側面にセキュリティ上の問題が含まれるため、input type="file" に基づくページ ファイルのアップロードは常に厄介な状況にありました。一方で、ユーザーは自分のプライバシーが漏洩されることを望んでいないため、ブラウザはアップロード時にユーザーが選択したファイルについて有効な判断を行うことができません。一方、サーバー側のセキュリティと送信負荷の軽減のため、システムはユーザーがアップロードを開始する前に違法なファイルを拒否することを望んでいます。

時間が経つにつれて、元の入力方法に基づいたアップロードは、ネットワーク ストレージ Web サイトが回避するレガシーな問題となり、また、あらゆる種類の奇妙なプラグインやアップロード クライアントも作成されました。アップロードの入力方法が悪いのでしょうか?もちろん違います。ファイルのアップロードが大きくない場合でも、PHP では複合フォームのみが必要であり、非常にシンプルで信頼性があります。

<ol class="dp-xml">
<li class="alt">
<span><strong><font color="#006699"><span class="tag"><</SPAN><SPAN class=tag-name>form</SPAN></FONT></STRONG><SPAN> </SPAN><SPAN class=attribute><FONT color=#ff0000>enctype</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>"multipart/form-data"</FONT></SPAN><SPAN> </SPAN><SPAN class=attribute><FONT color=#ff0000>action</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>"__URL__"</FONT></SPAN><SPAN> </SPAN><SPAN class=attribute><FONT color=#ff0000>method</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>"POST"</FONT></SPAN><SPAN class=tag><STRONG><FONT color=#006699>></span></font></strong></span><span> </span>
</li>
<li class=""><span>一个输入框  </span></li>
<li class="alt">
<span></span><strong><font color="#006699"><span class="tag"><</SPAN><SPAN class=tag-name>input</SPAN></FONT></STRONG><SPAN> </SPAN><SPAN class=attribute><FONT color=#ff0000>name</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>"userfile"</FONT></SPAN><SPAN> </SPAN><SPAN class=attribute><FONT color=#ff0000>type</FONT></SPAN><SPAN>=</SPAN><SPAN class=attribute-value><FONT color=#0000ff>"file"</FONT></SPAN><SPAN> </SPAN><SPAN class=tag><STRONG><FONT color=#006699>/></span></font></strong><span> </span>
</li>
<li class=""><span>和服务器端的一行代码  </span></li>
<li class="alt"><span>move_uploaded_file($_FILES['userfile']['tmp_name'], '/var/www/uploads/'. basename($_FILES['userfile']['name'])); </span></li>
</ol>
ログイン後にコピー

はアップロードプロセス全体を実現できます。しかし、ファイルが大きくなるにつれて、フォームアップロードの欠点が明らかになります。特に、PHP が大きなファイルをアップロードしないように最小ファイル サイズを取得するという単純な考えは非常に困難になっています。 1 つずつ見ていきましょう。MAX_FILE_SIZ を渡します。マニュアルにはよく書かれています:

MAX_FILE_SIZE 隠しフィールド (単位はバイト) はファイル入力フィールドの前に配置する必要があり、その値は受信したファイルの最大サイズです。これはブラウザに対する推奨事項であり、PHP もこれをチェックします。この設定はブラウザ側で簡単にバイパスできるため、この機能を使用して大きなファイルをブロックすることは期待しないでください。実際、PHP 設定の最大アップロード ファイル サイズは期限切れになりません。ただし、この項目をフォームに追加することをお勧めします。これにより、ユーザーが大きなファイルのアップロードを待って時間を費やした後に、ファイルが大きすぎてアップロードに失敗したというトラブルを回避できます。

明らかに、PHP 開発者は、PHP による大きなファイルのアップロードの問題も考慮していますが、マニュアルにあるように、MAX_FILE_SIZE はブラウザーに対する提案にすぎません。実際、すべての主流ブラウザーはこれまでのところこの提案を採用していないため、MAX_FILE_SIZE を使用してファイルのサイズを制限しています。ファイルサイズは単なる飾りのようなもので、現実的ではありません。

サーバー側経由

MAX_FILE_SIZE が無効であるため、サーバー側はユーザーがアップロードしたファイルのサイズを $_FILES['userfile']['size' を通じて判断します。 ] を選択し、アップロードを受け入れるかどうかを決定し、メッセージを返します。サーバーへの負荷と、当面の悪意のある妨害行為の可能性を除けば、このソリューションは帯域幅の無駄以外の何物でもないように思えます。また、ユーザーによるファイルのアップロードも制限されます。ただし、これも不可能です。PHP ファイルのアップロードは、php.ini の次の設定の影響を受けます。

<ol class="dp-xml">
<li class="alt"><span><span>post_max_size  </span></span></li>
<li class=""><span>upload_max_filesize  </span></li>
<li class="alt"><span>max_execution_time  </span></li>
<li class=""><span>memory_limit </span></li>
</ol>
ログイン後にコピー

設定方法はマニュアルに詳しく説明されていますが、この方法がまだ実行できない理由は、PHP が実行されるときです。スクリプトがmemory_limitを超えると、すべてのPOSTデータが失われ、エラーは報告されません。ユーザーが非常に長いフォームに記入し、memory_limit を超えるファイルとともにアップロードすると、長い待ち時間の後、待っているのは別のきれいな空白のフォームであることがわかります。これは非常に印象的なユーザー エクスペリエンスです。ああ。さらに、数十 MB のサーバー トラフィックはファイル サイズの検出にのみ使用されますが、現在のネットワーク環境では許可されていません。


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/446554.html技術記事 PHP はより便利なプログラミングをもたらしてくれましたが、使用中に問題が発生する可能性があります。PHP で大きなファイルをアップロードする際の小さな問題について話しましょう。ローカルとサーバーの両方のセキュリティが関係するため...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート