I have created log.php to get visitors information. It is included on index.php. But it is adding records to database without single visit to index.php.

After few seconds it adds records continuously.

Help me please.

index.php

<?php include_once('log.php');?>

log.php

<?php

    $page_name = $_SERVER['PHP_SELF']; // PAGE NAME 
    $parse_page_name = basename ($page_name); // PARSE THE EXACT PAGE NAME

    // Get the URL
    $host = $_SERVER['SERVER_NAME'];

    // Get the IP Address
    $ipAddress =$_SERVER['REMOTE_ADDR'];

    //format the URL
    //$visitURL = $url.$scriptName;

    $today = date("j, F, Y");  
    $tmzone=date_default_timezone_get();
    $now=strftime("%I:%M:%S");
    $stz=gmstrftime("%Z");
    $visitortimezone=("$tmzone, ($stz)");


    function getBrowser() 
    { 
        $u_agent = $_SERVER['HTTP_USER_AGENT']; 
        $bname = 'Unknown';
        $platform = 'Unknown';
        $version= "";

        //First get the platform?
        if (preg_match('/linux/i', $u_agent)) {
            $platform = 'linux';
        }
        elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
            $platform = 'mac';
        }
        elseif (preg_match('/windows|win32/i', $u_agent)) {
            $platform = 'windows';
        }

        // Next get the name of the useragent yes seperately and for good reason
        if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) 
        { 
            $bname = 'Internet Explorer'; 
            $ub = "MSIE"; 
        } 
        elseif(preg_match('/Firefox/i',$u_agent)) 
        { 
            $bname = 'Mozilla Firefox'; 
            $ub = "Firefox"; 
        } 
        elseif(preg_match('/Chrome/i',$u_agent)) 
        { 
            $bname = 'Google Chrome'; 
            $ub = "Chrome"; 
        } 
        elseif(preg_match('/Safari/i',$u_agent)) 
        { 
            $bname = 'Apple Safari'; 
            $ub = "Safari"; 
        } 
        elseif(preg_match('/Opera/i',$u_agent)) 
        { 
            $bname = 'Opera'; 
            $ub = "Opera"; 
        } 
        elseif(preg_match('/Netscape/i',$u_agent)) 
        { 
            $bname = 'Netscape'; 
            $ub = "Netscape"; 
        } 


        // finally get the correct version number
        $known = array('Version', $ub, 'other');
        $pattern = '#(?<browser>' . join('|', $known) .
        ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
        if (!preg_match_all($pattern, $u_agent, $matches)) {
            // we have no matching number just continue
        }

        // see how many we have
        $i = count($matches['browser']);
        if ($i != 1) {
            //we will have two since we are not using 'other' argument yet
            //see if version is before or after the name
            if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
                $version= $matches['version'][0];
            }
            else {
                $version= $matches['version'][1];
            }
        }
        else {
            $version= $matches['version'][0];
        }

        // check if we have a number
        if ($version==null || $version=="") {$version="?";}

        return array(
            'userAgent' => $u_agent,
            'name'      => $bname,
            'version'   => $version,
            'platform'  => $platform,
            'pattern'    => $pattern
        );
    }

    $ua=getBrowser();
    $browser="$ua[name] $ua[version]";
    $os="$ua[platform]";

    $referer = $_SERVER['HTTP_REFERER'];

    $sql="INSERT INTO visitslog (host,pageurl,VisitPage,VisitorIP,VisitDate,VisitorTimeZone,VisitTime,browser,operatingsystem,referer)       VALUES('$host','$page_name','$parse_page_name','$ipAddress','$today','$visitortimezone','$now','$browser','$os','$referer')";
    $result=mysql_query($sql);


?>

Recommended Answers

All 8 Replies

Member Avatar for diafol

I can't see any loops there. Is the data logged all the same? All from the same IP address? Do you have redirects?

Yes there are no loops, no redirects thats why I'm confused.

simply log.php file is included on index.php

After few seconds new records are inserted, currently all records are from, localhost 127.0.0.1

I found new problem its 11:06pm here and it inserted VisitTime:- 06:36:19
and
VisitorTimeZone:- Europe/Berlin, (India Standard Time) for localhost

Other logs are correct but its multiple

Member Avatar for diafol

Place a counter in a session:

session_start();
$_SESSION['counter'] = !isset($_SESSION['counter']) ? 1 : $_SESSION['counter']++;

Add a field for now called counter, and when you do your INSERT, add the value of the variable above.

Just need to see if it's the same event inserted many times, or if it's multiple page impressions. I can't see that it's the latter though.

Alternatively, get microtime() and place that into a field.

I can't see the conenction details, so I'm assuming there's a lot more to these pages than you've shown - possibly the issue is there.

My log.php contains above code only. And index.php contains database connection and include of log.php

Anyway with the help of your code I managed to get one record problem is solved now.

Now I need to create chart for above log

Database fields are,

  • host
  • pageurl
  • VisitPage
  • VisitorIP
  • VisitDate
  • VisitorTimeZone
  • VisitTime
  • browser
  • operatingsystem
  • referer

I need chart for Toatl Visits, Uniquie Visits, Impressions, Online Users, Pageviews,
%New Visits, % Uniquie Visits, %New Visitor, %Returning Visitor

There is problem with VisitTime and VisitorTimeZone it is not showing accurate values

Please help

@diafol

sorry, forgot to say thanks!

Member Avatar for diafol

Ok, mark question solved and start a new thread for this new question.

ok

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.