?page=PAGEID parameter, for example counter.php?page=test'); } // Remove any illegal chars from the page ID $page = preg_replace('/[^a-zA-Z0-9\-_\.]/', '', $_GET['page']); // Stop if $page is not valid if ( strlen($page) == 0 ) { die('ERROR: Page ID is missing or contains only invalid chars. Please use only these chars for the page ID: a-z, A-Z, 0-9, ".", "-" and "_"'); } // Set values for cookie and log file names $cname = 'tcount_unique_'.$page; $logfile = 'logs/' . $page . '.txt'; // Does the log file exist? if ( ! file_exists($logfile) ) { die('ERROR: Log file not found. Make sure there is a file called ' . $page . '.txt inside your logs folder. On most servers file names are CaSe SeNSiTiVe!'); } // Open log file for reading and writing if ($fp = @fopen($logfile, 'r+')) { // Lock log file from other scripts $locked = flock($fp, LOCK_EX); // Lock successful? if ($locked) { // Let's read current count $count = intval( trim( fread($fp, filesize($logfile) ) ) ); // If counting unique hits is enabled make sure it's a unique hit if ( $count_unique == 0 || ! isset($_COOKIE[$cname]) ) { // Update count by 1 and write the new value to the log file $count = $count + 1; rewind($fp); fwrite($fp, $count); // Print the Cookie and P3P compact privacy policy header('P3P: CP="NOI NID"'); setcookie($cname, 1, time()+60*60*$unique_hours); } } else { // Lock not successful. Better to ignore than to damage the log file $count = 1; } // Release file lock and close file handle flock($fp, LOCK_UN); fclose($fp); } else { die("ERROR: Not writable. PHP needs permission to write to file $logfile"); } // Is zero-padding enabled? If yes, add zeros if required if ($min_digits) { $count = sprintf('%0'.$min_digits.'s', $count); } // Format thousands? if ( strlen($thousands_separator) ) { $count = number_format($count, 0, '', $thousands_separator); } // Print out Javascript code and exit echo("document.write('{$count}');"); exit();