$r, $col => $val)) || rb_die("pg_insert failed: ".pg_last_error($dbh)); return $r; } function browser_id($name, $version, $platform, $language) { global $dbh; if ($name == 'Microsoft Internet Explorer') { $version = ereg_replace(".*(MSIE .*);.*", "\\1", $version); } if ($language == 'undefined') $language = ''; ($res = pg_query($dbh, "select id from browsers where name = '". pg_escape_string($name)."'". " and version = '".pg_escape_string($version)."'". " and platform = '".pg_escape_string($platform)."'". " and language = '".pg_escape_string($language)."'")) || rb_die("pg_query failed"); if (pg_num_rows($res)) { $row = pg_fetch_row($res, 0); $r = $row[0]; pg_free_result($res); return $r; } # No results $r = nextval('browsers_id_seq'); pg_insert($dbh, 'browsers', array("id" => $r, 'name' => $name, 'version' => $version, 'platform' => $platform, 'language' => $language )) || rb_die("pg_insert failed: ".pg_last_error($dbh)); return $r; } function url_id($url) { global $dbh; if (!preg_match('/^([a-z]*\:\/\/)([a-z0-9][^\/]*)(.*)$/', $url, $m)) rb_die("Unrecognized url: $url\n"); $proto = $m[1]; $host = $m[2]; $path = $m[3]; $path = preg_replace('/\?.*$/', '', $path); # Get the urlbase id ($res = pg_query($dbh, "select id from urlbase where protocol = '". pg_escape_string($proto)."'". " and host = '".pg_escape_string($host)."' limit 1")) || rb_die("pg_query failed"); if (pg_num_rows($res)) { $row = pg_fetch_row($res, 0); $urlbase_id = $row[0]; pg_free_result($res); } else { $urlbase_id = nextval('urlbase_id_seq'); pg_insert($dbh, 'urlbase', array("id" => $urlbase_id, 'protocol' => $protocol, 'host' => $host, )) || rb_die("pg_insert failed: ".pg_last_error($dbh)); } ($res = pg_query($dbh, "select id from urls where urlbase_id=$urlbase_id and path = '".pg_escape_string($path)."' limit 1")) || rb_die("pg_query failed"); if (pg_num_rows($res)) { $row = pg_fetch_row($res, 0); $url_id = $row[0]; pg_free_result($res); return $url_id; } $url_id = nextval('urls_id_seq'); pg_insert($dbh, 'urls', array("id" => $url_id, 'urlbase_id' => $urlbase_id, 'path' => $path )) || rb_die("pg_insert failed: ".pg_last_error($dbh)); return $url_id; } if (empty($_REQUEST[ur])) $_REQUEST[ur] = $_SERVER[HTTP_REFERER]; if (empty($_REQUEST[ur])) { header("Content-Type: image/gif"); readfile("counter.gif"); exit(); } pg_query($dbh, "begin"); $h[url_id] = url_id($_REQUEST[ur]); if ($_REQUEST[js] == 'y' || $_REQUEST[js] == 't') $h[javascript] = 't'; if (!empty($_REQUEST[bname])) $h[browser_id] = browser_id($_REQUEST[bname], $_REQUEST[bver], $_REQUEST[bplatform], $_REQUEST[blang]); $h[ip] = $_SERVER[REMOTE_ADDR]; pg_insert($dbh, "hits", $h) || rb_die("pg_insert failed: ".pg_last_error($dbh)); pg_query($dbh, "commit"); header("Content-Type: image/gif"); readfile("counter.gif"); ?>