Reputation: 3766
Is there any way to get size of POST-request body in PHP?
Upvotes: 21
Views: 61678
Reputation: 4688
As simple as:
$size = (int) $_SERVER['CONTENT_LENGTH'];
Note that $_SERVER['CONTENT_LENGTH']
is only set when the HTTP request method is POST (not GET). This is the raw value of the Content-Length
header, as specified in RFC 7230.
In the case of file uploads, if you want to get the total size of uploaded files, you should iterate over the $_FILE
array to sum each $file['size']
. The exact total size might not match the raw Content-Length
value due to the encoding overhead of the POST data. (Also note you should check for upload errors using the $file['error']
code of each $_FILES
element, such as UPLOAD_ERR_PARTIAL
for partial uploads or UPLOAD_ERR_NO_FILE
for empty uploads. See file upload errors documentation in the PHP manual.)
Upvotes: 43
Reputation: 3906
This might work :
$bytesInPostRequestBody = strlen(file_get_contents('php://input'));
// This does not count the bytes of the request's headers on its body.
Upvotes: 3
Reputation: 143099
My guess is, it's in the $_SERVER['CONTENT_LENGTH']
.
And if you need that for error detection, peek into $_FILES['filename']['error']
.
Upvotes: 5
Reputation: 27962
If you're trying to figure out whether or not a file upload failed, you should be using the PHP file error handling as shown at the link below. This is the most reliable way to detect file upload errors:
https://www.php.net/manual/en/features.file-upload.errors.php
If you need the size of a POST request without any file uploads, you should be able to do so with something like this:
$request = http_build_query($_POST);
$size = strlen($request);
Upvotes: 6