PHP/Apache/AJAX POST データ制限
AJAX を使用して POST で大量のデータ (200 万文字) を送信しようとした場合(jQuery) の場合、PHP 側はデータの取得に失敗し、「未定義のインデックス」エラーを返します。この問題は、php.ini の post_max_size 設定とは関係がありません。この設定は十分に大きい (256M) です。
制限の調査
問題は、課せられた複数の制限にあります。プロセスに関与するさまざまなコンポーネントによる:
-
Apache:
- LimitRequestBody: 受信 POST リクエストの最大サイズを制御します。 Apache エラー ログを確認して実際の制限を確認する必要があります。通常、デフォルトでは約 2 GB です。
-
PHP:
- post_max_size: POST データのサイズを制限します。この設定が php.ini で十分に高く設定されていることを確認してください (例: 256M)。
- upload_max_filesize: POST データとは関係ありませんが、完全を期すために言及する価値があります。
- max_input_time: 最大時間を制御します。 POST データ処理に許可されます。タイムアウトを回避するには、大きな値に設定します (-1 など)。
- max_input_nesting_level: POST データ内のネストされた配列の深さを制限します。データに深くネストされた配列が含まれている場合は、この値を増やす必要がある場合があります。
- max_execution_time: それが問題の原因である可能性は低いです。
- memory_limit: PHP サブプロセスに十分なメモリがあることを確認します。データを扱います。必要に応じてこの設定を調整します (例: 256M)。
- max_input_vars: POST リクエストの変数の数を制限します。データに多数の要素が含まれている場合は、この値を増やす必要がある場合があります。
解決策
Apache の LimitRequestBody が到達した場合、コンパイルされた制限を超えているため、データを直接 POST することはできません。データを小さなチャンクに分割し、複数の POST リクエストで送信する必要があります。
以上がPHP の制限が高いにもかかわらず、AJAX POST データが制限されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。