On our web site, we "wrap" all of our pages in a PHP shell, which allows us to reference extra information easily within any of our pages, provide up to date course and hotel data on every page, and keep a dynamic log of current visitors in a database. The wrapper is applied through Apache http server (mod_rewrite), passing in the name of the page that's been called as a parameter to the wrapper script. Here are the "key" lines from various files:
From our web server configuration:
RewriteRule ^(.*)\.htm wrap.php?page=$1&%{QUERY_STRING}
From the wrapper URL page:
include ("$_SERVER[DOCUMENT_ROOT]/../afdr/wrapname.php");
And from the page that's included to run the real page:
$status = eval (" ?>$inclusion<?php ");
Once those preliminaries have been set up, we can start using our extra level of control - we open our database connection and log the access, for example:
$logit = "INSERT INTO recent (tstamp, remoteaddr,
calledfor, prevpage, serverhost, uagent) values (".
$nowsec . ", ".
"\"$rip\", ".
"\"$wanted\", ".
"\"$whence\", ".
"\"$server\", ".
"\"$ua\") ";
@mysql_query($logit);
and a further query on the same table causes each newly logged record to (additionally) delete any records over 15 minutes old.
What do we do with that extra data? We have a page which we describes as our "Traffic Watch" - see
[here] - which gives us a snapshot of how the server is running (when staff are logged in, they are give far more data!), for example. And we can (and do) also use the script to watch for high traffic levels from an individual IP address.
On yesterday's
PHP course, I wrote an example showing how PHP makes use of MySQL tables, using this data. See
[source] and
[run it]. This page lets me see which pages have been called up recently, with the most popular ones first - a very useful monitoring tool for administrators and for the SEO (Search Engine Optimisation) team.
Although I wrote the new example on the PHP programming course, the more advanced setup of the table - with mod_rewrite, etc, is beyond those few days, and it's something that we cover on our
PHP Techniques Workshop. Web server setup (if you're going to be an administrator) is covered on
Linux Web Server or if you need to learn a bit of Linux too, on
Deploying LAMP.
P.S. You'll see from the source code that I've eliminated certain URL patterns from the live demonstration. These days, I'm afraid, there are a number of automated scripts that attack web sites - either to spread viral infection, or to inject their content via security holes into your site. Such accesses just "bounce" off our server, but they are logged; I have eliminated them from the report in the sample program to starve them of the oxygen or publicity.
(written 2010-05-21)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
H305 - PHP - Web server configuration [1778] Pointing all the web pages in a directory at a database - (2008-08-30)
[1938] Predictive Load Balancing - PHP and / or Java - (2008-12-13)
[2478] How did I do THAT? - (2009-10-26)
[2774] PHP - Object Oriented Design in use - (2010-05-21)
[2981] How to set up short and meaningfull alternative URLs - (2010-10-02)
[3143] On time - (2011-01-23)
A607 - Web Application Deployment - Apache httpd mod_rewrite [631] Apache httpd to Tomcat - jk v proxy - (2006-03-03)
[755] Using different URLs to navigate around a single script - (2006-06-11)
[934] Clustering, load balancing, mod_rewrite and mod_proxy - (2006-11-21)
[1006] Apache httpd and Apache Tomcat together tips - (2006-12-24)
[1009] Passing GET parameters through Apache mod_rewrite - (2006-12-27)
[1207] Simple but effective use of mod_rewrite (Apache httpd) - (2007-05-27)
[1376] Choosing between mod_proxy and mod_rewrite - (2007-10-02)
[1381] Using a MySQL database to control mod_rewrite via PHP - (2007-10-06)
[1636] What to do if the Home Page is missing - (2008-05-08)
[1731] Apache httpd, MySQL, PHP - installation procedure - (2008-08-01)
[1771] More HowTo diagrams - MySQL, Tomcat and Java - (2008-08-24)
[1954] mod_rewrite for newcomers - (2008-12-20)
[2094] If you have a spelling mistake in your URL / page name - (2009-03-21)
[2555] Bookkeeping - (2009-12-29)
[2728] Redirecting a home page using mod_rewrite - (2010-04-17)
[2768] Carrying a long URL around - looking for memorable shorts - (2010-05-17)
[2900] Redirecting a page - silent, temporary or permanent? - (2010-08-03)
[3197] Finding and diverting image requests from rogue domains - (2011-03-08)
[3339] Simplest ever proxy configuration? - (2011-06-28)
[3568] Telling which ServerAlias your visitor used - useful during merging domains - (2012-01-04)
[3753] Adding a passcode to a directory - (2012-06-05)
[3862] Forwarding a whole domain, except for a few directories - Apache http server - (2012-09-17)
Some other Articles
Blowing our own trumpetRegional Spatial Strategy and the next 20 years - Whence Wiltshire under the new government?Declarations of interest - knowing where you stand with peopleDynamically watching your web site via a PHP wrapperGraham Ellis - Summary of Training RecordMelksham to Calne by public transportMelksham Chamber of Commerce - Presidents report to AGMEasy - but for whom?