파일 다운로드를 추적하는 방법


81

플래시 플레이어에서 mp3를 재생하는 웹 사이트가 있습니다. 사용자가 '재생'을 클릭하면 플래시 플레이어가 자동으로 mp3를 다운로드하고 재생을 시작합니다.

특정 노래 클립 (또는 바이너리 파일)이 다운로드 된 횟수를 쉽게 추적 할 수있는 방법이 있습니까?


재생 링크가 실제 mp3 파일 또는 플레이어를 표시하는 일부 자바 스크립트 코드에 대한 링크입니까?

후자의 경우, 거기에 자신의 로깅 코드를 쉽게 추가하여 히트 수를 추적 할 수 있습니다.

전자의 경우 웹 서버 로그 자체를 추적하고 구별 할 수있는 무언가가 필요합니다. 내 호스팅 계획은 Webalizer와 함께 제공됩니다.

그것은 자바 스크립트 코드이므로 대답합니다.

그러나 다른 방법을 사용하여 (호스트를 전환하지 않고) 다운로드를 추적하는 방법을 아는 것이 좋습니다.

답변:


39

재미있는 점은 2 일 전에 모든 음악에 대한 PHP 미디어 갤러리를 썼다는 것입니다. 비슷한 문제가있었습니다. 플레이어에 http://musicplayer.sourceforge.net/ 을 사용하고 있습니다 . 그리고 재생 목록은 php를 통해 작성됩니다. 모든 음악 요청은 xfer.php? file = WHATEVER라는 스크립트로 이동합니다.

$filename = base64_url_decode($_REQUEST['file']);
header("Cache-Control: public");
header('Content-disposition: attachment; filename='.basename($filename));
header("Content-Transfer-Encoding: binary");
header('Content-Length: '. filesize($filename));

//  Put either file counting code here, either a db or static files
//
readfile($filename);  //and spit the user the file

function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_,', '+/='));
}

그리고 파일을 호출 할 때 다음과 같은 것을 사용합니다.

function base64_url_encode($input) {
     return strtr(base64_encode($input), '+/=', '-_,');
}

http://us.php.net/manual/en/function.base64-encode.php

mp3 파일의 실제 링크가 필요한 JavaScript 또는 플래시 플레이어 (예 : JW 플레이어)를 사용하는 경우 "& type = .mp3"텍스트를 추가하여 최종 링크가 "www. example.com/xfer.php?file=34842ffjfjxfh&type=.mp3 " 이렇게하면 파일 링크에 영향을주지 않고 mp3 확장자로 끝나는 것처럼 보입니다.


19
이 스크립트에 디렉토리 탐색 취약점이 있습니다! 공격자는 xfer.php? file = .. / .. / .. / passwd 또는 원하는 모든 것을 전달할 수 있습니다! 조심해!!!
Alex Weinstein

6
파일이 너무 크고 트래픽이 많으면 서버의 메모리 제한을 날려 버릴 것입니다. 제가 직접 경험 한 것입니다.
tmsimont 2011

"디렉터리 탐색 취약점"을 수정하는 방법은 무엇입니까?
Jon87

@anarchOi : 가장 쉬운 방법은 GET 매개 변수 ( $_REQUEST['file']) 를 알려진 양호한 파일 이름의 화이트리스트와 비교하는 것 입니다. 예를 들어, 파일을 저장하는 디렉토리의 모든 파일 목록입니다. 당신이 확인 ... 당신이 다운로드되고 싶은 파일을 저장하는 디렉토리를 사용
BlueRaja - 대니 Pflughoeft

@tmsimont, 메모리 소비를 줄이는 방법을 찾았습니까?
ezpresso


25

bash 사용 :

grep mp3 /var/log/httpd/access_log | wc

이 방법에는 적어도 2 개의 결함이 있습니다. GET 및 HEAD 요청을 계산하고 모든 HTTP 응답 코드를 계산합니다. 예를 들어, 다운로드를 과대 평가하게 만드는 206 개의 응답이있을 수 있습니다.
8ctopus

13

노래 / 바이너리 파일이 Apache에서 제공되는 경우 access_log를 쉽게 grep하여 다운로드 횟수를 확인할 수 있습니다. 간단한 post-logrotate 스크립트는 로그를 grep하고 db에서 카운트 통계를 유지할 수 있습니다. 이것은 라이브 요청 코드 경로에 있지 않기 때문에 성능상의 이점이 있습니다. 오프라인에서 통계와 같이 중요하지 않은 작업을 수행하는 것은 웹 사이트를 많은 사용자로 확장하는 것이 좋습니다.


12

* .mp3 요청을 dubayou가 작업중인 쿼리 문자열로 변환하는 Apache .htaccess 지시문을 설정할 수도 있습니다. 직접 요청을 유지하면서 로그 기능을 응답에 포함시킬 수있는 우아한 방법 일 수 있습니다.


6

재생 링크가 실제 mp3 파일 또는 플레이어를 표시하는 일부 자바 스크립트 코드에 대한 링크입니까?

후자의 경우, 거기에 자신의 로깅 코드를 쉽게 추가하여 히트 수를 추적 할 수 있습니다.

전자의 경우 웹 서버 로그 자체를 추적하고 구별 할 수있는 무언가가 필요합니다. 내 호스팅 계획에는 webalizer가 포함되어 있습니다.


3

음악 라이브러리에 대한 데이터베이스가 있습니까? mp3를 다운로드 할 때 실행되는 서버 코드가 있으면 여기에 추가 코드를 추가하여 재생 횟수를 늘릴 수 있습니다. 자바 스크립트가 재생 횟수를 늘리기 위해 두 번째 요청을 할 수도 있지만 이로 인해 사람 / 로봇이 잘못 횟수를 늘릴 수 있습니다.

나는 인터넷 라디오 사이트에서 일했고 우리는 모든 노래가 재생 된 시간을 추적하기 위해 별도의 테이블을 사용했습니다. 우리의 스트림은 icecast를 실행하는 perl 스크립트로 구동되었으므로 새 트랙이 재생되기 시작할 때마다 데이터베이스 요청을 트리거했습니다. 그런 다음 재생 횟수를 계산하기 위해 노래의 ID가 재생 로그에 몇 번 있는지 계산하는 쿼리를 실행합니다.


3

AWStats / 웹 서버 로그 읽기와 같은 문제는 대용량 다운로드가 종종 로그 내의 데이터 청크로 분할 될 수 있다는 것입니다. 이로 인해 정확한 다운로드 수를 조정하기가 매우 어렵습니다.

다운로드 링크를 클릭 할 때마다 한 번씩 등록 되므로 Google Analytics 이벤트 추적을 사용 하는 것이 좋습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.