connect(); // when no get specified, display a marketing page :) if(sizeof($_GET) === 0) { require_once INCLUDE_PATH."/core/include/Lang.class.php"; $l =& Lang::getInstance();; displayPageWhenEmptyGet(); exit; } if(DEBUG) { require_once INCLUDE_PATH."/core/include/functions.php"; } if(DEBUG) ob_start(); // - imprimer doc mysql "optimisation" /* * Get page & visitor information */ $idSite = getRequestVar('id', null, 'numeric'); $GLOBALS['cookie'] = new Cookie( COOKIE_PMVLOG_NAME . $idSite); if(LOOK_FOR_COOKIE && $GLOBALS['cookie']->isDefined()) { printDebug("Cookie at the beginning (size : ".$GLOBALS['cookie']->getSize()." bytes) :
"); printDebug($GLOBALS['cookie']->get()); $returningVisitor = 1; } else { $returningVisitor = 0; printDebug("Cookie not found !

"); } $flash = getRequestVar('flash', 0, 'numeric'); $director = getRequestVar('director', 0, 'numeric'); $quicktime = getRequestVar('quicktime', 0, 'numeric'); $realPlayer = getRequestVar('realplayer', 0, 'numeric'); $windowsMedia = getRequestVar('windowsmedia', 0, 'numeric'); $cookieAccept = getRequestVar('cookie', 0, 'numeric'); // Don't name $cookie because conflict with $GLOBALS['cookie'] $pdf = getRequestVar('pdf', 0, 'numeric'); $java = getRequestVar('java', -1, 'numeric'); if ($java == -1) { $javascript = 0; $java = 0; } else { $javascript = 1; } $refererUrl = getRequestVar('ref', ''); $typeTag = getRequestVar('type', "", 'string'); $site = new Site($idSite); // debug cookie if(PRINT_ALL_COOKIES_CONTENT) { require_once INCLUDE_PATH . "/core/include/DataModel.class.php"; $sitesId = $site->getSitesId(); foreach($sitesId as $sid) { $c = new Cookie( COOKIE_PMVLOG_NAME . $sid); print($c->toString()); } exit; } else if(PRINT_COOKIE_CONTENT) { print($GLOBALS['cookie']->toString()); exit; } /* * site urls */ // commented in 2.3b3 because its actually not used //if(!$siteUrls = $GLOBALS['cookie']->getVar('site_urls')) //{ // $siteUrlsBefore = $site->getUrls(); // $siteUrls = array(); // if(is_array($siteUrlsBefore)) // { // foreach($siteUrlsBefore as $url) // { // $url = trim($url); // if( array_search( $url, $siteUrls) === false // && !empty($url) ) // { // $siteUrls[] = $url; // } // } // } // // save array of site urls in the cookie // $GLOBALS['cookie']->setVar('site_urls', $siteUrls); //} /* * site info */ //if(!$siteInfo = $GLOBALS['cookie']->getVar('site_info')) //{ // $siteInfo = $site->getInfo(); // // // save array of site urls in the cookie // $GLOBALS['cookie']->setVar('site_info', $siteInfo); //} $logo = $site->getLogo(); $siteParams = $site->getParams(); $pageUrl = getRequestVar('url', '', 'string'); if ($pageUrl == "") { // May be it is a bot !! printDebug("No url : may be it's a bot ! So we don't save this visit !"); redirectToUrlIfNecessary(); loadImage($logo, $idSite); exit(); } // After modif js where we remove all before // in url // We add http: to not have error in parse_url if (substr($pageUrl, 0, 2) == "//") { $pageUrl = "http:".$pageUrl; } /* // Verify that url is in your site $trouve = false; foreach($siteUrls as $url) { $posInUrl = strpos($pageUrl, $url); $trouve = ($posInUrl == 0); } if (! $trouve) { printDebug("Url is not ok !"); redirectToUrlIfNecessary(); loadImage($logo, $idSite); exit(); } */ /** * exit if visitor is cookie excluded from the stats */ if(isset($_COOKIE[COOKIE_NAME_NO_STAT.$site->getId()])) { printDebug("Excluded from stats with the cookie!"); redirectToUrlIfNecessary(); loadImage($logo, $idSite); } /* * page variables */ $a_vars = getRequestVar('a_vars', array(), 'array'); /* * visitor config, as saved in the database */ $userAgent = secureVar(@$_SERVER['HTTP_USER_AGENT']); $os = getOs($userAgent); $a_browser = getBrowserInfo($userAgent); $resolution = getRequestVar('res', 'unknown', 'string'); $colorDepth = getRequestVar('col', 32, 'numeric'); $browserLang = secureVar(@$_SERVER['HTTP_ACCEPT_LANGUAGE']); $localTime = getRequestVar('h',date("H"),'numeric').':'. getRequestVar('m',date("i"),'numeric').':'.getRequestVar('s',date("s"),'numeric'); // assign pageCategory default value of the parse_url::path?query $pageUrlParamsProcessed = processParams($pageUrl, $siteParams); // fix add site.com because else parse_url bugs with ':' in query string if(!ereg('^http://',$pageUrlParamsProcessed)) { $urlParse = parse_url('http://site.com'.$pageUrlParamsProcessed); } else { $urlParse = parse_url($pageUrlParamsProcessed); } if(isset($urlParse['path'])) { $pageNameDefault = substr($urlParse['path'], 1); } if(isset($urlParse['query'])) { $pageNameDefault .= '?'.$urlParse['query']; } if( (!isset($pageNameDefault) || strcmp($pageNameDefault, '')===0) && isset($urlParse['host']) ) { $pageNameDefault = DEFAULT_PAGE_NAME; } else if(!isset($pageNameDefault)) { $pageNameDefault = null; } printDebug("PageNameDefault : " . $pageNameDefault); // stripslashed because otherwise pageName if value is pageNameDefault is slashed twice $pageCompleteName = utf8_encode(getRequestVar('pagename' , stripslashes(html_entity_decode($pageNameDefault)) ) ); $pageCompleteName = str_replace(array("\n", "\r"), '', $pageCompleteName); $pageCompleteName = str_replace(array("?"), '', $pageCompleteName); if ($typeTag != "") { $pageCompleteName = $typeTag.":".$pageCompleteName; } // works only on 'path' of this url because the query may contain delimiter ! $file = ''; //if(substr($pageCompleteName, 0, 5) === PREFIX_FILES) if(isPrefixTag ($pageCompleteName)) { // $file = PREFIX_FILES; $file = getPrefixTag($pageCompleteName); } printDebug("
Page complete name:".$pageCompleteName); $urlParse = parse_url('http://site.com/'.$pageCompleteName); $pageCompleteNamePath = substr($urlParse['path'],1); $lastDelimiter = strrpos($pageCompleteNamePath, CATEGORY_DELIMITER); printDebug("
Page name complete path:".$pageCompleteNamePath); printDebug("
Pos last delimiter : $lastDelimiter"); if($lastDelimiter !== false) { // in the $pageCompleteName "g1>g2>page" select only "g1>g2" $pageCategory = substr($pageCompleteNamePath, 0, $lastDelimiter); // $pageCategory = str_replace( PREFIX_FILES, '', $pageCategory); $tabTag = split(",", PREFIX_ALL_TAG); foreach ($tabTag as $info) { $pageCategory = str_replace($info, '', $pageCategory); } if($pageCategory == '/' || $pageCategory == ' ' || $pageCategory == '+' || $pageCategory == '-' || $pageCategory == '"' || $pageCategory == '\'' ) { $pageCategory = ''; } // in the $pageCompleteName "g1>g2>page" select only "page" // if pageCompleteNamePath bug when all variables recorded, no pagename, only save index.php $pageName = $file . substr($pageCompleteName, $lastDelimiter + 1); } else { $pageCategory = ''; $pageName = $pageCompleteName; } //var_dump($pageCategory);exit; // concerning names of pages in subgroups like /g1/g2/g3/ without page names if(strcmp($pageName, '')===0) { $pageName = DEFAULT_PAGE_NAME; } printDebug('
URL : '.$pageUrl); printDebug('
typeTag : '.$typeTag); printDebug('
pageName : '.$pageName); printDebug('
pageCategory : '.$pageCategory); printDebug('
a_vars : '); printDebug($a_vars); printDebug('
referer : '); printDebug($refererUrl); printDebug('
flash : '.$flash); printDebug('
director : '.$director); printDebug('
quicktime : '.$quicktime); printDebug('
real player : '.$realPlayer); printDebug('
windows media : '.$windowsMedia); printDebug('
cookie : '.$cookieAccept); printDebug('
PDF : '.$pdf); printDebug('
java : '.$java); printDebug('
javascript : '.$javascript); printDebug('
referer Url : '.$refererUrl); printDebug('
id site : '.$idSite); //printDebug('
site Urls : '); printDebug($siteUrls); //printDebug('
site Info : '); printDebug($siteInfo); printDebug('
user Agent : '.$userAgent); printDebug('
os : '.$os); printDebug('
browser : '.$a_browser['longName']); printDebug('
resolution : '.$resolution); printDebug('
color : '.$colorDepth); /** * other information */ $todayDate = date("Y-m-d"); /** * try to recognize the visitor, with or without cookie * who said we are very strong ? */ // last_visit = last visit timestamp // idcookie = id cookie printDebug("
Try to recognize the visitor...
"); function saveCountInFile( $fileName ) { $count = 0; $fileName = './count/'.$fileName; if(is_file($fileName)) { include($fileName); if(isset($count) && is_integer($count) && $count != 0) { saveConfigFile( $fileName, $count+1, "count"); } } } if(TRACE_IN_FILES) saveCountInFile( 'p_total' ); $timeDiffRef = DEFAULT_TIME_PAGE; // does phpmyvisites cookie exist ? if($GLOBALS['cookie']->isDefined()) { // yes, known visitor $idVisit = $GLOBALS['cookie']->getVar('idvisit'); $idCookie = $GLOBALS['cookie']->getVar('idcookie'); $lastVisit = $GLOBALS['cookie']->getVar('last_visit_time'); $serverTime = $GLOBALS['cookie']->getVar('server_time'); $serverDate = $GLOBALS['cookie']->getVar('server_date'); $idPageRef = $GLOBALS['cookie']->getVar('idpage_ref'); if(TRACE_IN_FILES) saveCountInFile( 'p_cookie' ); if(DEBUG) printDebug("
We know the visitor (thanks to his cookie).
He has idvisit = $idVisit and went last time on ".getTimeForDisplay($lastVisit)."
"); } else { printDebug("=>We can't find the cookie...
"); if(TRACE_IN_FILES) saveCountInFile( 'p_non_cookie' ); // compute IP $ip = getIp(); $ip2long = ip2long($ip); exitIfIpExcluded($ip2long, $logo, $site); $serverDate = $todayDate; $tryPutCookie = true; //edit 2.2RC3 now we check all the time, because if someone refresh the home page 100 times // and didn't accept cookies, it was counted 100 visitors!! /* if($site->isUrlIn($refererUrl)) { printDebug("=> Referer Is in the site ! try to catch the visitor...
"); if(TRACE_IN_FILES) saveCountInFile( 'p_ref_url_in' ); } */ $md5Config = md5( $os . serialize($a_browser) . $resolution . $colorDepth . $pdf . $flash . $java . $javascript . $director . $quicktime . $realPlayer . $windowsMedia . $cookieAccept . $ip2long . $browserLang); // does the config (os+browser+resolution+color_depth) and the IP match any visitor ? $r = query("SELECT idvisit, idcookie, TIME_TO_SEC(last_visit_time), TIME_TO_SEC(server_time), exit_idpage FROM ".T_VISIT." WHERE server_date = '$todayDate' AND idsite = '$idSite' AND md5config = '$md5Config' ORDER BY last_visit_time DESC LIMIT 1"); if(mysql_num_rows($r)>0) { // yes $r = mysql_fetch_row($r); $idVisit = $r[0]; $idCookie = $r[1]; $lastVisit = $r[2]; $serverTime = $r[3]; $idPageRef = $r[4]; if(TRACE_IN_FILES) saveCountInFile( 'p_ref_url_in_found' ); printDebug("=> We found the MD5CONFIG of visitor so he is known
"); } // case we didn't match any visitor if(!isset($idVisit)) { // no, new visitor $newVisitor = true; if(TRACE_IN_FILES) saveCountInFile( 'p_ref_not_found' ); printDebug("=> It's definitely a new visitor
"); } } if(isset($lastVisit) && $lastVisit !== false && $lastVisit < todayTime() // case the lastVisit value has been spoiled ) { $timeDiffRef = todayTime() - $lastVisit; // case the lastVisit value has been spoiled (BIS) $timeDiffRef = min($timeDiffRef, TIME_ONE_VISIT); } if(!isset($idPageRef) || $idPageRef === false ) { $idPageRef = 0; } else { printDebug("We know its page ref id=$idPageRef and he stayed on it $timeDiffRef seconds
"); } /** * Current visitor is a new visitor or an old one * but without cookie, so we put a cookie */ if(isset($newVisitor) || isset($tryPutCookie)) { // record it and set the cookie $idCookie = $GLOBALS['cookie']->put(isset($idCookie)?$idCookie:''); // case : visitor known but cookie not set during his first page views... if(isset($idVisit)) { $GLOBALS['cookie']->setVar('idvisit', $idVisit); } else { $lastVisit = todayTime(); } } /** * Visitor is known, we now look if it's a new visit or not */ // is the visit older than 30 minutes ? if(!isset($newVisitor)) { if(DEBUG) printDebug("(idvisit = $idVisit, ".getTimeForDisplay($serverTime)." | now : " . todayTime()." :: first page last time : $serverTime)"); if ($serverDate == date("Y-m-d") && ($lastVisit > (todayTime() - TIME_ONE_VISIT)) ) { // yes, new visit $GLOBALS['cookie']->setVar('last_visit_time', todayTime()); $knownVisit = true; printDebug("
=>Visit is known on date : $serverDate
"); } else { printDebug("=>Last visit is too old ==> New visit
"); $returningVisitor = 1; } } else { printDebug("
=>New Visitor also means new visit
"); } /** * Current visit is a known visit */ // save current page, etc. if(isset($knownVisit) && $knownVisit) { // we know // * $lastVisit // * $idVisit // * $idCookie // update last_visit_time printDebug("==> This is a visit known... we update the data
"); // do it first because we need idpage for visit info insert //print("$pageName
$pageUrl
$pageCategory ");exit; $a_idPages = recordDbPage($pageName, $pageUrlParamsProcessed, $pageCategory, false); $idPage = $a_idPages[0]; // save current page & url & variables information $idLink_vp = recordDbInfoPage($idVisit, $idPage, $idPageRef, $timeDiffRef, $a_vars); $total_time = DEFAULT_TIME_PAGE + todayTime() - $serverTime; // update last_visit_time & total_pages & c_total_time $r = query("UPDATE ".T_VISIT." SET last_visit_time = CURRENT_TIME(), total_pages = total_pages + 1, total_time = '$total_time', exit_idpage = '$idPage' WHERE idvisit = '$idVisit' LIMIT 1"); } /* * Current visit a new visit */ // now we know the visitor and its idcookie // save new visit else { printDebug("==> This is a new visit, we create datas in the database when necessary
"); if(!isset($ip) || !isset($ip2long)) { $ip = getIp(); $ip2long = ip2long($ip); exitIfIpExcluded($ip2long, $logo, $site); } $hostExt = getHostnameExt(getHost($ip)); printDebug('
ip : '.$ip); printDebug('
hostname : '.$hostExt); $serverDate = date("Y-m-d"); $serverTime = date("H:i:s"); $country = getCountry($hostExt, $browserLang); if($country == 'gb') { $country = 'uk'; } $continent = getContinent($country); if(strlen($refererUrl)===0) { $refererUrl = 'NULL'; } else { $refererUrl = "'".$refererUrl."'"; } // do it first because we need idpage for visit info insert $a_idPages = recordDbPage($pageName, $pageUrlParamsProcessed, $pageCategory, true); $idPageUrl = $a_idPages[1]; $idPage = $a_idPages[0]; $md5Config = md5( $os . serialize($a_browser) . $resolution . $colorDepth . $pdf . $flash . $java . $javascript . $director . $quicktime . $realPlayer . $windowsMedia . $cookieAccept . $ip2long . $browserLang); // save visitor information $r = query("INSERT INTO ".T_VISIT." (idsite, idcookie, returning, last_visit_time, server_date, server_time, md5config, referer, os, browser_name, browser_version, resolution, color_depth, pdf, flash, java, javascript, director, quicktime, realplayer, windowsmedia, cookie, local_time, ip, hostname_ext, browser_lang, country, continent, total_pages, total_time, entry_idpage, entry_idpageurl, exit_idpage) VALUES ('$idSite', '$idCookie', '$returningVisitor', CURRENT_TIME(), '$serverDate', '$serverTime', '$md5Config', $refererUrl, '$os', '".$a_browser['shortName']."', '".$a_browser['version']."', '$resolution', '$colorDepth', '$pdf', '$flash','$java', '$javascript', '$director', '$quicktime', '$realPlayer', '$windowsMedia', '$cookieAccept', '$localTime','$ip2long', '$hostExt', '$browserLang', '$country', '$continent', 1, '".DEFAULT_TIME_PAGE ."', '$idPage', '$idPageUrl', '$idPage') "); $idVisit = mysql_insert_id(); // save page view and URL and variables recordDbInfoPage($idVisit, $idPage, $idPageRef, $timeDiffRef, $a_vars); // save idvisit $GLOBALS['cookie']->setVar('idvisit', $idVisit); $GLOBALS['cookie']->setVar('last_visit_time', todayTime()); $GLOBALS['cookie']->setVar('server_time', todayTime()); $GLOBALS['cookie']->setVar('server_date', $serverDate); } $GLOBALS['cookie']->setVar('idpage_ref', $idPage); $GLOBALS['cookie']->save(); printDebug("
Next cookie should be :"); printDebug($GLOBALS['cookie']->getContent()); // footer if(PRINT_QUERY_COUNT) printQueryCount(); if(PRINT_TIME) printTime(); if(SAVE_DB_LOG) { recordDbQueryCount($idSite); } require_once INCLUDE_PATH . "/core/include/common.functions.php"; $crontabFile = INCLUDE_PATH . "/config/crontab.php"; if(is_file($crontabFile)) { include($crontabFile); } if( WEB_CRONTAB && is_writable( $crontabFile) && ( // if crontab doesn't exist in the file or the file doesn't exist // or if the last try was before today ( !isset($crontab) || $crontab['date_last_success'] != getDateFromTimestamp(time()) ) && ( !is_file($crontabFile) || ( isset($crontab) && $crontab['time_last_try'] < time() - TIME_TO_WAIT_FOR_PARALLEL_ARCHIVE // every 5min ) ) ) ) { $crontab['time_last_try'] = time(); $crontab['date_last_success'] = '2000-12-31'; saveConfigFile( $crontabFile, $crontab, "crontab"); printDebug('==========================
CRONTAB BEGIN/
==========================
'); require_once INCLUDE_PATH . '/core/include/PmvConfig.class.php'; require_once INCLUDE_PATH . '/core/include/ApplicationController.php'; $r =& Request::getInstance(); $r->setModuleName('send_mail'); $r->setCrontabAllowed(); ApplicationController::init(); printDebug('==========================
CRONTAB END/
==========================
'); $crontab['date_last_success'] = getDateFromTimestamp(time()); saveConfigFile( $crontabFile, $crontab, "crontab"); } $db->close(); redirectToUrlIfNecessary(); loadImage($logo, $idSite); // flush content for display if(DEBUG) ob_end_flush(); ?>