Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
StatHat Class
<?php
// An simplified version of StatHat's own PHP code, wrapped in a class, with a lower timeout threshold.
class StatHat {
private static function ez_key() {
return "Your_StatHat_Key_Here"
//return $_SERVER['STATHAT_KEY'];
}
// StatHat's original code is very much _not_ asynchronous.
// In the event of DNS issues, this will lock your app for TIMEOUT seconds.
// It is set to 2 seconds, if you have frequent problems with timeouts, up the timeout, or fix your DNS :)
private static function do_async_post_request($url, $params)
{
foreach ($params as $key => &$val) {
if (is_array($val)) $val = implode(',', $val);
$post_params[] = $key.'='.urlencode($val);
}
$post_string = implode('&', $post_params);
$parts=parse_url($url);
// Lower threshold prevents lockup in the event of DNS issues.
$fp = fsockopen($parts['host'],
isset($parts['port'])?$parts['port']:80,
$errno, $errstr, 2);
$out = "POST ".$parts['path']." HTTP/1.1\r\n";
$out.= "Host: ".$parts['host']."\r\n";
$out.= "Content-Type: application/x-www-form-urlencoded\r\n";
$out.= "Content-Length: ".strlen($post_string)."\r\n";
$out.= "Connection: Close\r\n\r\n";
if (isset($post_string)) $out.= $post_string;
fwrite($fp, $out);
fclose($fp);
}
public static function ez_count($stat_name, $count)
{
self::do_async_post_request("http://api.stathat.com/ez", array('email' => self::ez_key(), 'stat' => $stat_name, 'count' => $count));
}
public static function ez_value($stat_name, $value)
{
self::do_async_post_request("http://api.stathat.com/ez", array('email' => self::ez_key(), 'stat' => $stat_name, 'value' => $value));
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment