Interactive Project Manager / Developer
Aquent
US-CO-Denver

Justtechjobs.com Post A Job | Post A Resume

Revisited: Logging With PHP
Figuring out where your hits are coming from and which pages are being viewed is not too difficult if you use a good log analyzer like Analog or something similar.
But if you want to pull up reports on the fly at any time, you need to take a different route.
For about six months, I was importing my Apache logs into an SQL database and then running ad-hoc queries against that.
Unfortunately, that requires me to go out and manually grab those log files, tweak the format a bit, then import. I wanted something better - something that was continually updated, gave me information on what content was being viewed, browser and platforms stats, and trends over time.
The solution I came up with in my original version of this article has served me well for a couple years now. I enhanced it somewhat when we built SourceForge and all logging and tracking for the entire SourceForge.net web site pipes through this system, including page views on the main site and page views for each of the 12,000 projects that use the site.
Basically, what I do is add a row to a table in a database for each action I want to log (page views in this example, but you can log banner add views, clicks, click-ins from other sites, etc).
Here is the table structure I've been using on SourceForge:
create table activity_log (
  day integer DEFAULT '0' NOT NULL,
  hour integer DEFAULT '0' NOT NULL,
  group_id integer DEFAULT '0' NOT NULL,
  browser varchar(8) DEFAULT 'OTHER' NOT NULL,
  ver float(10) DEFAULT '0.00' NOT NULL,
  platform varchar(8) DEFAULT 'OTHER' NOT NULL,
  time integer DEFAULT '0' NOT NULL,
  page text,
  type integer DEFAULT '0' NOT NULL
);
The group_id column can be used if you have multiple web sites you are trying to track. Just assign a different group_id to each site and pass it in the URL (shown below).
type is unused in these examples, but you can use it to track different types of actions, like ad clicks, clickins from other sites, etc.
browser, ver, platform are all obtained from the $HTTP_USER_AGENT variable which is passed by your browser to the web server. I have a browser detection library which we call to fill in this info. The code for that is available elsewhere in this article.
page is any arbitrary information that you want to log - I generally log $PHP_SELF.
[ Next Page ]


Comments:
RE: opentrackerMayukh04/30/05 05:46
RE: Some fixes to SourceForges browser.phpDavid Neff12/06/02 20:29
Cache Problem(On Indirect Ip's)Shrirang Kulkarni11/06/02 03:43
Some fixes to SourceForges browser.phpmorten hansen10/29/02 09:49
RE: Referrer checking?tony06/28/02 23:32
Use timestamp from random numnicole05/16/02 16:50
RE: Sample SQL to run reports sortingChris Peterson04/22/02 04:14
RE: Sample SQL to run reports sortingBrandon04/05/02 18:19
Sample SQL to run reports sortingLuis Oliveira03/25/02 04:48
Problem using 1x1 pixel GIF imageAnders Kronquist10/18/01 12:03
Referrer, uniques and standardsFrans03/08/01 19:46
Memory effective DatabaseKenneth02/08/01 12:21
RE: Apache log => mysqlMartin01/16/01 06:16
Java referrerdavid01/01/01 20:35
here's some code I use on a large systemStephen VanDyke12/28/00 14:45
RE: Referrer checking?david12/27/00 20:55
RE: A more optimized solutionRichard Bendelow12/22/00 08:41
RE: Badly normalized - Both?llong12/20/00 18:36
RE: opentrackerllong12/20/00 18:21
Error but no error echoed???Charles12/19/00 15:36
Apache log => mysqlJames12/19/00 10:05
RE: Badly normalizedJeppe Salvesen12/15/00 20:12
Simple way to convert Day integer back to datPatrick12/14/00 21:27
mod_log_mysql is the way to goNathan Cassano12/14/00 11:54
!the real solution: webalizer.com/sample !!!Igor12/13/00 13:40
RE: Badly normalizedBeth J.12/13/00 11:08
RE: Disabled imagesTim Perdue, PHPBuilder.com12/13/00 10:32
Disabled imagesJoe Clarke12/12/00 19:47
A more optimized solutionStallion12/12/00 14:57
RE: Real user trackingEd Rahn12/12/00 14:20
RE: Not the fastest solutionViking12/12/00 11:37
RE: Badly normalizedMartijn12/12/00 11:29
opentrackeredmz12/12/00 11:12
RE: Referrer checking?Martin Joergensen12/12/00 10:25
RE: Badly normalizedTim Perdue, PHPBuilder.com12/12/00 09:44
Another alternativeGeorge Schlossnagle12/12/00 08:58
RE: Referrer checking?Grant Petersen12/12/00 01:54
RE: Not the fastest solutionHendrik Mans12/11/00 20:13
Badly normalizedJeppe Salvesen12/11/00 19:04
HTML-based e-mailChris Thompson12/11/00 17:42
Not the fastest solutionViking12/11/00 16:08
RE: Real user trackingSean Clark12/11/00 14:07
RE: Real user trackingluke chasteen12/11/00 12:53
RE: Referrer checking?Pavel Prishivalko12/11/00 10:55
RE: Referrer checking?Micheal O Shea12/11/00 09:33
RE: Real user trackingTim Perdue, PHPBuilder.com12/11/00 09:30
RE: Referrer checking?John12/11/00 08:24
Real user trackingNightOwl12/11/00 07:38
cache problem if using host without PHPSaS12/11/00 07:08
RE: Referrer vs. Referer foophilip olson12/10/00 21:59
RE: Referrer checking?Tim Perdue, PHPBuilder.com12/10/00 21:30
Referrer checking?Hendrik Mans12/10/00 20:44
 

If you are looking for help, please post on the appropriate forum here. Your questions will be answered much more quickly.

Add A Comment:

Name:

Email:

Subject:

Message:

To reduce spam posts, messages are now manually approved

You are not [logged in]. That means your account will not get credit for this post.