Astuce Piwik PHP 5.6 et HTTPS

Astuce Piwik PHP 5.6 et HTTPS

Si vous utilisez Piwik pour suivre les statistiques de vos sites Internet, vous risquez d'être confronté à un problème dès lors que vous suivez plusieurs sites Internet dans un seul outil d'administration Piwik.

Dysfonctionnement avec PHP 5.6 et HTTPS

Comme expliqué dans mon tutoriel pour masquer Piwik des regards indiscrets, vous avez déposé un fichier hack pour interroger la base de données à distance.

Ce fichier fonctionne correctement s'il le site source, celui qui contient tout le script de Piwik, utilise le protocole HTTP. Mais si comme moi vous utilisez le protocole HTTPS, et ceci sur une version de PHP 5.6 ou supérieur, l'accès n'est plus possible au site source. Si vous analysez les logs, vous verrez un message lié à l'interrogation du certificat SSL qui ne fonctionne plus.

Voici donc un petit bout de code pour corriger le fichier et éviter d'avoir vos stats à 0. Sinon, c'est la crise cardiaque assurée au réveil en consultant les statistiques. Ouvrez le fichier piwik.php installé sur le(s) site(s) cible(s).

Après :

sendHeader('Content-Type: application/javascript; charset=UTF-8');

Ajouter :

$arrContextOptions=array("ssl"=>array(
	"verify_peer"=>false,
	"verify_peer_name"=>false,
),);

Remplacer :

if ($piwikJs = @file_get_contents($PIWIK_URL . 'piwik.js')) {

Par :

if ($piwikJs = @file_get_contents($PIWIK_URL . 'piwik.js', false, stream_context_create($arrContextOptions))) {

Remplacer :

$stream_options = array('http' => array(
    'user_agent' => arrayValue($_SERVER, 'HTTP_USER_AGENT', ''),
    'header'     => sprintf("Accept-Language: %srn", str_replace(array("n", "t", "r"), "", arrayValue($_SERVER, 'HTTP_ACCEPT_LANGUAGE', ''))),
    'timeout'    => $timeout
));

Par :

$stream_options = array('http' => array(
    'user_agent' => arrayValue($_SERVER, 'HTTP_USER_AGENT', ''),
    'header'     => sprintf("Accept-Language: %srn", str_replace(array("n", "t", "r"), "", arrayValue($_SERVER, 'HTTP_ACCEPT_LANGUAGE', ''))),
    'timeout'    => $timeout
),
"ssl"=>array(
    "verify_peer"=>false,
    "verify_peer_name"=>false,
));

Remplacer :

echo file_get_contents($url . '&send_image=1', 0, $ctx);

Par :

echo file_get_contents($url . '&send_image=1', false, $ctx);

Remplacer :

$content = file_get_contents($url, 0, $ctx);

Par :

$content = file_get_contents($url, false, $ctx);

Avec cette modification, tout fonctionnera à nouveau. Passez de bonnes fêtes de fin d'année. ;)

Catégorie Tutoriels - Écrit par le 22/12/2015 - Article lu 997 fois - 2 commentaires

2 réflexions sur ce billet

Écrit par Olivia
Le 22/02/2016 à 14h25

Bonjour,

Merci pour les lignes de code car je suis également en HTTPS et j'utilise le gourmand Piwik et je me demandais pourquoi ça ne fonctionnait pas.

Merci beaucoup pour ce partage

Écrit par Victor Pluggd
Le 23/03/2016 à 21h29

Bonjour, est-ce que Piwik est plus fiable que Analytics selon toi ? N'est il pas pollué par les spams referer comme l'est Analytics ? Car ceci plus le taux de rebonds que je comprends de moins en moins, il me faudrait peut d'argument positif pour passer à une alternative :)

Les commentaires de ce billet sont fermés

Haut de page