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

63

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

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


Является ли ссылка воспроизведения ссылкой на фактическую mp3 файл или код javascript что всплывает игрок?

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

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

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

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

Теги:
logging
download
analytics

8 ответов

38
Лучший ответ

Самое смешное, что я написал флеш-галерею для всей своей музыки 2 дня назад. У меня была аналогичная проблема. Im использует http://musicplayer.sourceforge.net/ для проигрывателя. и плейлисты строятся через php. все музыкальные запросы идут туда script, называемый xfer.php? file = WHATEVER

$filename = base64_url_decode($_REQUEST['file']);
header("Cache-Control: public");
header("Content-Description: File Transfer");
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?file=34842ffjfjxfh&type=.mp3". Таким образом, похоже, что это заканчивается расширением mp3, не затрагивая ссылку на файл.

  • 19
    в этом скрипте есть уязвимость, связанная с обходом каталога! Злоумышленник может передать файл xfer.php? File = .. / .. / .. / passwd или что-то еще, что он хочет! Быть осторожен!!!
  • 6
    это взорвет ограничения памяти сервера, если файлы слишком велики, а ваш трафик высок .. что-то, что я испытал сам.
Показать ещё 4 комментария
26

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

21

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

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

Если ваша песня/бинарный файл была подана apache, вы можете легко grep access_log узнать количество загрузок. Простой post-logrotate script может grep вести журналы и поддерживать статистику count в db. Это имеет преимущество в производительности, поскольку вы не находитесь в своем коде кода запроса в реальном времени. Выполнение некритических вещей, таких как статистика в автономном режиме, является хорошей идеей масштабирования вашего сайта для большого числа пользователей.

10

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

6

Является ли ссылка для воспроизведения ссылкой на фактический mp3 файл или на какой-то код javascript, который выдает плеер?

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

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

2

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

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

2

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

Я работал на сайте интернет-радио, и мы использовали отдельные таблицы для отслеживания времени воспроизведения каждой песни. Наши потоки были задействованы perl script с запуском icecast, поэтому мы запускали запрос базы данных каждый раз, когда начинался новый трек. Затем, чтобы вычислить счетчик пьес, мы выполнили запрос, чтобы подсчитать, сколько раз был записан идентификатор песни в журнале воспроизведения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню