A Good Visitor Counter
This simple script creates an image that can be used on any page to display a
visitor counter.
A session variable is used to ensure that the counter only
advances once per browser session
(the most accurate way to count website
visitors).
If you want to see how it works, the counter is shown here:
In your html, put an <img> tag for the image, such as the one below.
Do not put
width or height parameters in the img tag as this will distort the generated
image.
<img src="counter.php" alt="counter" style="border: inset 3px;">
Name the script below counter.php.
| <?php $filename = 'counter.dat'; session_start(); if (!isset($_SESSION['visitor_counter']) AND is_writable($filename)) { $count = file_get_contents($filename); if (is_numeric($count)) { $count++; $handle = fopen($filename,"w"); fwrite($handle,"$count"); fclose($handle); $_SESSION['visitor_counter'] = $count; } } else { $count = $_SESSION['visitor_counter']; } $width = (strlen($count)*8)+8; $im = @imagecreate($width, 18); $background_color = imagecolorallocate($im,255,255,255); $text_color = imagecolorallocate($im,0,0,0); imagestring($im,4,4,2,$count,$text_color); imagepng($im); imagedestroy($im); ?> |
The count value is stored in a file counter.dat.
Create a starter counter.dat
file with notepad with a good starting value (say 50 - give yourself a few
starter hits).
You can cheat any time just by changing the value in counter.dat
with notepad.
Put your web page, counter.php and counter.dat in the same directory.
--------------------------------------------------------------------------------
If you want an invisible counter (cannot be seen on the page), you can simply
use the following <img> tag in the html page:
<img src="counter.php" width=1 height=1>
--------------------------------------------------------------------------------
If you would like a comma in the number if the number is more than 3 digits,
then add this line just before the $width calculation:
if (strlen($count)>3) $count = substr($count,0,strlen($count)-3) . "," .
substr($count,strlen($count)-3,3);
--------------------------------------------------------------------------------
If you are using a PHP page and want to include the counter in a text line
rather than display it as an image, you
can simply replace the bottom half of the script (everything after the if/else
test) with this one line:
echo "You are visitor $count since January, 2004";
Do not use the <img> tag, but rather use a php include('counter.php'); where you
want the counter on your page.
--------------------------------------------------------------------------------
Note - If the user's browser is blocking cookies, then the counter will count
each page hit rather than browser sessions.