function get_domain($_ip) { $config =& SlimStatConfig::get_instance(); $hostname = SlimStat::get_host($_ip, false); if ($hostname == $_ip) { return $_ip; } else { $portions = explode(".", $hostname); $portions = array_reverse($portions); if (sizeof($portions) > 2 && strlen($portions[0]) == 2 && (strlen($portions[1]) == 2 || preg_match("/^(org?|com?|net?|gov|nhs|edu|mod)\$/i", $portions[1]))) { $domain = $portions[2] . "." . $portions[1] . "." . $portions[0]; } elseif (sizeof($portions) > 1) { $domain = $portions[1] . "." . $portions[0]; } else { $domain = $portions[0]; } return $domain; //return ( preg_match( "/[0-9]{1,3}\.[0-9]{1,3}/", $domain ) ) ? $_ip : $domain; } }
function get_td($_cols, $_result, $_this_col, $_truncate, $_name_lookup = null, $_link = true) { $config =& SlimStatConfig::get_instance(); $value = $_result[$_this_col]; if ($_link) { if (is_array($_name_lookup) && isset($_name_lookup[$value])) { $display_value = $_name_lookup[$value]; } elseif (is_array($_name_lookup) && isset($_name_lookup[strtolower($value)])) { $display_value = $_name_lookup[strtolower($value)]; } elseif (is_string($_name_lookup)) { $display_value = eval(str_replace("VALUE", $value, $_name_lookup)); } else { $display_value = $value; } $filters_copy = $GLOBALS["filters"]; foreach ($_cols as $col) { unset($filters_copy["filter_" . $col]); $filters_copy["filter_" . $col] = urlencode($_result[$col]); } $str = "<a href=\"?"; $str .= SlimStat::implode_assoc("=", "&", $filters_copy); if (strlen($display_value) > $_truncate) { $str .= "\" title=\"" . htmlentities($display_value); } $str .= "\">"; $str .= utf8_encode(SlimStat::truncate($display_value, $_truncate)); $str .= "</a>"; } else { $str = SlimStat::truncate($value, $_truncate); } return $str; }
function unique_table($_cols, $_truncate, $_where_clause = "", $_filters = array()) { $config =& SlimStatConfig::get_instance(); $thead = array("first" => array(isset($config->i18n->fields[$_cols["display"]]) ? $config->i18n->fields[$_cols["display"]] : $_cols["display"]), "last" => array(" ", $config->i18n->hits, $config->i18n->since)); $tbody = array(); $results = SlimStat::get_unique_data($_cols, $_where_clause, $_cols["display"], $_filters); foreach ($results as $result) { $display_value = $result[$_cols["display"]]; if (isset($config->i18n->name_lookups[$_cols["display"]])) { if (is_array($config->i18n->name_lookups[$_cols["display"]]) && isset($config->i18n->name_lookups[$_cols["display"]][$display_value])) { $display_value = $config->i18n->name_lookups[$_cols["display"]][$display_value]; } elseif (is_string($config->i18n->name_lookups[$_cols["display"]])) { $display_value = eval(str_replace("VALUE", $display_value, $config->i18n->name_lookups[$_cols["display"]])); } } $row = array("first" => array(), "last" => array()); $str = "<a href=\"?filter_" . $_cols["display"] . "=" . urlencode($result[$_cols["display"]]); $str .= "\" title=\"" . $config->i18n->link_title("details_filtered", "FIELD", strtolower($config->i18n->fields[$_cols["display"]])) . "\">"; $str .= SlimStat::truncate($display_value, $_truncate - (int) (SlimStat::strlen($config->i18n->hits) + SlimStat::strlen($config->i18n->since))) . "</a>"; $row["first"][] = $str; $str = "<a href=\"" . $result[$_cols["href"]] . "\" class=\"external\" rel=\"nofollow\""; $str .= " title=\"" . $config->i18n->link_title("external", "FIELD", strtolower($config->i18n->fields[$_cols["href"]])) . "\">"; $str .= "<img src=\"external.gif\" width=\"9\" height=\"9\" alt=\"\" /></a>"; $row["last"][] = $str; /*$str = "<a href=\"".$result[$_cols["href"]]."\" class=\"external\" rel=\"nofollow\""; $str .= " title=\"".$config->i18n->fields[ $_cols["title"] ].": ".htmlentities( $result[$_cols["title"]] )."\">"; $str .= SlimStat::truncate( $display_value, $config->truncate - 6 )."</a>"; $row["first"][] = $str;*/ $row["last"][] = $result["hits"]; $row["last"][] = $config->i18n->time_label($result["mindt"], time()); $tbody[] = $row; } return SlimStat::render_table($thead, $tbody); }
function show_paths() { $config =& SlimStatConfig::get_instance(); // get max visit $query = "SELECT MAX(`visit`) FROM `" . SlimStat::my_esc($config->database) . "`.`" . SlimStat::my_esc($config->stats) . "`"; if ($result = mysql_query($query)) { list($max_visit) = mysql_fetch_row($result); } $str = ""; // get requests $query = "SELECT * FROM `" . SlimStat::my_esc($config->database) . "`.`" . SlimStat::my_esc($config->stats) . "` WHERE "; if (!$config->show_crawlers) { $query .= "`browser` != '" . SlimStat::my_esc($config->i18n->crawler) . "' AND "; } $query .= "`visit` >= " . ($max_visit - $config->rows); $query .= " ORDER BY `visit` DESC, `dt`"; if ($result = mysql_query($query)) { $prev_visit = 0; $visits = array(); $visit = array(); $pages = array(); while ($assoc = mysql_fetch_assoc($result)) { if ($assoc["visit"] != $prev_visit && !empty($visit)) { $visits[] = $visit; $visit = array(); } $visit[] = $assoc; $prev_visit = $assoc['visit']; } if (!empty($visit)) { $visits[] = $visit; } $str .= "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n"; $str .= "<tr><th>" . $config->i18n->fields["remote_ip"] . "</th>"; $str .= "<th>" . $config->i18n->when . "</th>"; $str .= "<th>" . $config->i18n->fields["browser"] . "</th>"; $str .= "<th>" . $config->i18n->fields["platform"] . "</th>"; $str .= "<th>" . $config->i18n->fields["country"] . "</th></tr>\n"; $usr_today = SlimStat::to_user_time(time()); $svr_today = SlimStat::to_server_time(mktime(0, 0, 0, date("n", $usr_today), date("d", $usr_today), date("Y", $usr_today))); foreach ($visits as $visit) { $is_today = $visit[0]["dt"] >= $svr_today; $mindt = SlimStat::time_label($visit[0]["dt"]); $maxdt = SlimStat::time_label($visit[sizeof($visit) - 1]["dt"]); $str .= "<tr><td class=\"accent\">" . htmlentities(SlimStat::get_domain($visit[0]["remote_ip"])) . "</td>"; $str .= "<td class=\"accent\">"; if ($is_today) { $str .= $mindt == $maxdt ? $mindt : $mindt . "-" . $maxdt; } else { $str .= SlimStat::time_label($visit[0]["dt"], time()); } $str .= "</td>"; $str .= "<td class=\"accent\">" . htmlentities($visit[0]["browser"]); if ($visit[0]["version"] != $config->i18n->indeterminable) { $str .= " " . htmlentities($visit[0]["version"]); } $str .= "</td><td class=\"accent\">" . htmlentities($visit[0]["platform"]) . "</td>"; $str .= "<td class=\"accent\">" . htmlentities($visit[0]["country"]) . "</td></tr>\n"; $prev_dt = ""; foreach ($visit as $hit) { $str .= "<tr><td>"; $str .= "<a href=\"" . $hit["resource"] . "\" class=\"external\""; $str .= "\" title=\"" . $config->i18n->link_title("external", "FIELD", strtolower($config->i18n->fields["resource"])) . "\">"; $str .= "<img src=\"external.gif\" width=\"9\" height=\"9\" alt=\"\" /></a> "; $str .= "<a href=\"?filter_resource=" . urlencode($hit["resource"]); $str .= "\" title=\"" . $config->i18n->link_title("details_filtered", "FIELD", strtolower($config->i18n->fields["resource"])) . "\">"; if (isset($config->i18n->name_lookups["resource"][$hit["resource"]])) { $str .= SlimStat::truncate($config->i18n->name_lookups["resource"][$hit["resource"]], 53); } else { $str .= SlimStat::truncate($hit["resource"], 53); } $str .= "</a></td>"; $dt_label = SlimStat::time_label($hit["dt"]); if (!$is_today && $prev_dt == "" || $mindt != $maxdt && $dt_label != $prev_dt) { $str .= "<td>" . $dt_label . "</td>"; } else { $str .= "<td> </td>"; } $prev_dt = $dt_label; if ($hit["referer"] != "" && $hit["domain"] != SlimStat::trim_referer($_SERVER["SERVER_NAME"])) { $str .= "<td colspan=\"3\" class=\"last\">"; $str .= "<a href=\"?filter_domain=" . urlencode($hit["domain"]); $str .= "\" title=\"" . $config->i18n->link_title("details_filtered", "FIELD", strtolower($config->i18n->fields["domain"])) . "\""; $str .= ">" . htmlentities(SlimStat::truncate($hit["domain"], 30)) . "</a> "; $str .= "<a href=\"" . $hit["referer"] . "\" class=\"external\" rel=\"nofollow\""; $str .= "\" title=\"" . $config->i18n->link_title("external", "FIELD", strtolower($config->i18n->fields["referer"])) . "\">"; $str .= "<img src=\"external.gif\" width=\"9\" height=\"9\" alt=\"\" /></a>"; } else { $str .= "<td colspan=\"3\"> </td>"; } $str .= "</tr>\n"; } } $str .= "</table>\n"; return $str; } }
<statstoday lastupdate="<?php echo date('g:ia'); ?> "> <totalhits><?php print isset($hvu["hits"]) ? $hvu["hits"] : "-"; ?> </totalhits> <visits><?php print isset($hvu["visits"]) ? $hvu["visits"] : "-"; ?> </visits> <uniquehits><?php print isset($hvu["uniques"]) ? $hvu["uniques"] : "-"; ?> </uniquehits> <recentreferrers> <?php $query = "SELECT referer, resource, domain, dt \n\t\t FROM " . SlimStat::my_esc($config->database) . "." . SlimStat::my_esc($config->stats) . "\n\t\t WHERE referer NOT LIKE '%" . SlimStat::my_esc(SlimStat::trim_referer($_SERVER["SERVER_NAME"])) . "%' AND \n\t\t\t\treferer!='' \n\t\t ORDER BY dt DESC \n\t\t LIMIT 0,7"; if ($result = mysql_query($query)) { while ($r = mysql_fetch_array($result)) { $when = SlimStat::time_label($r["dt"] + $config->dt_offset_secs, time()); $resource = $r["resource"] == "/" ? $config->i18n->homepage : $r["resource"]; print "<referrer time=\"" . $when . "\" url=\"" . htmlentities($r["referer"]) . "\">" . $r["domain"] . "</referrer>"; } } ?> </recentreferrers> </statstoday> </shortstat>
function time_label($_dt, $_compared_to_dt = 0) { $usr_dt = SlimStat::to_user_time($_dt); if ($_compared_to_dt == 0) { if (strftime("%p", $usr_dt) == "") { return strftime("%H:%M", $usr_dt); } else { return preg_replace("/^0/", "", strtolower(strftime("%I:%M%p", $usr_dt))); } //return strftime( "%r", $usr_dt ); } elseif ($_dt >= SlimStat::to_server_time(strtotime(date("j M Y 00:00:00", SlimStat::to_user_time($_compared_to_dt))))) { return SlimStat::time_label($_dt); } else { return strftime("%e %b", $usr_dt); } }
} } } } ?> </ul> <div style="clear:both;"></div> <?php include realpath(dirname(__FILE__)) . "/" . $included_file; ?> <div style="clear:both"></div> </div> <div id="donotremove"><a href="http://wettone.com/code/slimstat">SlimStat</a> v<?php print $config->version; ?> © 2006 Stephen Wettone. Based on ShortStat by <a href="http://www.shauninman.com/">Shaun Inman</a><?php if (SlimStat::is_ip_to_country_installed()) { ?> <br />This application uses the <a href="http://ip-to-country.webhosting.info/">IP-to-Country Database</a> provided by <a href="http://www.webhosting.info/">webhosting.info</a><?php } ?> </div> <!--<?php print number_format(SlimStat::getmicrotime() - $start_time, 2); ?> --> </body> </html>
print "<channel>\n"; print "<title>SlimStat: Daily feed for " . $config->sitename . "</title>\n"; print "<link>http://" . $_SERVER["SERVER_NAME"] . dirname($_SERVER["PHP_SELF"]) . "/</link>\n"; print "<description>SlimStat: " . $config->sitename . ": " . $config->i18n->module_titles["daily"] . "</description>\n"; print "<pubDate>" . date("r") . "</pubDate>\n"; print "<lastBuildDate>" . date("r", strtotime(date("Y-m-d 00:00:00"))) . "</lastBuildDate>\n"; print "<docs>http://blogs.law.harvard.edu/tech/rss</docs>\n"; print "<ttl>60</ttl>\n\n"; $dt = time() - 60 * 60 * 24; for ($i = 0; $i < 7; $i++) { $dt_start = strtotime(date("Y-m-d 00:00:00", $dt)) - $config->dt_offset_secs; $dt_end = strtotime(date("Y-m-d 23:59:59", $dt)) - $config->dt_offset_secs; $filters = array("filter_dt_start" => $dt_start, "filter_dt_end" => $dt_end); $hvu = SlimStat::get_hits_visits_uniques($dt_start, $dt_end); print "<item>\n"; print "<title>" . SlimStat::date_period_label($dt_start + $config->dt_offset_secs, $dt_end + $config->dt_offset_secs) . "</title>\n"; print "<link>http://" . $_SERVER["SERVER_NAME"] . dirname($_SERVER["PHP_SELF"]) . "/?filter_dt_start=" . $dt_start . "&filter_dt_end=" . $dt_end . "</link>\n"; print "<description>"; if (isset($hvu["hits"])) { print $config->i18n->hits . ": " . $hvu["hits"] . "<br />"; } if (isset($hvu["visits"])) { print $config->i18n->visits . ": " . $hvu["visits"] . "<br />"; } if (isset($hvu["uniques"])) { print $config->i18n->uniques . ": " . $hvu["uniques"] . "<br />"; } print "</description>\n"; print "<guid isPermaLink=\"true\">http://" . $_SERVER["SERVER_NAME"] . dirname($_SERVER["PHP_SELF"]) . "/?filter_dt_start=" . $dt_start . "&filter_dt_end=" . $dt_end . "</guid>\n"; print "<pubDate>" . date("r", $dt_end) . "</pubDate>\n"; print "</item>\n\n";
), you must confirm this decision below.</p> <p><strong>This CANNOT be undone.</strong> It is recommended that you save a recently-generated SlimStat report for posterity.</p> <p><label for="confirm"> <input type="checkbox" id="confirm" name="confirm" value="kill" /> I confirm deletion of all SlimStat data from before <?php print date("j M Y", $max_age); ?> </label></p> <p><input type="submit" value="Delete" /></p> </form> <?php } } else { ?> <p>The oldest entry in the database is from <?php print date("j M Y", SlimStat::get_first_hit()); ?> .</p> <p>SlimStat is configured to delete data more than <?php print $config->max_data_age_days; ?> days old, or from before <?php print date("j M Y", $max_age); ?> .</p> <p>To delete more data, change <code>$max_data_age_days</code> in <code>_config.php</code>.</p> <?php } } else { ?> <p>Set <code>$max_data_age_days</code> to a number greater than zero in <code>_config.php</code>.</p>