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. ;)
3 réflexions sur ce billet

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

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

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
La création de site Internet sur mesure est le coeur de métier de l'agence web Infini'click.
D'autres prestations sont également proposées, découvrez-les !
- Tutoriel : installer un serveur Debian (wheezy)
- Tutoriel : Installer un certificat SSL
- Piwik : monitorez tous vos sites discrètement
- Tutoriel Paypal : Intégration et configuration du paiement en ligne
- Tutoriel PayPlug : intégration au panier d'achat
- Référencement des images : l'état de l'art
- Des onglets en CSS avec JQuery
- Moundzele Ray le 19/08/2020 à 08:59
Bonjour !Quelle magnifique tutoriel et une explication sublime.... - Audit seo le 19/03/2020 à 09:49
Bonjour Grand merci pour cet article, qui est très... - Mamy le 15/01/2020 à 08:46
Merci à vous pour ce tuto... - Laurent-du-78 le 06/09/2019 à 11:32
5 ans après, ce tuto est toujours d'actualité... - misterlight le 21/05/2019 à 16:14
Je tiens à vous remercier pour ce tutoriel... - Safi le 13/05/2019 à 01:06
Génial, tout fonctionne, merci infiniment !...