Go Back   CodingForums.com > :: Server side development > PHP > Post a PHP snippet

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 12-16-2005, 07:29 PM   PM User | #1
Element
Regular Coder

 
Element's Avatar
 
Join Date: Jul 2004
Location: Lynnwood, Washington, US
Posts: 855
Thanks: 2
Thanked 2 Times in 2 Posts
Element is an unknown quantity at this point
FUNCTION: Hit/Log Tracker with Browser Lookup ( browser() )

I made this last night while I was stuck offline on PHPDev. It seems to work great and requires no installation unless your server configuration prevents file creation through fopen()

Feel free to add updates/upgrades as you see fit.

Using browser() by Geoffrey Sneddon with some help from Clayton Smith.

tracker.php - About 313 lines
PHP Code:
<?php 

// Hit/Log tracker with Browser Lookup support.
// Browser Lookup by Geoffrey Sneddon, with some help from Clayton Smith.
// Rest of the script by Jordan S. C. Thompson (Hendee).
// Released under the zlib/libpng license. 

// December 15, 2005

// This file's code should either be placed in the file you want it displayed or include it.
// If you include be sure to specify where the log files are in $dir.

// EXAMPLE OUTPUT

// Browser: Internet Explorer
// Browser Version: 6.0
// Operating System: Windows 98
// Internet Service Provider: Juno

// Site Hits: 65,485,455 

$dir "./";
$counterDB "hits.dat";
$logDB "log.dat";
$currentPage "http://" $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

function 
browser($ua

    if (
preg_match('/bot/i'$ua) || preg_match('/crawl/i'$ua) || preg_match('/yahoo\!/i'$ua)) 
    { 
        
$return['name'] = 'Bot'
        
$return['version'] = 'Unknown'
    } 
    elseif (
preg_match('/opera/i'$ua)) 
    { 
        
preg_match('/Opera(\/| )([0-9\.]+)(u)?(\d+)?/i'$ua$b); 
        
$return['name'] = 'Opera'
        unset(
$b[0], $b[1]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/msie/i'$ua)) 
    { 
        
preg_match('/MSIE ([0-9\.]+)(b)?/i'$ua$b); 
        
$return['name'] = 'Internet Explorer'
        unset(
$b[0]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/omniweb/i'$ua)) 
    { 
        
preg_match('/OmniWeb\/([0-9\.]+)/i'$ua$b); 
        
$return['name'] = 'OmniWeb'
        if (isset(
$b[1])) 
            
$return['version'] = $b[1]; 
        else 
            
$return['version'] = 'Unknown'
    } 
    elseif (
preg_match('/icab/i'$ua)) 
    { 
        
preg_match('/iCab\/([0-9\.]+)/i'$ua$b); 
        
$return['name'] = 'iCab'
        
$return['version'] = $b[1]; 
    } 
    elseif (
preg_match('/safari/i'$ua)) 
    { 
        
preg_match('/Safari\/([0-9\.]+)/i'$ua$b); 
        
$return['name'] = 'Safari'
        
$return['version'] = $b[1]; 
        switch (
$return['version']) 
        { 
            case 
'412'
            case 
'412.2'
            case 
'412.2.2'
                
$return['version'] = '2.0'
            break; 
            case 
'412.5'
            
$return['version'] = '2.0.1'
            break; 
            case 
'416.12'
            case 
'416.13'
                
$return['version'] = '2.0.2'
            break; 
            case 
'100'
                
$return['version'] = '1.1'
            break; 
            case 
'100.1'
                
$return['version'] = '1.1.1'
            break; 
            case 
'125.7'
            case 
'125.8'
                
$return['version'] = '1.2.2'
            break; 
            case 
'125.9'
                
$return['version'] = '1.2.3'
            break; 
            case 
'125.11'
            case 
'125.12'
                
$return['version'] = '1.2.4'
            break; 
            case 
'312'
                
$return['version'] = '1.3'
            break; 
            case 
'312.3'
            case 
'312.3.1'
                
$return['version'] = '1.3.1'
            break; 
            case 
'85.5'
                
$return['version'] = '1.0'
            break; 
            case 
'85.7'
                
$return['version'] = '1.0.2'
            break; 
            case 
'85.8'
            case 
'85.8.1'
                
$return['version'] = '1.0.3'
            break; 
        } 
    } 
    elseif (
preg_match('/konqueror/i'$ua)) 
    { 
        
preg_match('/Konqueror\/([0-9\.]+)(\-rc)?(\d+)?/i'$ua$b); 
        
$return['name'] = 'Konqueror'
        unset(
$b[0]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/Flock/i'$ua)) 
    { 
        
preg_match('/Flock\/([0-9\.]+)(\+)?/i'$ua$b); 
        
$return['name'] = 'Flock'
        unset(
$b[0]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/firebird/i'$ua)) 
    { 
        
preg_match('/Firebird\/([0-9\.]+)(\+)?/i'$ua$b); 
        
$return['name'] = 'Firebird'
        unset(
$b[0]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/phoenix/i'$ua)) 
    { 
        
preg_match('/Phoenix\/([0-9\.]+)(\+)?/i'$ua$b); 
        
$return['name'] = 'Phoenix'
        unset(
$b[0]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/firefox/i'$ua)) 
    { 
        
preg_match('/Firefox\/([0-9\.]+)(\+)?/i'$ua$b); 
        
$return['name'] = 'Firefox'
        unset(
$b[0]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/chimera/i'$ua)) 
    { 
        
preg_match('/Chimera\/([0-9\.]+)(a|b)?(\d+)?(\+)?/i'$ua$b); 
        
$return['name'] = 'Chimera'
        unset(
$b[0]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/camino/i'$ua)) 
    { 
        
preg_match('/Camino\/([0-9\.]+)(a|b)?(\d+)?(\+)?/i'$ua$b); 
        
$return['name'] = 'Camino'
        unset(
$b[0]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/seamonkey/i'$ua)) 
    { 
        
preg_match('/SeaMonkey\/([0-9\.]+)(a|b)?/i'$ua$b); 
        
$return['name'] = 'SeaMonkey'
        unset(
$b[0]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/galeon/i'$ua)) 
    { 
        
preg_match('/Galeon\/([0-9\.]+)/i'$ua$b); 
        
$return['name'] = 'Galeon'
        
$return['version'] = $b[1]; 
    } 
    elseif (
preg_match('/epiphany/i'$ua)) 
    { 
        
preg_match('/Epiphany\/([0-9\.]+)/i'$ua$b); 
        
$return['name'] = 'Epiphany'
        
$return['version'] = $b[1]; 
    } 
    elseif (
preg_match('/mozilla\/5/i'$ua) || preg_match('/gecko/i'$ua)) 
    { 
        
preg_match('/rv(:| )([0-9\.]+)(a|b)?/i'$ua$b); 
        
$return['name'] = 'Mozilla'
        unset(
$b[0], $b[1]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/mozilla\/4/i'$ua)) 
    { 
        
preg_match('/Mozilla\/([0-9\.]+)/i'$ua$b); 
        
$return['name'] = 'Netscape'
        
$return['version'] = $b[1]; 
    } 
    elseif (
preg_match('/lynx/i'$ua)) 
    { 
        
preg_match('/Lynx\/([0-9\.]+)/i'$ua$b); 
        
$return['name'] = 'Lynx'
        
$return['version'] = $b[1]; 
    } 
    elseif (
preg_match('/links/i'$ua)) 
    { 
        
preg_match('/Links \(([0-9\.]+)(pre)?(\d+)?/i'$ua$b); 
        
$return['name'] = 'Links'
        unset(
$b[0]); 
        
$return['version'] = implode(''$b); 
    } 
    elseif (
preg_match('/curl/i'$ua)) 
    { 
        
preg_match('/curl\/([0-9\.]+)/i'$ua$b); 
        
$return['name'] = 'cURL'
        
$return['version'] = $b[1]; 
    } 
    elseif (
preg_match('/wget/i'$ua)) 
    { 
        
preg_match('/Wget\/([0-9\.]+)/i'$ua$b); 
        
$return['name'] = 'Wget'
        
$return['version'] = $b[1]; 
    } 
    else 
    { 
        
$return['name'] = 'Unknown'
        
$return['version'] = 'Unknown'
    } 
    return 
$return


$browser browser($_SERVER['HTTP_USER_AGENT']);
        if (isset(
$browser)) 
        {
                    if (!(
file_exists($dir.$counterDB)))
                    { 
                                    if (!(
$handle fopen($dir.$counterDB"a+")))
                                    {
                                                die(
"<p>Failed to create \"".$counterDB."\" in \"".$dir."\"</p>");
                                    }
                            
fputs($handle "1"); 
                          
fclose($handle);
                          echo 
'<p>';
                          echo 
'<b>Browser:</b> '.$browser['name'].'<br />';
                          echo 
'<b>Browser Version:</b> '.$browser['version'].'<br />';
                          
$user_parts explode(";"$_SERVER['HTTP_USER_AGENT']);
                          echo 
'<b>Operating System:</b> '.$user_parts[2].'<br />';
                          echo 
'<b>Internet Service Provider:</b> '.str_replace(")"""ucwords(strtolower($user_parts[3]))).'<br />';
                          echo 
'</p>';
                          echo 
'<b>Site Hits:</b> 1';
                            if (!(
file_exists($logDB)))
                            {
                                                 if (!(
$handle fopen($dir.$logDB"a+")))
                                                 {
                                                             die(
"<p>Failed to create \"".$logDB."\" in \"".$dir."\"</p>");
                                                 }
                                         
$host gethostbyaddr($_SERVER['REMOTE_ADDR']);
                                        
fputs($handle$host."|".$browser['name']."|".$browser['version']."|".$currentPage."\n");
                                        
fclose($handle);
                            }
                          else
                          {
                                           if (!(
$handle fopen($dir.$logDB"a")))
                                           {
                                                       die(
"<p>Failed to open \"".$logDB."\" in \"".$dir."\"</p>");
                                           }    
                                   
$host gethostbyaddr($_SERVER['REMOTE_ADDR']);
                                   
fputs($handle$host."|".$browser['name']."|".$browser['version']."|".$currentPage."\n");
                                   
fclose($handle);
                          }                                   
                    }
                    else
                    {
                          
$hits file($dir.$counterDB); 
                          
$current $hits[0]+1
                                  if (!(
$handle fopen($dir.$counterDB "w")))
                                  {
                                              die(
"<p>Failed to open \"".$counterDB."\" in \"".$dir."\"</p>");
                                  }
                          
fputs($handle $current); 
                          
fclose($handle); 
                          echo 
'<p>';
                          echo 
'<b>Browser:</b> '.$browser['name'].'<br />';
                          echo 
'<b>Browser Version:</b> '.$browser['version'].'<br />';
                          
$user_parts explode(";"$_SERVER['HTTP_USER_AGENT']);
                          echo 
'<b>Operating System:</b> '.$user_parts[2].'<br />';
                          echo 
'<b>Internet Service Provider:</b> '.str_replace(")"""ucwords(strtolower($user_parts[3]))).'<br />';
                          echo 
'</p>';
                          echo 
'<b>Site Hits:</b> '.number_format($current);
                            if (!(
file_exists($logDB)))
                            {
                                                 if (!(
$handle fopen($dir.$logDB"a+")))
                                                 {
                                                             die(
"<p>Failed to create \"".$logDB."\" in \"".$dir."\"</p>");
                                                 }
                                         
$host gethostbyaddr($_SERVER['REMOTE_ADDR']);
                                        
fputs($handle$host."|".$browser['name']."|".$browser['version']."|".$currentPage."\n");
                                        
fclose($handle);
                            }
                          else
                          {
                                          if (!(
$handle fopen($dir.$logDB"a")))
                                          {
                                                      die(
"<p>Failed to open \"".$logDB."\" in \"".$dir."\"</p>");
                                          }
                                   
$host gethostbyaddr($_SERVER['REMOTE_ADDR']);
                                   
fputs($handle$host."|".$browser['name']."|".$browser['version']."|".$currentPage."\n");
                                   
fclose($handle);
                          }
                  } 
      }
      
?>
Edit: Boy do I wish the PHP parser would keep the exact tab and space definitions that are in the original file. Oh well, it looks alot prettier in UltraEdit.

Last edited by Element; 12-16-2005 at 07:35 PM..
Element is offline   Reply With Quote
Reply

Bookmarks

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 10:38 AM.


Advertisement
Log in to turn off these ads.