Pablo PHG
Pablo PHG

Reputation: 27

Store the number of views of an image

I have a folder on my web server containing lots of PNG images. I would like to store in a database the number of views each image gets. I do not really know how to achieve this. I can only think of using a .htaccess file to rewrite urls in that folder to a php script that would serve those images and also store the visit on MySQL. But maybe there is a better way than serving all the images through a PHP script. I am looking for the simplest possible way to do this. And also, current urls should not be changed.

Upvotes: 0

Views: 96

Answers (2)

lethal-guitar
lethal-guitar

Reputation: 4519

Apache already keeps a log file of all requests (/var/log/apache2/access.log). This file contains the URL requested, time of request etc.

A possible approach could be:

  • Create a script which parses the access log and updates the database
  • Configure a cronjob which invokes the script periodically

Upvotes: 0

tomas789
tomas789

Reputation: 1330

There isn't a single "good" way to do this. But I cat give you few ideas.

  1. (recommended) Make a proxy PHP script which will take ID (could be file name) of the picture. It will increment the counter in the DB and then redirect to original image.

    This is very clear way to achieve expected behaviour. Disadvantage is it changes current filenames. So you have to use following schema

    CURRENT_URL -> (mod_rewrite) -> PHP PROXY SCRIPT -> NEW_URL

  2. Redirect all image urls to PHP proxy script which will directly server image (set appropriate headers and output content of file).

    This is 100% transparent way to do this but obvious disadvantage is that every image is processed by PHP. So when you have heavy-loaded server this could be problem.

  3. If you have access to logs of web server (access.log for Apache) you can process this file say once a day and update counters in DB. This is very good when approximation is good enough and your server is heavy-loaded because you can parse logs on different machine.

Upvotes: 3

Related Questions