4

Apache Web サーバーで実行されている PHP スクリプトに XHR ストリーミング経由でファイルをアップロードすると、何かが POST 本文全体をバッファリングし、ファイル全体がアップロードされると PHP に渡されます。

これは非常にメモリ集約的であり、最適ではありません。POSTデータをPHPスクリプトに直接ストリーミングするほぼ同じ方法で別のサーバーを構成しているため、メモリ使用量が少なくなります。

私の人生では、構成の違いを理解することはできません。私が探すべき設定「BufferPostBody Yes」のような明白なものはありますか?

これまでに試したこと

mod_security を無効にする HTTPS ではなく HTTP 経由でファイルを送信する Apache ログ、php ログ、syslog をチェックする。エラーや警告はありません。

動作をテストする方法

XHR ストリーミング経由で大容量ファイル (235M) の JS 経由のアップロードを開始します。PHP は、リクエストが開始されるとすぐに「アップロードを実行しています」と出力するはずです。代わりに、「アップロードを実行中」という行は、ファイル全体が POST 経由でアップロードされた後にのみ表示されます。

不良サーバーにロードされたモジュールのリストは次のとおりです。

コア mod_log_config mod_logio prefork http_core mod_so mod_alias mod_auth_basic mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_reqtimeout mod_rewrite mod_setenvif mod_ssl mod_status mod_unique_id

4

2 に答える 2

1

PHP は POST リクエスト全体が利用可能であると想定しているため、投稿が完了するのを待ってから PHP を起動するのは設計上のものだと思います。そしておそらく避けられない。

できることは、ブラウザーで HTML5 ファイル API を使用してファイルを分割し、ファイル チャンクを 1 つずつ独自の PHP POST 要求で送信することです。

HTML5 を使用してブラウザーでファイルを分割する方法の例: http://www.html5rocks.com/en/tutorials/file/dndfiles/

HTML5 ファイル API のブラウザー サポート: http://caniuse.com/#feat=fileapi (fx IE<10 では機能しません :( )

于 2014-01-04T15:59:38.910 に答える