$lastModified) { sendHeader(sprintf("%s 304 Not Modified", $_SERVER['SERVER_PROTOCOL'])); } else { sendHeader('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); sendHeader('Content-Type: application/javascript; charset=UTF-8'); if ($piwikJs = getContents($useCurl, $PIWIK_URL . 'piwik.js')) { echo $piwikJs; } else { sendHeader($_SERVER['SERVER_PROTOCOL'] . '505 Internal server error'); } } exit; } @ini_set('magic_quotes_runtime', 0); // 2) PIWIK.PHP PROXY: GET parameters found, this is a tracking request, we redirect it to Piwik $url = sprintf("%spiwik.php?cip=%s&token_auth=%s&", $PIWIK_URL, getVisitIp(), $TOKEN_AUTH); foreach ($_GET as $key => $value) { $url .= urlencode($key ). '=' . urlencode($value) . '&'; } sendHeader("Content-Type: image/gif"); $stream_options = array('http' => array( 'user_agent' => arrayValue($_SERVER, 'HTTP_USER_AGENT', ''), 'header' => sprintf("Accept-Language: %s\r\n", str_replace(array("\n", "\t", "\r"), "", arrayValue($_SERVER, 'HTTP_ACCEPT_LANGUAGE', ''))), 'timeout' => $timeout )); if (version_compare(PHP_VERSION, '5.3.0', '<')) { // PHP 5.2 breaks with the new 204 status code so we force returning the image every time echo getContents($useCurl, $url . '&send_image=1', $stream_options); } else { // PHP 5.3 and above $content = getContents($useCurl, $url, $stream_options); // Forward the HTTP response code if (!headers_sent() && isset($http_response_header[0])) { header($http_response_header[0]); } echo $content; } function getVisitIp() { $matchIp = '/^([0-9]{1,3}\.){3}[0-9]{1,3}$/'; $ipKeys = array( 'HTTP_X_FORWARDED_FOR', 'HTTP_CLIENT_IP', 'HTTP_CF_CONNECTING_IP', ); foreach($ipKeys as $ipKey) { if (isset($_SERVER[$ipKey]) && preg_match($matchIp, $_SERVER[$ipKey])) { return $_SERVER[$ipKey]; } } return arrayValue($_SERVER, 'REMOTE_ADDR'); }