Skip to content
Extraits de code Groupes Projets
Valider 52512163 rédigé par Matthieu Napoli's avatar Matthieu Napoli
Parcourir les fichiers

#6788 Removed the tracker proxy (moved to a separate repository)

parent e6aa8ee2
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
## Piwik Proxy Hide URL
This script allows to track statistics using Piwik, without revealing the
Piwik Server URL. This is useful for users who track multiple websites
on the same Piwik server, but don't want to show the Piwik server URL in
the source code of all tracked websites.
# Piwik Proxy Hide URL
### Requirements
To run this properly you will need
* Piwik server latest version
* One or several website(s) to track with this Piwik server, for example http://trackedsite.com
* The website to track must run on a server with PHP5 support
* In your php.ini you must check that the following is set: `allow_url_fopen = On`
### How to track trackedsite.com in your Piwik without revealing the Piwik server URL?
1. In your Piwik server, login as Super user
2. create a user, set the login for example: "UserTrackingAPI"
3. Assign this user "admin" permission on all websites you wish to track without showing the Piwik URL
4. Copy the "token_auth" for this user, and paste it below in this file, in `$TOKEN_AUTH = "xyz"`
5. In this file, below this help test, edit $PIWIK_URL variable and change http://your-piwik-domain.example.org/piwik/ with the URL to your Piwik server.
6. Upload this modified piwik.php file in the website root directory, for example at: http://trackedsite.com/piwik.php
This file (http://trackedsite.com/piwik.php) will be called by the Piwik Javascript,
instead of calling directly the (secret) Piwik Server URL (http://your-piwik-domain.example.org/piwik/).
7. You now need to add the modified Piwik Javascript Code to the footer of your pages at http://trackedsite.com/
Go to Piwik > Settings > Websites > Show Javascript Tracking Code.
Copy the Javascript snippet. Then, edit this code and change the last lines to the following:
```
[...]
(function() {
var u="//trackedsite.com/";
_paq.push(["setTrackerUrl", u+"piwik.php"]);
_paq.push(["setSiteId", "trackedsite-id"]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0];
g.type="text/javascript"; g.async=true; g.defer=true; g.src=u+"piwik.php"; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Piwik Code -->
```
What's changed in this code snippet compared to the normal Piwik code?
* the (secret) Piwik URL is now replaced by your website URL
* the "piwik.js" becomes "piwik.php" because this piwik.php proxy script will also display and proxy the Javascript file
* the `<noscript>` part of the code at the end is removed,
since it is not currently used by Piwik, and it contains the (secret) Piwik URL which you want to hide.
* make sure to replace trackedsite-id with your idsite again.
8. Paste the modified Piwik Javascript code in your website "trackedsite.com" pages you wish to track.
This modified Javascript Code will then track visits/pages/conversions by calling trackedsite.com/piwik.php
which will then automatically call your (hidden) Piwik Server URL.
9. Done!
At this stage, example.com should be tracked by your Piwik without showing the Piwik server URL.
Repeat the steps 6, 7 and 8 for each website you wish to track in Piwik.
The proxy script has been moved to [piwik/tracker-proxy](https://github.com/piwik/tracker-proxy).
<?php
/**
* Piwik - free/libre analytics platform
* Piwik Proxy Hide URL
*
* @link http://piwik.org/faq/how-to/#faq_132
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
// -----
// Important: read the instructions in README.md or at:
// https://github.com/piwik/piwik/tree/master/misc/proxy-hide-piwik-url#piwik-proxy-hide-url
// -----
// Edit the line below, and replace http://your-piwik-domain.example.org/piwik/
// with your Piwik URL ending with a slash.
// This URL will never be revealed to visitors or search engines.
$PIWIK_URL = 'http://your-piwik-domain.example.org/piwik/';
// Edit the line below, and replace xyz by the token_auth for the user "UserTrackingAPI"
// which you created when you followed instructions above.
$TOKEN_AUTH = 'xyz';
// Maximum time, in seconds, to wait for the Piwik server to return the 1*1 GIF
$timeout = 5;
function sendHeader($header, $replace = true)
{
headers_sent() || header($header, $replace);
}
function arrayValue($array, $key, $value = null)
{
if (!empty($array[$key])) {
$value = $array[$key];
}
return $value;
}
// DO NOT MODIFY BELOW
// ---------------------------
// 1) PIWIK.JS PROXY: No _GET parameter, we serve the JS file
if (empty($_GET)) {
$modifiedSince = false;
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$modifiedSince = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
// strip any trailing data appended to header
if (false !== ($semicolon = strpos($modifiedSince, ';'))) {
$modifiedSince = strtotime(substr($modifiedSince, 0, $semicolon));
}
}
// Re-download the piwik.js once a day maximum
$lastModified = time() - 86400;
// set HTTP response headers
sendHeader('Vary: Accept-Encoding');
// Returns 304 if not modified since
if (!empty($modifiedSince) && $modifiedSince < $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 = file_get_contents($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
));
$ctx = stream_context_create($stream_options);
echo file_get_contents($url, 0, $ctx);
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');
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter