<?php $start_time = time(); include('geoipcity.inc'); $gi = geoip_open('/usr/local/share/GeoIP/GeoLiteCity.dat',GEOIP_STANDARD); $proj_pipe = '|/sw/bin/proj +proj=robin +ellps=sphere +lon_0=10e -'; $x_offset = 16986796.16; $y_offset = 8615499.05; $max_x = $x_offset * 2; $max_y = $y_offset * 2; $connect = mysql_pconnect ('localhost','eprintstatspriv','AuldGrizzel'); $db = mysql_select_db('eprintstats',$connect) or die("Could not connect"); $num_IPs = 3875; $num_hits = 0; $query = "SELECT ip, COUNT(*) AS count FROM view WHERE (view_type = 'download') GROUP BY ip ORDER BY count DESC" . ($num_IPs > 0 ? " LIMIT $num_IPs" : ''); $result = mysql_query($query,$connect); if (mysql_num_rows($result) > 0) { if ($num_IPs < 1) $num_IPs = mysql_num_rows($result); while ($row = mysql_fetch_assoc($result)) { $ip = $row["ip"]; $count = $row["count"]; $location = GeoIP_record_by_addr($gi, $ip); if (isset($location->latitude)) { $lat = $location->latitude; $long = $location->longitude; $city = $location->city; if ($city == '') $city = 'Unknown'; $cities[$city]['lat'] = $lat; $cities[$city]['long'] = $long; if (!isset($cities[$city])) $cities[$city]['count'] = 0; $cities[$city]['count'] += $count; $num_hits += $count; list($x, $y) = explode("\t", exec("echo '$long\t$lat'" . $proj_pipe)); $cities[$city]['x'] = round(($x + $x_offset) / $max_x * 900, 0); $cities[$city]['y'] = round(($y_offset - $y) / $max_y * 457, 0); } } $mapimage = imagecreatefrompng('map.png'); if ($mapimage) /* See if it failed */ { foreach ($cities as $city => $loc) { $col_ellipse = imagecolorallocate($mapimage, 255, 0, 0); imagefilledrectangle($mapimage, $loc['x'] - 1, $loc['y'] - 1, $loc['x'] + 1, $loc['y'] + 1, $col_ellipse); } } else { $mapimageÊ = imagecreatetruecolor(150, 30); /* Create a blank image */ $bgc = imagecolorallocate($mapimage, 255, 255, 255); $tcÊ = imagecolorallocate($mapimage, 0, 0, 0); imagefilledrectangle($mapimage, 0, 0, 150, 30, $bgc); /* Output an errmsg */ imagestring($mapimage, 1, 5, 5, "Error loading $imgname", $tc); } $tcÊ = imagecolorallocate($mapimage, 0, 0, 0); imagestring($mapimage, 1, 3, 3, "$num_hits downloads from " . (count($cities)) . ' cities', $tc); imagestring($mapimage, 1, 3, 15, "($num_IPs IP addresses)", $tc); imagestring($mapimage, 1, 3, 447, 'Elapsed time ' . (time() - $start_time) . ' seconds', $tc); header("Content-type: image/jpeg"); imagejpeg($mapimage); } ?>