andy's php projects
Script and site usage:
All of the scripts on this site are provided free for non-commercial, personal or non-profit use. If you wish to use any of these in a commercial system, please refer to the payment plan.

Support:
Support for each of the scripts is given, free of charge, on the message board. Each script has its own message board which can be accessed by clicking on the 'project forum' link (beneath the description of each project).


Proudly hosted with Dreamhost

Save $20 when signing up for Dreamhost by using the promo code amnuts20


If you find these scripts useful to you, appreciate the free support, or are just an all round nice person, then why not donate a little dosh to encourage me to continue? Every little helps!

Zend Certified Engineer logo


Web Page Update Check

This class allows you to check to see if a particular website has been updated recently. It doesn't show what the changes were, just the fact that it's been altered in some way since you last checked the site.

class.wwwcheckup.php

<?php

//
// class.wwwcheckup.php
// version 1.1.0 - 22nd August, 2003
//
// Description
//
// This class allows you to keep track of when websites were last updated.
// This will not tell you what the changes are, but just let you know that
// it has been changed in some way.
//
// Author
//
// Andrew Collington, 2003
// php@amnuts.com, http://php.amnuts.com/
//
// Feedback
//
// http://php.amnuts.com/forums/index.php
// There is message board at the above URL where you can post
// feedback, bug reports, feature requests, etc., for this and
// any of the other scripts located at php.amnuts.com.
//
// DB Schema
//
// Website addresses are stored in a database with the schema:
//
//        CREATE TABLE website (
//           id int(11) DEFAULT '0' NOT NULL auto_increment,
//           website varchar(255) NOT NULL,
//           hash varchar(255) NOT NULL,
//           lastchecked datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
//           lastupdated datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
//           PRIMARY KEY (id)
//        );
//
// This script would be most efficiently used in conjunction with a cron job
// to automatically check the status of the pages, so that all you have to
// do is show the results.
//

class WebsiteCheckup
{
    var 
$user;
    var 
$pass;
    var 
$host;
    var 
$id;
    var 
$db;
    var 
$tbl;
    var 
$autoupdate;
    var 
$results;
    
    function 
WebsiteCheckup($user='username'$pass='password'$table='websites'$database='demo'$host='localhost')
    {
        
$this->user $user;
        
$this->pass $pass;
        
$this->host $host;
        
$this->db   $database;
        
$this->tbl  $table;
        
$this->id   NULL;
        
$this->autoupdate TRUE;
        
        
$this->id = @mysql_connect($this->host$this->user$this->pass) or 
            die(
"Unable to connect to mysql server: {$this->host}");
        @
mysql_select_db($this->db$this->id) or
            die(
"Unable to select database: {$this->db}");
    }
    
    function 
SetAutoUpdate($status TRUE)
    {
        
$this->autoupdate = ($status === TRUE TRUE FALSE);
    }

    
//
    // Database interaction routines
    //

    
function CheckAll()
    {
        
$sql "SELECT id,website,hash,UNIX_TIMESTAMP(lastchecked) AS lastchecked,UNIX_TIMESTAMP(lastupdated) AS lastupdated FROM {$this->tbl}";
        
$result = @mysql_query($sql$this->id) or die("Unable to perform query: $sql");
        while (
$row = @mysql_fetch_array($resultMYSQL_ASSOC))
        {
            
$site = array();
            
set_time_limit(120);
            
$site = @file($row['website']);
            if (empty(
$site))
            {
                echo 
"<p>The website {$row['website']} could not be fetched.</p>\n";
            }
            else
            {
                
$hash md5(strip_tags(join(''$site)));
                if (
$this->autoupdate)
                {
                    if (
$hash != $row['hash'])
                    {
                        
$this->results[] = $row;
                        
$sql "UPDATE {$this->tbl} SET lastchecked=NOW(),lastupdated=NOW(),hash='{$hash}' WHERE id={$row['id']}";
                    }
                    else
                    {
                        
$sql "UPDATE {$this->tbl} SET lastchecked=NOW() WHERE id={$row['id']}";
                    }
                    @
mysql_query($sql$this->id) or die("Unable to perform query: $sql");
                }
                else
                {
                    if (
$hash != $row['hash'])
                    {
                        
$this->results[] = $row;
                    }
                }
            }
        }
        @
mysql_free_result($result);
    }
    
    function 
GetAll(&$arr)
    {
        
$sql "SELECT id,website,hash,UNIX_TIMESTAMP(lastchecked) AS lastchecked,UNIX_TIMESTAMP(lastupdated) AS lastupdated FROM {$this->tbl} ORDER BY website";
        
$result = @mysql_query($sql$this->id) or die("Unable to perform query: $sql");
        while (
$row = @mysql_fetch_array($resultMYSQL_ASSOC))
        {
            
$arr[] = $row;
        }
        @
mysql_free_result($result);
    }
    
    function 
AddWebsite($website '')
    {
        if (
$website == '')
        {
            return;
        }
        
        if (!
preg_match('/^http:\/\//i'$website))
        {
            
$website "http://{$website}";
        }

        
$site = array();
        
set_time_limit(120);
        
$site = @file($website);
        if (empty(
$site))
        {
            return 
FALSE;
        }
        else
        {
            
$hash md5(strip_tags(join(""$site)));
            
$sql "INSERT INTO {$this->tbl} (website,hash,lastupdated,lastchecked) VALUES('{$website}','{$hash}',NOW(),NOW())";
            if (!@
mysql_query($sql,$this->id))
            {
                die(
"Unable to perform query: $sql");
            }
        }
        return 
TRUE;
    }
    
    function 
RemoveWebsite($website '')
    {
        if (
$website == '')
        {
            return 
FALSE;
        }

        if (!
preg_match("/^http:\/\//i"$website))
        {
            
$website "http://{$website}";
        }

        if (@
mysql_query("DELETE FROM {$this->tbl} WHERE website='{$website}'"$this->id))
        {
            return 
TRUE;
        }
        else
        {
            die(
"Unable to perform query: $sql");
        }
    }
    
    
//
    // Display Routines
    //
    
    
function DisplayUpdates()
    {
        
$this->CheckAll();
        
$this->DisplayTable($this->results);
    }

    function 
DisplayAll()
    {
        
$this->GetAll($foo);
        
$this->DisplayTable($foo1);
    }

    function 
DisplayTable($array$colour 0)
    {
        if (empty(
$array))
        {
            echo 
"<p>There are no websites or results available.</p>\n";
        }
        else
        {
            echo 
'<table border="1" cellpadding="3" cellspacing="0">'"\n";
            echo 
'<tr><td>website</td><td>last checked</td><td>last updated</td></tr>'"\n";
            for (
$r=0$r<count($array); $r++)
            {
                if (
$colour && ($array[$r]['lastchecked'] == $array[$r]['lastupdated']))
                {
                    
$bg " bgcolor=\"#CCCCCC\"";
                }
                else
                {
                    
$bg " bgcolor=\"#FFFFFF\"";
                }
                echo 
"<tr><td{$bg}><a href=\"{$array[$r]['website']}\" target=\"_blank\">{$array[$r]['website']}</a></td>";
                echo 
"<td{$bg}>"$this->FuzzyTime($array[$r]['lastchecked']), '</td>';
                echo 
"<td{$bg}>"$this->FuzzyTime($array[$r]['lastupdated']), "</td></tr>\n";
            }
            echo 
"</table>\n";
        }
    }

    function 
FuzzyTime($time)
    {
        
// sod = start of day :)
        
$sod mktime(000date('m',$time), date('d'$time), date('Y'$time));
        
$sod_now mktime(000date('m'), date('d'), date('Y'));
        
        if (
$sod_now == $sod) return "today at " date("g:ia"$time); // check 'today'
        
if (($sod_now-$sod) <= 86400) return "yesterday at " date("g:ia"$time); // check 'yesterday'
        
if (($sod_now-$sod) <= 432000) return date("l \a\\t g:ia"$time); // give a day name if within the last 5 days
        
if (date("Y",$now) == date("Y"$time)) return date("M j \a\\t g:ia"$time); // miss off the year if it's this year
        
return date("M j, Y \a\\t g:ia"$time); // return the date as normal
    
}
    
}

?>
6.01kb in size
last modified May 6, 2006 at 9:55pm
10096 views, 9374 downloads

schema.wwwcheckup.sql

439b in size
last modified May 6, 2006 at 9:55pm
7703 downloads

test.wwwcheckup.php

1.67kb in size
last modified May 6, 2006 at 9:55pm
7901 views, 7703 downloads
list all projects :: this project's forum :: script in action
added Sep 19, 2002 at 3:05pm :: updated Aug 22, 2003 at 5:07pm :: 3 files :: 50716 views

© Andrew Collington, 2002-2007.