1

httppostリクエストを使用してあるホストから別のホストにファイルを転送しています。受信ホストは、phpをオンボードで使用してapacheを実行します。リクエストにはmultipart/form-dataが含まれており、phpスクリプト(cURL)によって実行されています。合計サイズが約20Mbの86個のファイルがあります。問題は、受信するphpスクリプトが空の$_POST配列を取得することです。送信スクリプトを再構成して、同じ要求をループで送信しますが、反復ごとにデータ収集から1つのファイルを削除します。36個のファイル(合計サイズ〜12Mb)が削除されると、受信スクリプトはデータを受け入れ、$_POST変数が適切に入力されます。何が間違っている可能性がありますか?責任のあるすべてのphp.iniパラメーターを確認したので、それらには妥当な値が含まれています。

  ini_set("post_max_size","510M"); 
  ini_set("memory_limit","400M"); 
  ini_set("upload_max_filesize","510M"); 
  ini_set("max_file_uploads","500"); 

理由を調査する方法はありますか?つまり、error_logには有用なものは何も含まれていません。たぶん、見るべき別の情報源がありますか?

4

2 に答える 2

3

post_max_sizeディレクトリごとに実行時に値を設定することはできません。変更が反映されてもphpinfo()、フォームが処理されると無視されるため、デフォルトの 8MB に戻ります。

これは、ファイルの合計サイズが 20MB であるという事実によって証明されていますが、最大 12MB のファイルを削除すると、スクリプトは機能します。

20 - 12 = 8MB // Therefore the script works

これに対する唯一の解決策は、 に値を設定することです。あるいはphp.ini、Apache を使用しているので、http.confまたは.htaccessファイルに値を設定することもできます。

IISを実行しているWindows上でしたが、私も少し前にこの問題を抱えていました。ただし、問題は同じです。この問題の詳細については、このスレッドを参照してください。

結局のところ、Windows では、ディレクトリごとに PHP_INI_USER とマークされた ini ディレクティブしか設定できません。残念ながら、upload_max_filesize と post_max_size はどちらも PHP_INI_PERDIR です。http://php.net/manual/en/configuration.changes.phpの PHP ドキュメントから

ディレクトリの設定は、このディレクトリまたはそのサブディレクトリから実行されるスクリプトに対してアクティブになります。キーの下の値には、PHP 構成ディレクティブの名前と文字列値が含まれている必要があります。値内の PHP 定数は解析されません。ただし、この方法で設定できるのは PHP_INI_USER で変更可能な構成値のみで、PHP_INI_PERDIR 値は設定できません。

したがって、Plesk にはこれらのディレクティブを変更するためのインターフェースがあり、phpinfo() がそれらを検出しても、実際の最大アップロード サイズを変更することはありません。Plesk では、Windows でこれらを変更することはできません。また、phpinfo() で変更を報告するべきではありませんが、何ができるでしょうか。

于 2013-01-14T09:33:55.673 に答える
1

Suhosin拡張機能がインストールされているかどうかを確認します。POST、GET、REQUEST 経由で受信できるデータの量を制限する設定がいくつかあります。suhosin.upload.max_uploadsまた、デフォルトで 20 に設定されているため、アップロードされるファイルの数を制限できます。

設定がアクションを実行すると、通常、POST 配列は切り捨てられます。

また、ファイルをアップロードする場合は$_FILES、 ではなく配列を確認してください$_POST

于 2013-01-14T09:15:41.540 に答える