MegaMufa
@MegaMufa

Как средствами php посчитать количество просмотров изображения?

Добрый день.

На странице расположен ряд ссылок на различные файлы (изображения). Типа link
Мне необходимо считать количество загрузок этих изображений. Честно говоря, ума не приложу как это делать.

Сначала думал ссылаться на php-скрипт, который будет вести учет и возвращать изображение с нужными заголовками. Но чувствую, что это будет не правильно - раздавать статику через php.

Сейчас сайт крутиться на apache, в ближайшем будущем планирую перевести его на nginx.

Подскажите, как вести учет раздачи статики с сайта?
  • Вопрос задан
  • 6213 просмотров
Пригласить эксперта
Ответы на вопрос 5
@kaasius
nginx+X-Accel-Redirect
Алсо, апач его тоже умеет.
Ответ написан
Комментировать
в базу значения счетчика так или иначе прийдется заносить скриптом.
видится это только так:
ссылка на файл (site/123.jpg) запускает скрипт, который добавит значение счетчика, и отправит header redirect на конкретно файл, который вообще может быть по пути "site/upload/563453476573465.jpg"
________________________________
upd:
www.opennet.ru/base/net/nginx_x_accel_redirect.txt.html
Ответ написан
Комментировать
maxaon
@maxaon
Если вам нужна простая статистика, тогда не городите свои велосипеды, анализируйте логи веб-сервера. Чудесный тысячный вопрос.
Делается одной строкой в консоли.
Ответ написан
Комментировать
@lnked
так можно попробовать

<a href="?count=/images/123.jpg">Скачать изображение</a>


if( $_GET['count']  && file_exists( $_SERVER['DOCUMENT_ROOT'] ) )
{
    //counter ++ 
    file_force_download( $_GET['count'] );
}

function file_force_download($file)
{
    if (ob_get_level()) {
        ob_end_clean();
    }
    
    header('Content-Description: File Transfer');
    if (isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE'))
    {
        header('Content-Type: application/force-download');
    }
    else {
        header('Content-Type: application/octet-stream');
    }
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($_SERVER['DOCUMENT_ROOT'] . $file));

    readfile($_SERVER['DOCUMENT_ROOT'] . $file);
    exit;
}
Ответ написан
miraage
@miraage
Старый прогер
Вариант извращенский, и, вероятно, не самый рациональный, но...

Для всех картинок по маске задать свой лог и парсить tail -f /path/to/access.log.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы