Làm cách nào để theo dõi lượt tải xuống tệp


79

Tôi có một trang web phát nhạc mp3 trong trình phát flash. Nếu người dùng nhấp vào 'phát', trình phát flash sẽ tự động tải xuống mp3 và bắt đầu phát.

Có cách nào dễ dàng để theo dõi số lần một clip bài hát cụ thể (hoặc bất kỳ tệp nhị phân nào) đã được tải xuống không?


Liên kết phát có phải là liên kết đến tệp mp3 thực sự hay đến một số mã javascript bật lên trình phát không?

Nếu sau này, bạn có thể dễ dàng thêm mã đăng nhập của riêng mình vào đó để theo dõi số lần truy cập vào nó.

Nếu trước đây, bạn sẽ cần một cái gì đó có thể theo dõi chính nhật ký máy chủ web và phân biệt điều đó. Kế hoạch lưu trữ của tôi đi kèm với Webalizer, thực hiện điều này rất tốt.

Đó là một đoạn mã javascript để trả lời điều đó.

Tuy nhiên, sẽ rất tuyệt nếu biết cách theo dõi lượt tải xuống bằng phương pháp khác (mà không cần chuyển đổi máy chủ).

Câu trả lời:


39

Điều buồn cười là tôi đã viết một thư viện phương tiện php cho tất cả các bản nhạc của mình cách đây 2 ngày. Tôi đã có một vấn đề tương tự. Tôi đang sử dụng http://musicplayer.sourceforge.net/ cho trình phát. Và danh sách phát được xây dựng thông qua php. Tất cả các yêu cầu âm nhạc đều chuyển đến một tập lệnh có tên 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, '-_,', '+/='));
}

Và khi bạn gọi các tệp, hãy sử dụng những thứ như:

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

http://us.php.net/manual/en/ Chức năng.base64-encode.php

Nếu bạn đang sử dụng một số JavaScript hoặc trình phát flash (trình phát JW chẳng hạn) yêu cầu liên kết thực của tệp mp3 hoặc bất cứ thứ gì, bạn có thể thêm văn bản "& type = .mp3" để liên kết cuối cùng trở thành một cái gì đó giống như: "www. example.com/xfer.php?file=34842ffjfjxfh&type=.mp3 ". Bằng cách đó, có vẻ như nó kết thúc bằng phần mở rộng mp3 mà không ảnh hưởng đến liên kết tệp.


19
có một lỗ hổng truyền qua thư mục trong tập lệnh này! Kẻ tấn công có thể chuyển vào xfer.php? File = .. / .. / .. / passwd hoặc bất cứ thứ gì khác mà chúng muốn! Hãy cẩn thận!!!
Alex Weinstein

6
điều này sẽ làm tăng giới hạn bộ nhớ của máy chủ nếu tệp quá lớn và lưu lượng truy cập của bạn cao .. điều mà bản thân tôi đã trải qua.
tmsimont

làm thế nào để sửa chữa "lỗ hổng truyền tải thư mục"?
Jon87

@anarchOi: Cách dễ nhất là so sánh tham số GET ( $_REQUEST['file']) với danh sách trắng các tên tệp tốt đã biết. Ví dụ: danh sách tất cả các tệp trong thư mục bạn lưu trữ tệp của mình. Hãy chắc chắn rằng bạn chỉ sử dụng thư mục đó để lưu trữ các tập tin bạn muốn được tải về ...
BlueRaja - Danny Pflughoeft

@tmsimont, Bạn đã tìm ra cách nào để giảm mức tiêu thụ bộ nhớ chưa?
ezpresso


25

Sử dụng bash:

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

13

Nếu bài hát / tệp nhị phân của bạn được phân phát bởi apache, bạn có thể dễ dàng ghi vào tệp access_log để biết số lần tải xuống. Một tập lệnh post-logrotate đơn giản có thể ghi nhật ký và duy trì số liệu thống kê của bạn trong một db. Điều này có lợi thế về hiệu suất do không nằm trong đường dẫn mã yêu cầu trực tiếp của bạn. Thực hiện những việc không quan trọng như số liệu thống kê ngoại tuyến là một ý tưởng hay để mở rộng trang web của bạn tới số lượng lớn người dùng.


12

Bạn thậm chí có thể thiết lập một chỉ thị .htaccess của Apache để chuyển đổi các yêu cầu * .mp3 thành chuỗi truy vấn mà dubayou đang làm việc. Đó có thể là một cách thanh lịch để giữ yêu cầu trực tiếp và vẫn có thể đưa chức năng ghi nhật ký dòng vào phản hồi.


6

Liên kết phát có phải là liên kết đến tệp mp3 thực sự hay đến một số mã javascript bật lên trình phát không?

Nếu sau này, bạn có thể dễ dàng thêm mã đăng nhập của riêng mình vào đó để theo dõi số lần truy cập vào nó.

Nếu trước đây, bạn sẽ cần một cái gì đó có thể theo dõi chính nhật ký máy chủ web và phân biệt điều đó. Kế hoạch lưu trữ của tôi đi kèm với webalizer, thực hiện điều này rất tốt.


3

Có cơ sở dữ liệu cho thư viện nhạc của bạn không? Nếu có bất kỳ mã máy chủ nào chạy khi tải xuống mp3 thì bạn có thể thêm mã bổ sung vào đó để tăng số lần phát. Bạn cũng có thể yêu cầu javascript thực hiện yêu cầu thứ hai để tăng số lượt chơi, nhưng điều này có thể dẫn đến việc người / rô-bốt tăng số lượng một cách sai lệch.

Tôi từng làm việc cho một trang internet-radio và chúng tôi sử dụng các bảng riêng biệt để theo dõi thời gian mỗi bài hát được phát. Các luồng của chúng tôi được cung cấp bởi một tập lệnh perl chạy icecast, vì vậy, chúng tôi đã kích hoạt yêu cầu cơ sở dữ liệu mỗi khi một bản nhạc mới bắt đầu phát. Sau đó, để tính toán số lần phát, chúng tôi sẽ chạy một truy vấn để đếm số lần id của một bài hát trong nhật ký phát.


3

Vấn đề tôi gặp phải với những thứ như AWStats / đọc qua nhật ký máy chủ web là các bản tải xuống lớn thường có thể được chia thành nhiều phần dữ liệu trong nhật ký. Điều này làm cho việc điều chỉnh số lượng tải xuống chính xác khá khó khăn.

Tôi đề xuất Theo dõi sự kiện Google Analytics , vì tính năng này sẽ đăng ký một lần cho mỗi lần nhấp chuột vào liên kết tải xuống.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.