2009-10-02 4 views
6

È possibile in PHP ottenere un conteggio del numero di byte trasmessi al client? Ad esempio, se sto trasmettendo un file da 10 MB, c'è un modo per scoprire se tutti e 10 i MB sono stati inviati al client o per vedere se il client ha interrotto il trasferimento? So che Apache registrerà questo in seguito, ma mi piacerebbe accedere ai dati in PHP.PHP: determina quanti byte vengono inviati tramite http

+0

si vuole fare un progressbar o qualcosa del genere? – Natrium

+0

Volevo solo contrassegnare i file come completamente scaricati, quindi rimuoverli da un elenco. il problema era file_get_contents(), non cattura l'interruzione dell'utente. se usi fread() e fai un loop through, puoi prenderlo e quindi usare ftell() per calcolare all'incirca quanti byte sono stati inviati. (scusa per aver postato la domanda quando ho finito per capirlo da solo) – Jay

risposta

11

Ecco quello che ho finito per fare (grazie 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

Questo è ancora il modo in cui lo stai facendo? – Brad

+0

Sì. Lavorando abbastanza bene. Perché? – Jay

+0

Sto cercando di limitare i download delle richieste API in base all'ammontare del trasferimento dati. Grazie per il codice. – Brad