2009-10-02 14 views
6

¿Es posible en PHP obtener un recuento de la cantidad de bytes transmitidos al cliente? Por ejemplo, si estoy entregando un archivo de 10 MB, ¿hay alguna forma de averiguar si se enviaron los 10 MB al cliente o si el cliente interrumpió la transferencia parcialmente? Sé que Apache lo registrará luego, pero me gustaría acceder a los datos en PHP.PHP: determine cuántos bytes se enviaron a través de http

+0

desea hacer una progressbar o algo por el estilo? – Natrium

+0

solo quería marcar los archivos como completamente descargados, luego eliminarlos de una lista. el problema era file_get_contents(), no capta la interrupción del usuario. si usa fread() y lo atraviesa, puede atraparlo y luego usar ftell() para calcular aproximadamente cuántos bytes se enviaron. (disculpa la publicación de la pregunta cuando terminé averiguando por mi cuenta) – Jay

Respuesta

11

Esto es lo que terminé haciendo (gracias Gumbo):

ignore_user_abort(true); 

$handle = fopen($file_path, 'r'); 
while (! feof($handle)) { 
    echo fread($handle, 4096); 
    if (connection_aborted()) { 
     $transfer_success = false; 
     $bytes_transferred = ftell($handle); 
     break; 
    } 
} 
fclose($handle); 
+0

¿Sigue así la forma en que haces esto? – Brad

+0

Sí. Trabajando lo suficientemente bien. ¿Por qué? – Jay

+0

Quiero limitar las descargas de solicitudes API por cantidad de transferencia de datos. Gracias por el código. – Brad

Cuestiones relacionadas