web-dev-qa-db-ja.com

POSTリクエストのサイズをPHP

PHPでPOSTリクエスト本文のサイズを取得する方法はありますか?

17
Andrey M.

単純な:

$size = (int) $_SERVER['CONTENT_LENGTH'];

$_SERVER['CONTENT_LENGTH']は、HTTPリクエストメソッドがPOST(GETではない)の場合にのみ設定されることに注意してください。これは、-で指定されているContent-Lengthヘッダーの生の値です。 RFC 72

ファイルのアップロードの場合、アップロードされたファイルの合計サイズを取得する場合は、$_FILE配列を繰り返し処理して合計する必要があります。各$file['size']。 POSTデータのエンコードオーバーヘッドのため、正確な合計サイズが生のContent-Length値と一致しない場合があります(また、$file['error']を使用してアップロードエラーを確認する必要があることに注意してください)。部分的なアップロードの場合は$_FILES、空のアップロードの場合はUPLOAD_ERR_PARTIALなど、各UPLOAD_ERR_NO_FILE要素のコード。 ファイルアップロードエラー PHP手動。)

37
scoffey

私の推測では、それは$_SERVER['CONTENT_LENGTH']にあります。

エラー検出のためにそれが必要な場合は、$_FILES['filename']['error']を覗いてみてください。

ファイルのアップロードが失敗したかどうかを判断しようとしている場合は、以下のリンクに示すようにPHPファイルエラー処理を使用する必要があります。これは、ファイルを検出するための最も信頼できる方法ですアップロードエラー:
http://us3.php.net/manual/en/features.file-upload.errors.php

ファイルのアップロードなしでPOSTリクエスト)のサイズが必要な場合、何かでそうすることができるはずですこのような:

$request = http_build_query($_POST);
$size = strlen($request);
5

これはうまくいくかもしれません:

$bytesInPostRequestBody = strlen(file_get_contents('php://input'));
// This does not count the bytes of the request's headers on its body.
2
p4bl0

私はあなたが探していると思います $HTTP_RAW_POST_DATA

0
n1313