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 4 934 fois - 3 commentaires

3 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 :)

Écrit par Audit seo
Le 19/03/2020 à 09h49

Bonjour

Grand merci pour cet article, qui est très intéressant

Encore merci, les contenus de votre blog sont de qualité

Bien à vous

Mino

Écrire un commentaire

Pseudo

E-mail (non publié)

Votre commentaire

Recevoir une notification par e-mail lorsqu'une réponse est postée

Veuillez recopier le code de sécurité : 96nw8cz7rp

Haut de page