open(); $SiteInfo = get_account_info($QueryInfo['ID']); //Calculate TimeZone time shift ftom GMT $TimeShift = intval($SiteInfo['fltTimeZone']*3600); if($SiteInfo['boolDaylightSaving'] && date('I', time()+$TimeShift)) { $TimeShift += 3600; } check_igrone_ip_cookie(getenv("REMOTE_ADDR")); //Check if visitor should be ignored by IP or Cookie check_limits(); //Check hits limits check_logpage(); //Check that counter installed on correct site check_referer(); //Check that visitor has been referred from other site validate_cookies(); // Get cookie $CookieVisitorID = @$_COOKIE["V-".$QueryInfo['Key']]; $CookieVisitID = @$_COOKIE["S-".$QueryInfo['Key']]; $CookiePermVisitorID = @$_COOKIE["T-".$QueryInfo['Key']]; $LastHitDate = @$_COOKIE["L-".$QueryInfo['Key']]; ErrorLog("main(): _COOKIE=".var_export($_COOKIE, true)); setcookie("L-".$QueryInfo['Key'], time(), get_expired_time(), "/", $HostName); $isNewVisitor = 0; $isNewTodayVisitor = 0; $isNewSession = 0; $NewId = gen_unique_id(); if (!$CookieVisitorID && !$QueryInfo['NewVisitor']) { setcookie("S-".$QueryInfo['Key'], $NewId, get_expired_time(), "/", $HostName); setcookie("V-".$QueryInfo['Key'], $NewId, get_expired_time(), "/", $HostName); if(!$CookiePermVisitorID) { setcookie("T-".$QueryInfo['Key'], $NewId, get_expired_time(), "/", $HostName); } else { setcookie("T-".$QueryInfo['Key'], $CookiePermVisitorID, get_expired_time(), "/", $HostName); } $qs = 'id='.urlencode($QueryInfo['ID']). '&k='.urlencode($QueryInfo['Key']). '&rf='.urlencode($QueryInfo['Referer']). '&p='.urlencode($QueryInfo['Page']). '&c='.urlencode($QueryInfo['Cookie']). '&j='.urlencode($QueryInfo['Java']). '&scr='.urlencode($QueryInfo['Screen']). '&col='.urlencode($QueryInfo['Color']). '&f='.urlencode($QueryInfo['Flash']). '&js='.urlencode($QueryInfo['JS']). '&fr='.urlencode($QueryInfo['Frames']). '&ua='.urlencode(getenv("HTTP_USER_AGENT")). '&ip='.urlencode(getenv("REMOTE_ADDR")). '&nv=1'; header("Location: counter.php?".$qs); finish_all(); } if ($QueryInfo['NewVisitor'] == 1){ if($CookieVisitorID) { $isNewTodayVisitor = 1; $isNewSession = 1; if($CookiePermVisitorID==$CookieVisitorID) { $isNewVisitor = 1; ErrorLog("main(): case 1 $CookieVisitorID"); } else { $isNewVisitor = 0; ErrorLog("main(): case 2 $CookieVisitorID"); } } else { $CookieVisitorID = '-'.$NewId; $CookieVisitID = '-'.$NewId; ErrorLog("main(): case 3"); } // else, if cookie disabled do not count as new visit/visitor } else { if($CookieVisitorID && $CookieVisitID) { setcookie("S-".$QueryInfo['Key'], $CookieVisitorID, get_expired_time(), "/", $HostName); setcookie("T-".$QueryInfo['Key'], $CookiePermVisitorID, get_expired_time(), "/", $HostName); $isNewTodayVisitor = 0; $isNewSession = 0; $isNewVisitor = 0; ErrorLog("main(): case 4"); } elseif($CookieVisitorID && !$CookieVisitID) { setcookie("S-".$QueryInfo['Key'], $NewId, get_expired_time(), "/", $HostName); if($CookiePermVisitorID) { setcookie("T-".$QueryInfo['Key'], $CookiePermVisitorID, get_expired_time(), "/", $HostName); } else { $CookiePermVisitorID = $CookieVisitorID; setcookie("T-".$QueryInfo['Key'], $CookieVisitorID, get_expired_time(), "/", $HostName); } $CookieVisitID = $NewId; $isNewTodayVisitor = 0; $isNewSession = 1; $isNewVisitor = 0; ErrorLog("main(): case 5"); } elseif(!$CookieVisitorID && !$CookieVisitID) { setcookie("S-".$QueryInfo['Key'], $NewId, get_expired_time(), "/", $HostName); setcookie("V-".$QueryInfo['Key'], $NewId, get_expired_time(), "/", $HostName); $CookieVisitorID = $NewId; $CookieVisitID = $NewId; $isNewTodayVisitor = 1; $isNewSession = 1; if($CookiePermVisitorID) { setcookie("T-".$QueryInfo['Key'], $CookiePermVisitorID, get_expired_time(), "/", $HostName); $isNewVisitor = 0; ErrorLog("main(): case 6"); } else{ setcookie("T-".$QueryInfo['Key'], $NewId, get_expired_time(), "/", $HostName); $isNewVisitor = 1; $CookiePermVisitorID = $NewId; ErrorLog("main(): case 7"); } } } // Increment summary values for counter image $SiteInfo['lngDayNumberOfHits']++; $SiteInfo['lngMonthNumberOfHits']++; $SiteInfo['lngNumberOfHits']++; if ( $isNewVisitor || $isNewTodayVisitor ) { $SiteInfo['lngNumberOfVisitors']++; $SiteInfo['lngDayNumberOfVisitors']++; } if ($isNewSession) { $SiteInfo['lngNumberOfSessions']++; $SiteInfo['lngDayNumberOfSessions']++; } if (!$SiteInfo['lngNumberOfVisitors']) { $SiteInfo['lngNumberOfVisitors'] = 1; } if (!$SiteInfo['lngDayNumberOfVisitors']) { $SiteInfo['lngDayNumberOfVisitors'] = 1; } if (!$SiteInfo['lngNumberOfSessions']) { $SiteInfo['lngNumberOfSessions'] = 1; } if (!$SiteInfo['lngDayNumberOfSessions']) { $SiteInfo['lngDayNumberOfSessions'] = 1; } $SiteInfo['lngLastHitDate'] = time(); ErrorLog("main(): isNewVisitor=$isNewVisitor, isNewTodayVisitor=$isNewTodayVisitor, isNewSession=$isNewSession"); $SM->lock(); $SM->set(contert_account_info($SiteInfo, 'array')); $SM->unlock(); $QueryInfo['VistotorID'] = $CookieVisitorID; $QueryInfo['SessionID'] = $CookieVisitID; $QueryInfo['PermVisitorID'] = $CookiePermVisitorID; $QueryInfo['NewVisitor'] = $isNewTodayVisitor; $QueryInfo['NewSession'] = $isNewSession; insert_event(); display_image(); finish_all(); function get_query_params() { return @array( 'ID' => intval($_GET['id']), 'Key' => $_GET['k'], 'Referer' => substr($_GET['rf'], 0, 255), 'Page' => substr((($_GET['p'])?$_GET['p']:getenv("HTTP_REFERER")), 0, 255), 'Cookie' => intval($_GET['c']), 'Java' => intval($_GET['j']), 'Screen' => $_GET['scr'], 'Color' => intval($_GET['col']), 'Flash' => intval($_GET['f']), 'UserAgent' => substr((($_GET['ua'])?$_GET['ua']:getenv("HTTP_USER_AGENT")), 0, 255), 'IP' => (($_GET['ip'])?$_GET['ip']:getenv("REMOTE_ADDR")), 'JS' => $_GET['js'], 'Frames' => $_GET['fr'], 'NewVisitor' => intval($_GET['nv']) ); } function gen_unique_id() { list($usec, $sec) = explode(" ",microtime()); return date('mdHis').substr($usec, 2, 3).sprintf("%03d", rand(0,999)); } function validate_query($query_info) { if(!$query_info['ID'] || sprintf("%X", crc32($query_info['ID'].'-istats-'))!=$query_info['Key']) { ErrorLog("validate_query(): Wrong params (id={$query_info['ID']}, key={$query_info['Key']}!=".sprintf("%X", crc32($query_info['ID'].'-istats-')).")"); display_empty_image(); finish_all(); } return true; } function get_main_db() { global $MainHost, $MainLogin, $MainPassword, $MainDBName, $db_main; if($db_main) return $db_main; if (!$db_main = @mysql_connect($MainHost, $MainLogin, $MainPassword)) { ErrorLog('get_main_db(): Cannot connect'); display_empty_image(); finish_all(); } if(!@mysql_select_db($MainDBName, $db_main)) { ErrorLog("get_main_db(): Cannot select database ({$MainDBName})"); display_empty_image(); finish_all(); } return $db_main; } function get_event_db() { global $LogHost, $LogLogin, $LogPassword, $LogDBName, $db_event; if($db_event) return $db_event; if (!$db_event = @mysql_connect($LogHost, $LogLogin, $LogPassword)) { ErrorLog("get_event_db(): Cannot connect $LogHost, $LogLogin, $LogPassword"); display_empty_image(); finish_all(); } if(!@mysql_select_db($LogDBName, $db_event)) { ErrorLog("get_event_db(): Cannot select database ({$LogDBName})"); display_empty_image(); finish_all(); } return $db_event; } function get_account_info($account_id) { global $SM; $SM->lock(); $SiteInfo = $SM->get(); $SM->unlock(); if(!$SiteInfo) { $db_main = get_main_db(); $sql = << $SiteInfo[0], 'boolIsActive' => $SiteInfo[1], 'strSiteUrl' => $SiteInfo[2], 'strSiteUrlAlias' => $SiteInfo[3], 'strExclusionIp' => $SiteInfo[4], 'fltTimeZone' => $SiteInfo[5], 'boolDaylightSaving' => $SiteInfo[6], 'lngTrackerType' => $SiteInfo[7], 'lngLastHitDate' => $SiteInfo[8], 'lngHitLimit' => $SiteInfo[9], 'lngDayHitLimit' => $SiteInfo[10], 'lngNumberOfHits' => $SiteInfo[11], 'lngNumberOfVisitors' => $SiteInfo[12], 'lngNumberOfSessions' => $SiteInfo[13], 'lngDayNumberOfHits' => $SiteInfo[14], 'lngDayNumberOfVisitors' => $SiteInfo[15], 'lngDayNumberOfSessions' => $SiteInfo[16], 'lngCustomMonthHitsLimit' => $SiteInfo[17], 'lngAccountMonthHits' => $SiteInfo[18], 'lngMonthNumberOfHits' => $SiteInfo[19] ); } elseif($type == 'array') { return array ( $SiteInfo['ID'], $SiteInfo['boolIsActive'], $SiteInfo['strSiteUrl'], $SiteInfo['strSiteUrlAlias'], $SiteInfo['strExclusionIp'], $SiteInfo['fltTimeZone'], $SiteInfo['boolDaylightSaving'], $SiteInfo['lngTrackerType'], $SiteInfo['lngLastHitDate'], $SiteInfo['lngHitLimit'], $SiteInfo['lngDayHitLimit'], $SiteInfo['lngNumberOfHits'], $SiteInfo['lngNumberOfVisitors'], $SiteInfo['lngNumberOfSessions'], $SiteInfo['lngDayNumberOfHits'], $SiteInfo['lngDayNumberOfVisitors'], $SiteInfo['lngDayNumberOfSessions'], $SiteInfo['lngCustomMonthHitsLimit'], $SiteInfo['lngAccountMonthHits'], $SiteInfo['lngMonthNumberOfHits'] ); } } function get_expired_time () { return time()+365*24*3600; //1 year } function getExpiredTime ($period) { global $SiteInfo, $TimeShift; $dteNowTime = getdate(time()+$TimeShift); //ErrorLog("getExpiredTime(): Month "); if($period=='midnight') { //ErrorLog("getExpiredTime(): Midnight (".date('Y-m-d H:i:s', time() + $TimeShift + (24*3600 - ($dteNowTime["seconds"] + $dteNowTime["minutes"]*60 + $dteNowTime["hours"]*60*60))).")"); return time() - $TimeShift + (24*3600 - ($dteNowTime["seconds"] + $dteNowTime["minutes"]*60 + $dteNowTime["hours"]*60*60)); } elseif($period=='month') { //ErrorLog("getExpiredTime(): Month (".date('Y-m-d H:i:s', (time() + $TimeShift + 24*3600*30)).")"); return time() - $TimeShift + 24*3600*30; } elseif($period=='15min') { //@ErrorLog("getExpiredTime(): Month "); return time() + 15*60; } } function validate_cookies() { global $SiteInfo, $QueryInfo, $TimeShift; $LastHitDate = @$_COOKIE["L-".$QueryInfo['Key']]; if(!$LastHitDate) { $_COOKIE["V-".$QueryInfo['Key']] = ''; $_COOKIE["S-".$QueryInfo['Key']] = ''; $_COOKIE["T-".$QueryInfo['Key']] = ''; $_COOKIE["L-".$QueryInfo['Key']] = ''; ErrorLog("validate_cookies(): first time visitor"); return; } $lasthit_date_time = gmdate('YmdHis', $LastHitDate+$TimeShift); if(((time()-$LastHitDate)/60) > 15) { //Begin new session if last hit was more than 15 mins ago $_COOKIE["S-".$QueryInfo['Key']] = ''; ErrorLog("validate_cookies(): new visit"); } if(gmdate('Ymd', time()+$TimeShift) != gmdate('Ymd', $LastHitDate+$TimeShift)) { //Begin new visitor if next day $_COOKIE["V-".$QueryInfo['Key']] = ''; $_COOKIE["S-".$QueryInfo['Key']] = ''; ErrorLog("validate_cookies(): new visitor"); } if(((time()-$LastHitDate)/(3600*24)) > 360) { //Last visit more then 1 year ago, reset permanent visitor id $_COOKIE["T-".$QueryInfo['Key']] = ''; $_COOKIE["V-".$QueryInfo['Key']] = ''; $_COOKIE["S-".$QueryInfo['Key']] = ''; $_COOKIE["L-".$QueryInfo['Key']] = ''; ErrorLog("validate_cookies(): overyear visitor"); } } function check_limits() { global $SiteInfo, $TimeShift; if(!$SiteInfo['boolIsActive']) { //Account disabled ErrorLog("check_limits(): Site is disabled"); display_empty_image(); finish_all(); } if(gmdate('Ymd', time()+$TimeShift)!=gmdate('Ymd', $SiteInfo['lngLastHitDate']+$TimeShift)) { $SiteInfo['lngDayNumberOfHits']=0; $SiteInfo['lngDayNumberOfVisitors']=0; $SiteInfo['lngDayNumberOfSessions']=0; ErrorLog("check_limits(): Nex day, zore all counters (".gmdate('Ymd', time()+$TimeShift).'!='.gmdate('Ymd', $SiteInfo['lngLastHitDate']+$TimeShift).")"); } if(gmdate('Ym', time()+$TimeShift)!=gmdate('Ym', $SiteInfo['lngLastHitDate']+$TimeShift)) { $SiteInfo['lngAccountMonthHits']=0; $SiteInfo['lngMonthNumberOfHits']=0; ErrorLog("check_limits(): Nex month, zore month counters"); } if($SiteInfo['lngDayHitLimit'] && $SiteInfo['lngDayNumberOfHits']>=$SiteInfo['lngDayHitLimit']) { //Day hits limit ErrorLog("check_limits(): DayHitLimit overdraft ({$SiteInfo['lngDayNumberOfHits']}>={$SiteInfo['lngDayHitLimit']})"); display_image(); finish_all(); } if($SiteInfo['lngCustomMonthHitsLimit'] && $SiteInfo['lngAccountMonthHits']>=$SiteInfo['lngCustomMonthHitsLimit']) {//Account hits limit ErrorLog("check_limits(): CustomMonthHitsLimit overdraft ({$SiteInfo['lngAccountMonthHits']}>={$SiteInfo['lngCustomMonthHitsLimit']})"); display_image(); finish_all(); } elseif($SiteInfo['lngHitLimit'] && $SiteInfo['lngAccountMonthHits']>=$SiteInfo['lngHitLimit']) {//Account hits limit ErrorLog("check_limits(): HitLimit overdraft ({$SiteInfo['lngAccountMonthHits']}>={$SiteInfo['lngHitLimit']})"); display_image(); finish_all(); } } function check_igrone_ip_cookie ($ip) { global $SiteInfo, $QueryInfo, $HostName; if($_COOKIE['I-'.$QueryInfo['Key']] == 'ignore me') { setcookie("I-".$QueryInfo['Key'], 'ignore me', get_expired_time(), "/", $HostName); display_image(); finish_all(); } if($SiteInfo['strExclusionIp']) { $IgnoreIPs = split("\n", $SiteInfo['strExclusionIp']); foreach($IgnoreIPs as $inore_ip) { if(strpos($inore_ip, '-')) { list($fromIP, $toIP) = split("-", $inore_ip); $fromIP = vsprintf("%03d.%03d.%03d.%03d",split('\.', $fromIP)); $toIP = vsprintf("%03d.%03d.%03d.%03d",split('\.', $toIP)); $IP = vsprintf("%03d.%03d.%03d.%03d",split('\.', $ip)); if($IP>=$fromIP && $IP<=$toIP) { display_image(); finish_all(); } return true; } else { $ignoreIP = vsprintf("%03d.%03d.%03d.%03d",split('\.', $inore_ip)); $IP = vsprintf("%03d.%03d.%03d.%03d",split('\.', $ip)); if($IP==$ignoreIP) { display_image(); finish_all(); } return true; } } } return true; } function check_logpage() { global $SiteInfo, $QueryInfo; $log_page_parts = parse_url($QueryInfo['Page']); if(!$log_page_parts['host']) { ErrorLog("check_logpage(): Incorrect LogPage ({$QueryInfo['Page']})"); display_empty_image(); finish_all(); } $SiteAliases = array_merge(array($SiteInfo['strSiteUrl']), @split("\n", $SiteInfo['strSiteUrlAlias'])); foreach($SiteAliases as $site_alias) { if(!$site_alias) continue; if(!preg_match('/^http(s?):\/\//i', $site_alias)) $site_alias = 'http://'.$site_alias; $site_alias_parts = parse_url($site_alias); if($site_alias_parts['host']) { $site_alias_parts['host'] = preg_replace('/^www\./i', '', $site_alias_parts['host']); if(strtolower($site_alias_parts['host']) == strtolower($log_page_parts['host'])) { return true; } if(strtolower('www.'.$site_alias_parts['host']) == strtolower($log_page_parts['host'])) { return true; } } } ErrorLog("check_logpage(): Wrong LogPage ({$QueryInfo['Page']} => ".join('; ', $SiteAliases).")"); display_empty_image(); finish_all(); } function check_referer() { global $SiteInfo, $QueryInfo; $referer_parts = parse_url($QueryInfo['Referer']); if(!$referer_parts['host']) { ErrorLog("check_referer(): Incorrect Referer ({$QueryInfo['Referer']})"); $QueryInfo['Referer']=''; } $SiteAliases = array_merge(array($SiteInfo['strSiteUrl']), @split("\n", $SiteInfo['strSiteUrlAlias'])); foreach($SiteAliases as $site_alias) { $site_alias_parts = parse_url($site_alias); if($site_alias_parts['host']) { $site_alias_parts['host'] = preg_replace('/^www\./i', '', $site_alias_parts['host']); if(strtolower($site_alias_parts['host']) == strtolower($referer_parts['host'])) { $QueryInfo['Referer']=''; return true; } if(strtolower('www'.$site_alias_parts['host']) == strtolower($referer_parts['host'])) { $QueryInfo['Referer']=''; return true; } } } } function insert_event() { global $SiteInfo, $QueryInfo; $db_event = get_event_db(); $sql = "INSERT DELAYED INTO tblevent SET " ; $sql .= "SiteID = '".addslashes($SiteInfo['ID'])."', " ; $sql .= "strLogIP = '".addslashes($QueryInfo['IP'])."', " ; $sql .= "strLogPage = '".addslashes($QueryInfo['Page'])."', "; $sql .= "strLogReferrer = '".addslashes($QueryInfo['Referer'])."', " ; $sql .= "lngLogUNIXDate = '".time()."', " ; $sql .= "strFlashVersion = '".$QueryInfo['Flash']."', " ; $sql .= "boolCookieEnabled = '".addslashes($QueryInfo['Cookie'])."', " ; $sql .= "lngScreenColorDepth = '".addslashes($QueryInfo['Color'])."', " ; $sql .= "strScreenResolution = '".addslashes($QueryInfo['Screen'])."', " ; $sql .= "boolJavaEnabled = '".addslashes($QueryInfo['Java'])."', " ; $sql .= "strJSVersion = '".addslashes($QueryInfo['JS'])."', " ; $sql .= "strBrowserHeader = '".addslashes($QueryInfo['UserAgent'])."', " ; $sql .= "lngVisitorID = '".addslashes($QueryInfo['VistotorID'])."', " ; $sql .= "lngVisitID = '".addslashes($QueryInfo['SessionID'])."', " ; if($QueryInfo['NewVisitor']) $sql .= "lngNewVisitorID = '".addslashes($QueryInfo['VistotorID'])."', " ; $sql .= "boolIsNewSession = '".addslashes($QueryInfo['NewSession'])."', " ; $sql .= "boolIsNewVisitor = '".addslashes($QueryInfo['NewVisitor'])."' "; if(!($result = mysql_query($sql, $db_event))) { ErrorLog("insert_event(): SQL Error [".mysql_error($db_event)." ({$sql})]"); } } function ErrorLog($error) { global $HostName, $QueryInfo; // @setcookie("S-".$QueryInfo['Key'], '', getExpiredTime('15min'), "/", $HostName); // @setcookie("V-".$QueryInfo['Key'], '', getExpiredTime('midnight'), "/", $HostName); //print $error."\n"; if($error_log = @fopen('/home/c1istat/public_html/counter/errors.log', 'a')) { fwrite($error_log, date("Y-m-d H:i:s").": {$error}\n"); fclose($error_log); } } function get_tracker_images($img_id) { global $TrackerPath, $Trackers, $Digits; $ImageInfo = $Trackers[$img_id]; if(!$ImageInfo) { ErrorLog("get_tracker_images(): Wrong image id ({$img_id})"); display_empty_image(); finish_all(); } $img_sm = new SharedMemory($img_id); $img_sm->open(); $img_sm->lock(); $TrackerImage = $img_sm->get(); $img_sm->unlock(); if(!$TrackerImage) { $TrackerImage = @file_get_contents("{$TrackerPath}/{$ImageInfo['strImagePath']}"); if(!$TrackerImage) { ErrorLog("get_tracker_images(): Can't load image ('{$TrackerPath}/{$ImageInfo['strImagePath']}')"); display_empty_image(); finish_all(); } $img_sm->lock(); $img_sm->set($TrackerImage); $img_sm->unlock(); } $img_sm->close(); if($ImageInfo['DigitsID']) { $DigitInfo = $Digits[$ImageInfo['DigitsID']]; if(!$DigitInfo) { ErrorLog("get_tracker_images(): Wrong digit id ({$ImageInfo['DigitsID']})"); display_empty_image(); finish_all(); } $dig_sm = new SharedMemory($ImageInfo['DigitsID']); $dig_sm->open(); $dig_sm->lock(); $TrackerDigits = $dig_sm->get(); $dig_sm->unlock(); if(!$TrackerDigits) { $TrackerDigits = @file_get_contents("{$TrackerPath}/{$DigitInfo['strImagePath']}"); if(!$TrackerDigits) { ErrorLog("get_tracker_images(): Can't load image ('{$TrackerPath}/{$DigitInfo['strImagePath']}')"); display_empty_image(); finish_all(); } $dig_sm->lock(); $dig_sm->set($TrackerDigits); $dig_sm->unlock(); } $dig_sm->close(); if($ImageInfo['DigitsID'] != 901) { //white image $WhiteDigitInfo = $Digits[901]; if(!$WhiteDigitInfo) { ErrorLog("get_tracker_images(): Wrong digit id (901)"); display_empty_image(); finish_all(); } $dig_sm = new SharedMemory(901); $dig_sm->open(); $dig_sm->lock(); $WhiteTrackerDigits = $dig_sm->get(); $dig_sm->unlock(); if(!$WhiteTrackerDigits) { $WhiteTrackerDigits = @file_get_contents("{$TrackerPath}/{$DigitInfo['strImagePath']}"); if(!$WhiteTrackerDigits) { ErrorLog("get_tracker_images(): Can't load image ('{$TrackerPath}/{$DigitInfo['strImagePath']}')"); display_empty_image(); finish_all(); } $dig_sm->lock(); $dig_sm->set($WhiteTrackerDigits); $dig_sm->unlock(); } $dig_sm->close(); } else { $WhiteTrackerDigits = $TrackerDigits; } } else { $TrackerDigits = null; $WhiteTrackerDigits = null;} return array($TrackerImage, $TrackerDigits, $WhiteTrackerDigits); } function display_image () { global $SiteInfo, $Trackers; $ImageInfo = $Trackers[$SiteInfo['lngTrackerType']]; $ImageType = $ImageInfo["lngTrackerType"]; if ($ImageType == 1) { display_invisible_image(); } elseif ($ImageType == 2) { display_small_image(); } elseif ($ImageType == 3) { display_medium_image(); } elseif ($ImageType == 4) { display_big_image(); } else { ErrorLog("display_image(): Wrong tracker type ('{$ImageType}')"); display_empty_image(); finish_all(); } } function display_invisible_image() { header("Content-Type: image/gif"); print "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\xFF\xFF\xFF\x00\x00\x00\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3B"; } function display_small_image() { global $SiteInfo; list($image, $digits, $white_digits) = get_tracker_images($SiteInfo['lngTrackerType']); header("Content-Type: image/png"); print $image; } function display_medium_image() { global $SiteInfo; list($image, $digits, $white_digits) = get_tracker_images($SiteInfo['lngTrackerType']); $objImage = ImageCreateFromString($image); $objDigits = ImageCreateFromString($digits); $objWhiteDigits = ImageCreateFromString($white_digits); imagecolortransparent ($objDigits, 0); imagecolortransparent ($objWhiteDigits, 0); $strNumberOfHits = strrev($SiteInfo['lngNumberOfHits']); for ($i = 0; $i < strlen($strNumberOfHits); $i++) { $x = 49 + intval(substr($strNumberOfHits, $i, 1))*5; $imgX = 78 - $i*5; ImageCopy($objImage, $objWhiteDigits, $imgX, 22, $x, 2, 4, 6); } $strDayNumberOfSessions = strrev($SiteInfo['lngDayNumberOfSessions']); for ($i = 0; $i < strlen($strDayNumberOfSessions); $i++) { $x = 49 + intval(substr($strDayNumberOfSessions, $i, 1))*5; $imgX = 78 - $i*5; ImageCopy($objImage, $objDigits, $imgX, 12, $x, 2, 4, 6); } $strTodayNumberOfHits = strrev($SiteInfo['lngDayNumberOfHits']); for ($i = 0; $i < strlen($strTodayNumberOfHits); $i++) { $x = 49 + intval(substr($strTodayNumberOfHits, $i, 1))*5; $imgX = 78 - $i*5; ImageCopy($objImage, $objDigits, $imgX, 4, $x, 2, 4, 6); } header("Content-Type: image/png"); ImagePNG($ob