2009-10-02 6 views
6

PHP에서 클라이언트로 전송되는 바이트 수를 계산할 수 있습니까? 예를 들어, 10MB 파일을 출력하는 경우 10MB가 모두 클라이언트로 전송되었는지 여부를 확인하거나 클라이언트가 전송을 중간에 중단했는지 확인하는 방법이 있습니까? 나는 아파치가 나중에 이것을 기록 할 것이지만, 나는 PHP로 데이터에 접근하고 싶다.PHP - HTTP를 통해 전송 된 바이트 수 결정

+0

당신이 그와 같은 진행 막대 또는 무언가를 만들고 싶어? – Natrium

+0

파일을 완전히 다운로드 한 것으로 표시하고 목록에서 제거하기 만하면됩니다. 문제는 file_get_contents() 였고 사용자 중단을 감지하지 못했습니다. fread()를 사용하고 루프 스루 (loop through)를 사용하면 catch하고 ftell()을 사용하여 전송 된 바이트 수를 대략적으로 파악할 수 있습니다. (혼자서 알아 내려고했을 때 게시 한 것에 대해 유감스럽게 생각합니다.) – Jay

답변

11

는 여기에 내가 (감사 검보를)하고 결국 무엇을 :

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

아직도이 방법을 사용하고 있습니까? – Brad

+0

예. 충분히 잘 지내. 왜? – Jay

+0

데이터 전송량별로 API 요청 다운로드를 제한하고 싶습니다. 코드를 보내 주셔서 감사합니다. – Brad