示例#1
0
 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;
     }
 }
示例#2
0
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("=", "&amp;", $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;
}
示例#3
0
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("&nbsp", $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);
}
示例#4
0
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>&nbsp;&nbsp;";
                $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>&nbsp;</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>&nbsp;&nbsp;";
                    $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\">&nbsp;</td>";
                }
                $str .= "</tr>\n";
            }
        }
        $str .= "</table>\n";
        return $str;
    }
}
示例#5
0
	<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>
示例#6
0
 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);
     }
 }
示例#7
0
            }
        }
    }
}
?>
</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;
?>
 &copy; 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>
示例#8
0
 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 . "&amp;filter_dt_end=" . $dt_end . "</link>\n";
     print "<description>";
     if (isset($hvu["hits"])) {
         print $config->i18n->hits . ": " . $hvu["hits"] . "&lt;br /&gt;";
     }
     if (isset($hvu["visits"])) {
         print $config->i18n->visits . ": " . $hvu["visits"] . "&lt;br /&gt;";
     }
     if (isset($hvu["uniques"])) {
         print $config->i18n->uniques . ": " . $hvu["uniques"] . "&lt;br /&gt;";
     }
     print "</description>\n";
     print "<guid isPermaLink=\"true\">http://" . $_SERVER["SERVER_NAME"] . dirname($_SERVER["PHP_SELF"]) . "/?filter_dt_start=" . $dt_start . "&amp;filter_dt_end=" . $dt_end . "</guid>\n";
     print "<pubDate>" . date("r", $dt_end) . "</pubDate>\n";
     print "</item>\n\n";
示例#9
0
), 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>