Отслеживание просмотров изображений - PHP - PullRequest
2 голосов
/ 30 декабря 2010

Мне бы хотелось, чтобы мое приложение могло определить, не было ли изображение просмотрено в последние 30 дней, и удалить его (вместе с данными в связанной с ним базе данных). Я знаю, что вы можете заставить PHP читать и выводить изображение динамически, но я слышал, что это сильно напрягает систему. Есть ли способ для меня, чтобы отслеживать эти хиты, даже когда изображение просматривается напрямую? (сможет ли htaccess сделать это?) Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 30 декабря 2010

Для .htaccess что-то вроде этого ...

RewriteRule ^image/(.*)$ image.php?id=$1

И для PHP ...

$id = $_GET["id"]; //don't forget to sanitize
mysql_query("UPDATE images SET views = views + 1 WHERE image = '$id'"); //update no of views
header("Content-Type: image/jpeg"); //send image header
readfile($id); //output file to browser
3 голосов
/ 30 декабря 2010

Вы можете анализировать журналы HTTP и выполнять этот анализ постфактум.

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

0 голосов
/ 30 декабря 2010

Насколько я знаю, вам понадобится база данных для этого.

Пример схемы:

Images
  id (int, PK)
  path (text)
  hits (int)

PHP:

// get_image.php
// note, this is just an example and I'm not considering security or hacking attempts
$sql = mysql_query('SELECT * FROM images WHERE id = '.$_GET['id']);
$img

if(mysql_num_rows($img) == 1)
  while($row = mysql_fetch_assoc($sql))
    $img = $row;
else
  // handle some error

mysql_query("UPDATE images SET hit = hits + 1 WHERE id = ".$_GET['id']);
$img = file_get_contents($img['path']);
header('image/jpg');
echo $img;

Тамздесь могут быть ошибки, я просто даю вам общее представление ...

0 голосов
/ 30 декабря 2010

Вы можете создать скрипт, который выбирает изображения и проверяет вашу базу данных, чтобы показать, что изображение было просмотрено. Установив тип возврата вашего скрипта на image/jpg, вы можете просто использовать этот скрипт вместо прямого доступа к изображениям:

<?php
//simplified image display script

$imagepath="phpimages/$id.jpg";
$db->pingImage($id);
$image=imagecreatefromjpeg($imagepath);
header('Content-Type: image/jpeg');
imagejpeg($image);

?>

Тогда используйте:

<img src='fetchimage.php?id=478' alt='tracked image' />
...