Как я могу отслеживать загрузку файлов

У меня есть веб-сайт, который воспроизводит mp3 в флеш-плеере. Если пользователь нажимает «play», флэш-плеер автоматически загружает mp3 и начинает его воспроизведение.

Есть ли простой способ отследить, сколько раз был загружен определенный клип (или любой бинарный файл)?


Ссылка воспроизведения - это ссылка на реальный mp3-файл или на какой-нибудь код JavaScript, который появляется в плеере?

Если последнее, вы можете легко добавить свой собственный код регистрации там, чтобы отслеживать количество попаданий к нему.

Если первое, вам нужно что-то, что может отслеживать сам журнал веб-сервера и делать это различие. Мой хостинг-план идет с Webalizer, который делает это красиво.

Это код javascript, который отвечает на это.

Однако было бы неплохо узнать, как отслеживать загрузки, используя другой метод (без переключения хостов).

1.08.2008 17:14:58
8 ОТВЕТОВ
РЕШЕНИЕ

Самое смешное, что я написал php медиа галерею для всей моей музыки 2 дня назад. У меня была похожая проблема. Я использую 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

Если вы используете какой-либо javascript или флеш-плеер (например, JW-плеер), для которого требуется, чтобы фактическая ссылка была mp3-файлом или чем-то еще, вы можете добавить текст "& type = .mp3", чтобы конечный линк стал примерно таким: "www .example.com / xfer.php? файл = 34842ffjfjxfh и тип = .mp3" . Таким образом, похоже, что он заканчивается расширением mp3, не затрагивая ссылку на файл.

39
11.04.2018 12:10:46
в этом скрипте есть уязвимость, связанная с обходом каталога! Злоумышленник может передать файл xfer.php? File = .. / .. / .. / passwd или что-то еще, что он хочет! Быть осторожен!!!
Alex Weinstein 22.09.2008 04:36:40
это взорвет ограничения памяти сервера, если файлы слишком велики, а ваш трафик высок .. что-то, что я испытал сам.
tmsimont 8.07.2011 17:17:39
как исправить "уязвимость обхода каталога"?
Jon87 18.06.2013 00:49:09
@anarchOi: Самый простой способ - сравнить параметр GET ( $_REQUEST['file']) с белым списком известных файлов с хорошими именами. Например, список всех файлов в каталоге вы храните ваши файлы. Убедитесь , что вы только использовать этот каталог для хранения файлов , которые вы хотите быть загружены ...
BlueRaja - Danny Pflughoeft 14.11.2013 02:34:51
@tmsimont, вы нашли какие-нибудь способы снижения потребления памяти?
ezpresso 21.08.2017 22:55:35

Используйте ваши файлы журнала httpd. Установите http://awstats.sourceforge.net/

28
7.05.2012 01:43:59

Используйте Bash:

grep mp3 /var/log/httpd/access_log | wc
25
2.10.2009 02:12:55

Если ваша песня / бинарный файл обслуживался apache, вы можете легко получить доступ к access_log, чтобы узнать количество загрузок. Простой сценарий после logrotate может создавать журналы и вести статистику вашего счета в БД. Это дает преимущество в производительности, поскольку отсутствует путь к действующему коду запроса. Делать некритические вещи, такие как статистика в автономном режиме, - это хорошая идея для масштабирования вашего сайта для большого количества пользователей.

13
12.10.2008 09:10:45

Вы могли бы даже установить директиву Apache .htaccess, которая конвертирует запросы * .mp3 в строку запроса, с которой вы работаете. Это может быть элегантный способ сохранить прямой запрос и при этом иметь возможность включить функцию регистрации в ответ.

12
1.08.2008 17:42:04

Ссылка воспроизведения - это ссылка на реальный mp3-файл или на какой-нибудь код JavaScript, который появляется в плеере?

Если последнее, вы можете легко добавить свой собственный код регистрации там, чтобы отслеживать количество попаданий к нему.

Если первое, вам нужно что-то, что может отслеживать сам журнал веб-сервера и делать это различие. Мой хостинг-план идет с Webalizer, который делает это красиво.

6
1.08.2008 17:24:24

Есть ли база данных для вашей музыкальной библиотеки? Если есть какой-либо серверный код, который запускается при загрузке mp3, вы можете добавить туда дополнительный код, чтобы увеличить счетчик воспроизведения. Вы также можете сделать так, чтобы javascript сделал второй запрос на увеличение количества игр, но это может привести к ложному увеличению количества людей / роботов.

Раньше я работал на сайте интернет-радио, и мы использовали отдельные столы для отслеживания времени исполнения каждой песни. Наши потоки работали на скрипте Perl, запускающем Icecast, поэтому мы запускали запрос к базе данных каждый раз, когда начинал воспроизводиться новый трек. Затем, чтобы вычислить количество воспроизведения, мы запустим запрос, чтобы подсчитать, сколько раз идентификатор песни был в журнале воспроизведения.

3
4.09.2008 18:44:22

Проблема, с которой я столкнулся в таких вещах, как AWStats / чтение журналов веб-сервера, заключается в том, что большие загрузки часто можно разделить на фрагменты данных в журналах. Это затрудняет согласование точного количества загрузок.

Я бы предложил отслеживание событий Google Analytics , так как оно будет регистрироваться один раз за клик по ссылке для скачивания.

3
9.06.2016 09:38:50