2009-10-02 12 views
6

Czy w PHP można uzyskać liczbę bajtów przesłanych do klienta? Na przykład, jeśli wysyłam plik 10 MB, czy istnieje sposób sprawdzenia, czy wszystkie 10 MB zostały wysłane do klienta, czy też klient przerwał transfer? Wiem, że Apache zapisze to później, ale chciałbym uzyskać dostęp do danych w PHP.PHP - określić, ile bajtów wysłano przez http

+0

chcesz dokonać progressbar czy coś takiego? – Natrium

+0

Chciałem tylko oznaczyć pliki jako całkowicie pobrane, a następnie usunąć je z listy. problemem było file_get_contents(), nie przechwytuje przerwy użytkownika. jeśli używasz fread() i pętli, możesz go złapać, a następnie użyj ftell(), aby dowiedzieć się w przybliżeniu, ile wysłanych bajtów. (przepraszam za opublikowanie pytania, kiedy skończyło się to na mnie) – Jay

Odpowiedz

11

Oto, co skończyło się robi (dzięki 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

Czy to nadal jest sposób, w jaki to robisz? – Brad

+0

Yup. Wypracowanie wystarczająco dobrze. Czemu? – Jay

+0

Chcę ograniczyć pobieranie żądań API przez transfer danych. Dzięki za kod. – Brad

Powiązane problemy