2009-09-01 18 views

Respuesta

4

Supongo que está en el $_SERVER['CONTENT_LENGTH'].

Y si necesita eso para la detección de errores, eche un vistazo a $_FILES['filename']['error'].

+0

Estoy cargando archivos de gran tamaño en el servidor junto con otros campos. Pero si lo cancelo, faltará una parte de la solicitud, por lo que debo comparar el tamaño real del cuerpo de la solicitud con el valor del encabezado Content-Length para garantizar que no se cancele la carga del archivo. –

+0

'$ _SERVER ['CONTENT_LENGTH']' por supuesto contiene el valor del encabezado. Creo que es responsabilidad de PHP asegurarse de que cumpla con los datos reales que se reciben. Tal vez '$ _FILES ['file'] ['error']' tiene algunos consejos para ello? –

+0

Si intentas detectar subidas de archivos fallidas, deberías hacerlo como se muestra en mi publicación, sin contar los bytes. –

0

supongo que busca $HTTP_RAW_POST_DATA

+0

Hmm ... Pero no necesita los datos para saber su tamaño, ¿verdad? –

+0

Gracias, pero $ HTTP_RAW_POST_DATA no está disponible con enctype = "multipart/form-data". Necesito usar multipart/form-data para enviar archivos. –

+0

** Advertencia ** Esta característica fue DEPURADA en PHP 5.6.0, y RETIRADA a partir de PHP 7.0.0. [PHP Link] (http://php.net/manual/en/reserved.variables.httprawpostdata.php) –

4

Si usted está tratando de averiguar si es o no una carga de archivos no, usted debe utilizar el error de manejo de archivo PHP como se muestra en el siguiente enlace. Esta es la forma más confiable para detectar errores de carga de archivos:
http://us3.php.net/manual/en/features.file-upload.errors.php

Si necesita el tamaño de una solicitud POST sin ningún tipo de carga de archivos, usted debería ser capaz de hacerlo con algo como esto:

$request = http_build_query($_POST); 
$size = strlen($request); 
+0

de lo contrario, si 'solo' quiere tamaño, puede obtenerlo para un archivo usando la matriz $ _FILES => $ _FILES ['nameoffile'] ['size'] – Jakub

2

Esto podría funcionar:

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

Antes de PHP5.6, esta acción puede borrar la secuencia porque está permitido leerla solo una vez: [docs] (http://php.net/manual/en/wrappers) .php.php). Entonces verá su longitud, pero luego estará vacía – vladkras

30

tan simple como:

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

Tenga en cuenta que $ _SERVER ['CONTENT_LENGTH'] solo se establece en las solicitudes HTTP a través del método POST. Este es el valor bruto del encabezado Content-Length. Ver: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13

En el caso de la carga de archivos, si desea obtener el tamaño total de los archivos cargados , debe iterar sobre los elementos $ _FILE para resumir cada archivo $ [ 'size']. El tamaño total exacto no coincide con el valor de longitud de contenido sin procesar debido a la sobrecarga de codificación de los datos POST.

También tenga en cuenta que para los errores de archivo , debe verificar el código $ file ['error'] de cada elemento $ _FILES. Por ejemplo, las cargas parciales devolverán el error UPLOAD_ERR_PARTIAL y las cargas vacías devolverán UPLOAD_ERR_NO_FILE. Consulte la documentación de errores de carga de archivos en el manual de PHP.

+1

$ size = (int) $ _SERVER ['CONTENT_LENGTH']; ¿Eso da tamaño en unidad de bytes? – anujeet

+0

obsoleto ... $ _SERVER ['argv'] – ina

Cuestiones relacionadas