Подсчет количества просмотров указанного c файла на сервере (php) - PullRequest
0 голосов
/ 11 июля 2020

Есть ли способ подсчитать, сколько просмотров определенного c файла было на моем сервере?

Так, например, у меня есть файл в каталоге data/, data1.pdf, data2.pdf, data3.pdf. И URL-адреса, например, https://www.example.com/data/data1.pdf. Как я могу посчитать общее количество просмотров на data1.pdf?

В моем случае доступ пользователя к ресурсу осуществляется сканированием QR-кода. Поэтому мне нужно поймать это действие, чтобы подсчитать общее количество просмотров, указав c ресурсов. Кроме того, мне нужно обновить значение счетчика в базе данных MySQL, например data1.pdf: 10 просмотров, data2.pdf: 8 просмотров, data3.pdf: 6 просмотров.

Какой лучший способ сделать это ?

1 Ответ

1 голос
/ 11 июля 2020

Вам нужно перехватить «намерение» пользователя перед тем, как передать ему запрошенные файлы.

Есть несколько способов сделать это. Поскольку у вас уже есть интерфейс для ссылки (QR-код), вы можете использовать его, чтобы сначала отправить пользователя на первую «страницу счетчика» по URL-адресу www.example.com/serve.php?f=data/data1.pdf (это будет URL-адрес, закодированный в QR-коде. )

Файл будет выглядеть так:

<?php
  $requested_file = $_GET['f'];
  $conn = //init your connexion
  $conn->execute("UPDATE counters SET counter = counter + 1 WHERE filename = ?", requested_file);
  
  header("Location: "+$requested_file);
  exit;

, если вы не можете изменить ссылку

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

Я предлагаю использовать файл .htaccess, который перенаправляет все запросы в каталоге на наш serve.php. Имейте в виду, что по умолчанию этот файл htaccess будет перенаправлять ВСЕ трафик c из папки data в наш php файл, поэтому вам, безусловно, нужно будет проделать дополнительную работу, чтобы интегрировать его в свой домен

RewriteEngine on
RewriteBase /                                                              
RewriteCond %{REQUEST_URI}  ^/data     [NC]
RewriteRule ^(.*)$ /serve.php?f=$1 [NC,L,QSA]

и serve.php будут изменены на:

<?php
  $requested_file = $_GET['f'];
  $conn = //init your connexion
  $conn->execute("UPDATE counters SET counter = counter + 1 WHERE filename = ?", requested_file);
  
  $content = file_get_contents($server_path_to_requested_file);
  header("Content-type: application/pdf"); //change that if you handle multiple files
  echo $content;
  exit;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...