Track Your Visitors, Using PHP


Dennis Pallett

There are many different traffic analysis tools, ranging from simple counters to complete traffic analyzers. Although there are some free ones, most of them come with a price tag. Why not do it yourself With PHP, you can easily create a log file within minutes. In this article I will show you how!

Getting the information

The most important part is getting the information from your visitor. Thankfully, this is extremely easy to do in PHP or any other scripting language for that matter. PHP has a special global variable called $_SERVER which contains several environment variables, including information about your visitor. To get all the information you want, simply use the following code:

// Getting the information
$ipaddress = $_SERVER[REMOTE_ADDR];
$page = "http://{$_SERVER[HTTP_HOST]}{$_SERVER[PHP_SELF]}"; 
$page .= iif!empty$_SERVER[QUERY_STRING], "{$_SERVER[QUERY_STRING]}", "";
$referrer = $_SERVER[HTTP_REFERER];
$datetime = mktime;
$useragent = $_SERVER[HTTP_USER_AGENT];
$remotehost = @getHostByAddr$ipaddress;

As you can see the majority of information comes from the $_SERVER variable. The mktime http://nl2.php.net/mktime and getHostByAddr http://nl2.php.net/manual/en/function.gethostbyaddr.php functions are used to get additional information about the visitor.

Note: I used a function in the above example called iif. You can get this function at http://www.phpit.net/code/iif-function.

Logging the information

Now that you have all the information you need, it must be written to a log file so you can later look at it, and create useful graphs and charts. To do this you need a few simple PHP function, like fopen http://www.php.net/fopen and fwrite http://www.php.net/fwrite.

The below code will first create a complete line out of all the information. Then it will open the log file in "Append" mode, and if it doesnt exist yet, create it.

If no errors have occurred, it will write the new logline to the log file, at the bottom, and finally close the log file again.

// Create log line
$logline = $ipaddress . | . $referrer . | . $datetime . | . $useragent . | . $remotehost . | . $page . "
";

// Write to log file:
$logfile = /some/path/to/your/logfile.txt;

// Open the log file in "Append" mode
if !$handle = fopen$logfile, a+ {
	die"Failed to open log file";
}

// Write $logline to our logfile.
if fwrite$handle, $logline === FALSE {
	die"Failed to write to log file";
}
  
fclose$handle;

Now youve got a fully function logging module. To start tracking visitors on your website simply include the logging module into your pages with the include function http://www.php.net/include:

include log.php;

Okay, now I want to view my log file

After a while youll probably want to view your log file. You can easily do so by simply using a standard text editor like Notepad on Windows to open the log file, but this is far from desired, because its in a hard-to-read format.

Lets use PHP to generate useful overviews for is. The first thing that needs to be done is get the contents from the log file in a variable, like so:

// Open log file
$logfile = "/some/path/to/your/logfile.txt";

if file_exists$logfile {
	
	$handle = fopen$logfile, "r";
	$log = fread$handle, filesize$logfile;
	fclose$handle;
} else {
	die "The log file doesnt exist!";
}

Now that the log file is in a variable, its best if each logline is in a separate variable. We can do this using the explode function http://www.php.net/explode, like so:

// Seperate each logline
$log = explode"
", trim$log; 
After that it may be useful to get each part of each logline in a separate variable. This can be done by looping through each logline, and using explode again:
// Seperate each part in each logline
for $i = 0; $i < count$log; $i++ {
	$log[$i] = trim$log[$i];
	$log[$i] = explode|, $log[$i];
}

Now the complete log file has been parsed, and were ready to start generating some interesting stuff.

The first thing that is very easy to do is getting the number of pageviews. Simply use count http://www.phpit.net/count on the $log array, and there you have it;

echo count$log . " people have visited this website.";

You can also generate a complete overview of your log file, using a simple foreach loop and tables. For example:

// Show a table of the logfile
echo <table>;
echo <th>IP Address</th>;
echo <th>Referrer</th>;
echo <th>Date</th>;
echo <th>Useragent</th>;
echo <th>Remote Host</th>;

foreach $log as $logline {
	echo <tr>;

	echo <td> . $logline[0] . </td>;
	echo <td> . urldecode$logline[1] . </td>;
	echo <td> . dated/m/Y, $logline[2] . </td>;
	echo <td> . $logline[3] . </td>;
	echo <td> . $logline[4] . </td>;

	echo </tr>;

}

echo </table>;

You can also use custom functions to filter out search engines and crawlers. Or create graphs using PHP/SWF Charts http://www.maani.us/charts/index.php. The possibilities are endless, and you can do all kinds of things!

In Conclusion...

In this article I have shown you have to create a logging module for your own PHP website, using nothing more than PHP and its built-in functions. To view the log file you need to parse it using PHP, and then display it in whatever way you like. It is up to you to create a kick-ass traffic analyzer.

If you still prefer to use a pre-built traffic analyzer, have a look at http://www.hotscripts.com.





About The Author

Dennis Pallett is a young tech writer, with much experience in ASP, PHP and other web technologies. He enjoys writing, and has written several articles and tutorials. To find more of his work, look at his websites at http://www.phpit.net, http://www.aspit.net and http://www.ezfaqs.com.



To provide some examples of web design and development I give you here:

10 latest blog posts by Web Developer Jim Westergren

I’m an SEO and I have been working a lot with WordPress, here I give you all my tips for you to rank very well in Google with your blog. UPDATE: Check this blog post for a better guide. Quick Facts There are 55 million blogs out there, if you don’t stand out you will have no chance. The [...]

Update, March 9th I have now changed it again and put some color into it. What do you guys think? Sunday today and I was away from work with clients so I decided to work with my blog today from home. I made a new design for this site. Check out the navigation links at the top left [...]

This article is written for my friend “honey” (site). I have been bidding against honey on web site auctions for almost 2 years now. I have won maybe 60 auctions and I have now over 100 web sites. Honey owns over 300 … So here comes my checklist that I want to show honey as I [...]

Have you also heard of those horror stories of Google banning Adsense accounts for the smallest mistakes? You have read the Terms and Conditions and you know the basics but what do you do when you show your friend your site on your computer and the first thing he does is to click the Adsense ad [...]

This article is written more for myself so I remember how I do it the next time but probably a few people will also benefit from this for different uses and purposes. Today I updated all the PR values for the directories listed on my directory list. I had to update each listing in the MySQL [...]

Official site of a children’s hospital in Japan Hey, your “logo” is not blinking! MSY Technology Pty. Ltd. Are you sure product X is HOT? Personal site of Franz Magnus Incredible that you got several awards for that site. Angren.net, electronic shop Can’t you squeeze in something more on the home page? Official site of Northbridge Police Department Still being updated in 2006. Perhaps [...]

The last days I have been fighting in the war against the latest spam bot soldiers like a maniac. I own and manage over 70 web sites. This includes different forums, directories, blogs, topsites, article submission sites and you name it. Very recently there is a new wave of spam. The default captcha for vBulletin is now [...]

This is a WordPress plugin that will give you more links and higher rankings in the search engines. Most bloggers knows the importance of getting links in order to get high rankings in search engines. But did you know that the best links are those that are natural recommendations? Additionally I experienced better rankings across all [...]

To improve the navigation of your users as well as search engine traffic and ranking to your WordPress blog I suggest making a good site map of your posts - a map of your site. A kind of user friendly archive of your posts. This is not “Google sitemap”! The benefits: The user can quickly find a [...]

How I rank on different keywords and links to the different SE queries.

home | site map

Articles



Car Insurance | Remortgages | Life Insurance | Buy Anything On eBay | Car Finance