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

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

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


Is the play link a link to the actual mp3 file or to some javascript code that pops up a player?

If the latter, you can easily add your own logging code in there to track the number of hits to it.

If the former, you'll need something that can track the web server log itself and make that distinction. My hosting plan comes with Webalizer, which does this nicely.

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
81
0
19 902
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

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

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

Ответ принят как подходящий

Самое смешное, что 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

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

в этом скрипте есть уязвимость, связанная с обходом каталогов! Злоумышленник может передать xfer.php? File = .. / .. / .. / passwd или что угодно еще! Будь осторожен!!!

Alex Weinstein 22.09.2008 08:36

это приведет к увеличению ограничений памяти сервера, если файлы слишком велики, а ваш трафик высок ... что-то, что я испытал на себе.

tmsimont 08.07.2011 21:17

как исправить "уязвимость обхода каталогов"?

Jon87 18.06.2013 04:49

@anarchOi: Самый простой способ - сравнить параметр GET ($_REQUEST['file']) с белым списком известных хороших имен файлов. Например, список всех файлов в каталоге, в котором вы храните файлы. Убедитесь, что вы Только используете этот каталог для хранения файлов, которые вы хотите загрузить ...

BlueRaja - Danny Pflughoeft 14.11.2013 06:34

@tmsimont, Вы не нашли способы снизить потребление памяти?

ezpresso 22.08.2017 01:55

@ezpresso ya, проверьте ссылки, которые я разместил по этому вопросу: stackoverflow.com/questions/6627952/… (также немного забавно, что я отвечал на ответ на то, что я опубликовал 6 лет назад, ха-ха

tmsimont 22.08.2017 03:34

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

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

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

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

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

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

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

В этом методе есть как минимум 2 недостатка: он считает запросы GET и HEAD и считает все коды ответов HTTP. Например, 206 ответов могут привести к завышению количества загрузок.

8ctopus 04.12.2020 09:29

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

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

Другие вопросы по теме