有没有办法在PHP中获取POST请求主体的大小?
答案 0 :(得分:35)
简单如下:
$size = (int) $_SERVER['CONTENT_LENGTH'];
请注意,$_SERVER['CONTENT_LENGTH']
仅在HTTP请求方法为POST(非GET)时设置。这是RFC 7230中指定的Content-Length
标头的原始值。
如果是文件上传,如果您想获得上传文件的总大小,则应迭代$_FILE
数组以对每个$file['size']
求和。由于POST数据的编码开销,确切的总大小可能与原始Content-Length
值不匹配。 (另请注意,您应使用每个$file['error']
元素的$_FILES
代码检查上传错误,例如UPLOAD_ERR_PARTIAL
用于部分上传,UPLOAD_ERR_NO_FILE
用于空上传。请参阅{{3 PHP手册中的文档。)
答案 1 :(得分:5)
我的猜测是,它位于$_SERVER['CONTENT_LENGTH']
。
如果您需要进行错误检测,请查看$_FILES['filename']['error']
。
答案 2 :(得分:4)
如果您要确定文件上传是否失败,您应该使用PHP文件错误处理,如下面的链接所示。这是检测文件上传错误的最可靠方法:
http://us3.php.net/manual/en/features.file-upload.errors.php
如果您需要没有任何文件上传的POST请求的大小,您应该可以这样做:
$request = http_build_query($_POST);
$size = strlen($request);
答案 3 :(得分:2)
这可能有效:
$bytesInPostRequestBody = strlen(file_get_contents('php://input'));
// This does not count the bytes of the request's headers on its body.
答案 4 :(得分:0)
我猜您正在寻找$HTTP_RAW_POST_DATA