37

非常に大きなファイルを PHP アプリケーションにアップロードできるようにしたいと考えています (数百メガ - 8 ギガ)。ただし、これにはいくつかの問題があります。

ブラウザ:

  • HTML アップロードにはひどいフィードバックがあります。進行状況をポーリングするか (これは少しばかげています)、フィードバックをまったく表示しない必要があります。
  • Flash アップローダーは、アップロードを開始する前にファイル全体をメモリに格納します

サーバ:

  • PHP は post_max_size の設定を強制するため、簡単に悪用可能な DOS 攻撃につながる可能性があります。この設定をグローバルに設定したくありません。
  • サーバーは、秘密鍵などの他の変数も POST vars に存在する必要があります。ファイル全体がアップロードされた後ではなく、すぐにリクエストを拒否できるようにしたいと考えています。

要件:

  • HTTP は必須です。
  • ブラウザーで動作する限り、私はクライアント側のテクノロジに柔軟に対応します。
  • PHP は必須ではありません。Linux 環境でうまく機能する他のテクノロジがあれば、それはまったく問題ありません。
4

13 に答える 13

14

upload_max_filesize はディレクトリごとに設定できます。同じことが post_max_size にも当てはまります

例えば:

<Directory /uploadpath/>
  php_value upload_max_filesize 10G
  php_value post_max_size 10G
</IfModule>
于 2009-05-14T18:44:36.980 に答える
7

パイソンハンドラー?

PHP の代わりに Python POST ハンドラーを使用する。クライアントが HTTP ヘッダーに入れることができる一意の識別子を PHP アプリから生成します。mod_python を使用して、POST 本文全体が送信される前に大きなアップロードを拒否または受け入れます。

http://www.modpython.org/live/current/doc-html/dir-handlers-hph.htmlだと思い ます

ヘッダーをチェックし、残りの POST 入力を拒否できます。私はそれを試したことはありませんが、正しい道かもしれませんか?

mod_python のソースを見ると、read() による入力のバッファリングにより、HTTP 入力を少しずつ評価できるようです。ヘッダーが最初です。

https://svn.apache.org/repos/asf/quetzalcoatl/mod_python/trunk/src/filterobject.c

于 2009-05-14T18:17:13.380 に答える
7

私が知っているのは古いですが、今日も誰かがこの問題を抱えているかもしれません。これは、Javascript と、たとえば PHP だけで実行できます。クライアント側に Flash や Java は必要ありません。

デモ: http://dnduploader.filkor.org/

アイデアは、Javascript の Blob slice() メソッドでファイルをスライスすることです...

于 2012-05-08T21:37:02.243 に答える
3

Javaアプレットはどうですか?私が以前勤めていた会社では、そうしなければなりませんでした。アプレットは、すべてのオプションが利用可能なこの日と時代では特に問題があることを知っていますが、実際には、Web 開発で遭遇するデスクトップのような問題に対する最も用途の広いソリューションです。考慮すべきことだけです。

于 2009-05-14T17:13:59.243 に答える
2

これをすべて試しました...これは私が今まで使った中で断然最高です...

http://www.uploadify.com/

于 2009-06-02T03:43:44.393 に答える
2

jumploader.comをご覧ください。

アップロードに適した Java アプレット。

画像のアップロードに使用しましたが、問題なく動作します。10MB を超える大きなファイルを試したことはありませんが、本当に大きなファイルでも動作するはずです。

于 2009-07-22T23:25:44.583 に答える
2

1 つのディレクトリ内のスクリプトのみに post_max_size を設定できます。そこにアップロード スクリプトを配置し、そのスクリプトだけが大きなサイズを処理できるようにします。そのスクリプトが大きなファイルや役に立たないファイルで攻撃される可能性は依然としてありますが、グローバルに設定することは回避されます。

それを APC で使用すると、何か良い結果が得られるかもしれません: APC に関する IBM Developer Works の記事

于 2009-05-14T17:26:19.587 に答える
1

FTP、SSH、または SCPを調べます。これにより、大きなファイルをアップロードでき、ファイルへのアクセス制御も可能になります。これは実装に少し時間がかかるかもしれませんが、おそらく私が考えることができる最も安全な方法です.

于 2009-05-14T17:31:33.317 に答える
1

進行状況と合計ファイルサイズを確認するために APC を使用することを検討しましたか。これについての良いブログ投稿があります。それは役立つかもしれません。

于 2009-05-14T17:19:06.530 に答える
1

ブラウザでWebdavとJavascriptを使用できるかもしれません

WebDAV への進行中の AJAX 大きなファイルのアップロード

http://www.webdavsystem.com/ajax/programming/upload_progress

シンプルなライブラリ

http://debris.demon.nl/projects/davclient.js/doc/README.html

その後、JS でユーザーを成功ページにリダイレクトできます。JS Client->WebDAV を渡す前に、PHP プレリュードで秘密鍵などを処理できます。

于 2009-05-14T17:19:54.407 に答える
0

別の依存関係を追加するのは面倒ですが、私の経験では、このようなことをしているほとんどのWebサイトはクライアント側でフラッシュを使用し、大きなファイルをチャンクとしてアップロードしています

Flash ファイルのアップロードに関するハウツーとしてのAdob​​e

codeproject でこのチュートリアルも見つけました。

Flash と ASP.NET を使用したプログレス バーによる複数ファイルのアップロード

PS - あなたが .net ではなく PHP を使用していることは知っていますが、重要な部分はフラッシュだと思いました ;)

于 2009-05-14T17:38:15.517 に答える
-1

これを試してください: http://www.simple2ftp.comは、巧妙な PHP アプリケーション ラッパー内から Java ベースの FTP アプレットを使用します。

于 2013-06-26T19:21:35.463 に答える