/baser/vendors/ga.php
PHP | 193 lines | 131 code | 27 blank | 35 comment | 19 complexity | 14d2185f14afbbaeeee531370f1d18a6 MD5 | raw file
Possible License(s): MIT
- <?php
- /**
- Copyright 2009 Google Inc. All Rights Reserved.
- **/
- // Tracker version.
- define("VERSION", "4.4sh");
- define("COOKIE_NAME", "__utmmobile");
- // The path the cookie will be available to, edit this to use a different
- // cookie path.
- define("COOKIE_PATH", "/");
- // Two years in seconds.
- define("COOKIE_USER_PERSISTENCE", 63072000);
- // 1x1 transparent GIF
- $GIF_DATA = array(
- chr(0x47), chr(0x49), chr(0x46), chr(0x38), chr(0x39), chr(0x61),
- chr(0x01), chr(0x00), chr(0x01), chr(0x00), chr(0x80), chr(0xff),
- chr(0x00), chr(0xff), chr(0xff), chr(0xff), chr(0x00), chr(0x00),
- chr(0x00), chr(0x2c), chr(0x00), chr(0x00), chr(0x00), chr(0x00),
- chr(0x01), chr(0x00), chr(0x01), chr(0x00), chr(0x00), chr(0x02),
- chr(0x02), chr(0x44), chr(0x01), chr(0x00), chr(0x3b)
- );
- // The last octect of the IP address is removed to anonymize the user.
- function getIP($remoteAddress) {
- if (empty($remoteAddress)) {
- return "";
- }
- // Capture the first three octects of the IP address and replace the forth
- // with 0, e.g. 124.455.3.123 becomes 124.455.3.0
- $regex = "/^([^.]+\.[^.]+\.[^.]+\.).*/";
- if (preg_match($regex, $remoteAddress, $matches)) {
- return $matches[1] . "0";
- } else {
- return "";
- }
- }
- // Generate a visitor id for this hit.
- // If there is a visitor id in the cookie, use that, otherwise
- // use the guid if we have one, otherwise use a random number.
- function getVisitorId($guid, $account, $userAgent, $cookie) {
- // If there is a value in the cookie, don't change it.
- if (!empty($cookie)) {
- return $cookie;
- }
- $message = "";
- if (!empty($guid)) {
- // Create the visitor id using the guid.
- $message = $guid . $account;
- } else {
- // otherwise this is a new user, create a new random id.
- $message = $userAgent . uniqid(getRandomNumber(), true);
- }
- $md5String = md5($message);
- return "0x" . substr($md5String, 0, 16);
- }
- // Get a random number string.
- function getRandomNumber() {
- return rand(0, 0x7fffffff);
- }
- // Writes the bytes of a 1x1 transparent gif into the response.
- function writeGifData() {
- global $GIF_DATA;
- header("Content-Type: image/gif");
- header("Cache-Control: " .
- "private, no-cache, no-cache=Set-Cookie, proxy-revalidate");
- header("Pragma: no-cache");
- header("Expires: Wed, 17 Sep 1975 21:32:10 GMT");
- echo join(array(
- chr(0x47), chr(0x49), chr(0x46), chr(0x38), chr(0x39), chr(0x61),
- chr(0x01), chr(0x00), chr(0x01), chr(0x00), chr(0x80), chr(0xff),
- chr(0x00), chr(0xff), chr(0xff), chr(0xff), chr(0x00), chr(0x00),
- chr(0x00), chr(0x2c), chr(0x00), chr(0x00), chr(0x00), chr(0x00),
- chr(0x01), chr(0x00), chr(0x01), chr(0x00), chr(0x00), chr(0x02),
- chr(0x02), chr(0x44), chr(0x01), chr(0x00), chr(0x3b)
- ));
- }
- // Make a tracking request to Google Analytics from this server.
- // Copies the headers from the original request to the new one.
- // If request containg utmdebug parameter, exceptions encountered
- // communicating with Google Analytics are thown.
- function sendRequestToGoogleAnalytics($utmUrl) {
- $options = array(
- "http" => array(
- "method" => "GET",
- "user_agent" => $_SERVER["HTTP_USER_AGENT"],
- "header" => ("Accepts-Language: " . $_SERVER["HTTP_ACCEPT_LANGUAGE"]))
- );
- if (!empty($_GET["utmdebug"])) {
- $data = file_get_contents(
- $utmUrl, false, stream_context_create($options));
- } else {
- $data = @file_get_contents(
- $utmUrl, false, stream_context_create($options));
- }
- }
- // Track a page view, updates all the cookies and campaign tracker,
- // makes a server side request to Google Analytics and writes the transparent
- // gif byte data to the response.
- function trackPageView() {
- $timeStamp = time();
- $domainName = $_SERVER["SERVER_NAME"];
- if (empty($domainName)) {
- $domainName = "";
- }
- // Get the referrer from the utmr parameter, this is the referrer to the
- // page that contains the tracking pixel, not the referrer for tracking
- // pixel.
- $documentReferer = $_GET["utmr"];
- if (empty($documentReferer) && $documentReferer !== "0") {
- $documentReferer = "-";
- } else {
- $documentReferer = urldecode($documentReferer);
- }
- $documentPath = $_GET["utmp"];
- if (empty($documentPath)) {
- $documentPath = "";
- } else {
- $documentPath = urldecode($documentPath);
- }
- $account = $_GET["utmac"];
- $userAgent = $_SERVER["HTTP_USER_AGENT"];
- if (empty($userAgent)) {
- $userAgent = "";
- }
- // Try and get visitor cookie from the request.
- $cookie = @$_COOKIE[COOKIE_NAME];
- $guidHeader = @$_SERVER["HTTP_X_DCMGUID"];
- if (empty($guidHeader)) {
- $guidHeader = @$_SERVER["HTTP_X_UP_SUBNO"];
- }
- if (empty($guidHeader)) {
- $guidHeader = @$_SERVER["HTTP_X_JPHONE_UID"];
- }
- if (empty($guidHeader)) {
- $guidHeader = @$_SERVER["HTTP_X_EM_UID"];
- }
- $visitorId = getVisitorId($guidHeader, $account, $userAgent, $cookie);
- // Always try and add the cookie to the response.
- setrawcookie(
- COOKIE_NAME,
- $visitorId,
- $timeStamp + COOKIE_USER_PERSISTENCE,
- COOKIE_PATH);
- $utmGifLocation = "http://www.google-analytics.com/__utm.gif";
- // Construct the gif hit url.
- $utmUrl = $utmGifLocation . "?" .
- "utmwv=" . VERSION .
- "&utmn=" . getRandomNumber() .
- "&utmhn=" . urlencode($domainName) .
- "&utmr=" . urlencode($documentReferer) .
- "&utmp=" . urlencode($documentPath) .
- "&utmac=" . $account .
- "&utmcc=__utma%3D999.999.999.999.999.1%3B" .
- "&utmvid=" . $visitorId .
- "&utmip=" . getIP($_SERVER["REMOTE_ADDR"]);
- sendRequestToGoogleAnalytics($utmUrl);
- // If the debug parameter is on, add a header to the response that contains
- // the url that was used to contact Google Analytics.
- if (!empty($_GET["utmdebug"])) {
- header("X-GA-MOBILE-URL:" . $utmUrl);
- }
- // Finally write the gif data to the response.
- writeGifData();
- }
- ?><?php
- trackPageView();
- ?>