2010-02-24 6 views
6

파일 호스팅 사이트가 있으며 사용자가 다운로드에 대한 보상을 얻습니다. 그래서 방문자가 전체 파일을 다운로드했는지 여부를 추적 할 수있는 방법이 있는지 알고 싶었 기 때문에 보상 만위한 가짜 부분 다운로드가 없었습니다.추적 파일 다운로드 완료

감사합니다.

+0

큰 파일은 어떻게 추정됩니까? Kb? Mb? <100 Mb? – Strae

+0

DK-Wamp에 따르면 "이 주제에 대한 다른 세부 정보가 있습니까? // 이 스크립트를 사용하려고했지만 나에게 적합하지 않았습니다. :( 나는 그것이 오래된 주제이지만 해결책을 찾으십시오. " – Veedrac

답변

1

웹 서버에서 반환 한 HTTP 응답 코드를 모니터링하고 HTTP 응답 코드를 생성 한 세션으로 되돌릴 수 있다면 비즈니스에 도움이됩니다.

응답 코드 206은 시스템이 일부 정보를 전달했지만 전부는 아니 었음을 나타냅니다. 파일의 최종 청크가 꺼지면 206의 응답 코드가 없어야합니다.

URL에 세션 코드를 넣어 사용자 세션에 연결할 수 있다면 간단한 방법으로 포인트를 부여 할 수 있습니다 로그 집계

+0

사용법의 예를 보여 주시겠습니까? – Shishant

+0

아파치 로그를 쓸모가 없습니다. 게시 할 수있는 로그에서 파일 전송 스 니펫 (snippet)이 있습니까? 하나의 파일과 하나의 IP 주소로 필터링하여 관련 항목 만 가져옵니다. 로그 형식에 따라 파일의 마지막 페이지 인 항목을 찾는 것이 상대적으로 쉽습니다. – TheJacobTaylor

1

파일 호스팅 웹 사이트에서 비슷한 해결책을 구현했습니다.

당신이 원하는 것은 결과에 관계없이 PHP 스크립트의 실행 종료를 감지 할 수있는 register_shutdown_function 콜백을 사용하는 것입니다.

다음 웹에 액세스 할 수없는 위치에 서버의 파일을 저장하고 다운로드가 얼마나 많은 바이트를 전달했는지 추적 할 수 있어야한다는 php : 아이디어를 거쳐야합니다 클라이언트.

여기

<?php 
register_shutdown_function('shutdown', $args); 

$file_name = 'file.ext'; 
$path_to_file = '/path/to/file'; 
$stat = @stat($path_to_file); 

//Set headers 
header('Content-Type: application/octet-stream'); 
header('Content-Length: '.$stat['size']); 
header('Connection: close'); 
header('Content-disposition: attachment; filename='.$file_name); 

//Get pointer to file 
$fp = fopen('/path/to/file', 'rb'); 
fpassthru($fp); 

function shutdown() { 
    $status = connection_status(); 

    //A connection status of 0 indicates no premature end of script 
    if($status == 0){ 
    //Do whatever to increment the counter for the file. 
    } 
} 
>? 

이 분명히 개선 할 수있는 방법이다, 그래서 당신은 자세한 내용이나 다른 동작을 필요로하는 경우, 알려 주시기 바랍니다 예를 들면 : (구현하는 기본적인 방법입니다!

+1

큰 파일을 가지고 아파치를 죽일 것입니다 ... – Strae

+0

예, 맞습니다. 사이트 사용에 크게 의존합니다. 우리 응용 프로그램에서 우리는 또한 파일을 통해 모든 파일을 파이프하는 데 사용했습니다. 사용자가 대역폭을 조율 할 수있게하는 것 Lighttpd를 실행하는 백엔드 스토리지 서버에 파일을 제공하기위한 전용 서버가 있었기 때문에 필수 모듈을 제외한 모든 모듈을 사용자 정의 컴파일 및 비활성화하여 Apache의 점유 공간을 줄였습니다. 35 개의 프런트 엔드를 통해 약 130 개의 동시 다운로드/서버, 총 처리량 2 .3Gbps ... –