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
- Gildas le 04/03/2022 à 18:00
Nop j'ai que le require('fpdf.php) ; Mais pas... - Hervé le 04/03/2022 à 17:58
Gildas Tu n'appelles pas de fichier externe via un... - Gildas le 04/03/2022 à 17:50
merci de ton retour rapide, effectivement dans ma... - Hervé le 04/03/2022 à 17:45
Bonjour Gildas Effectivement, 8 ans ça fait un bail.... - Gildas le 04/03/2022 à 17:37
Bonjour Hervé, Bon j'arrive 8 ans après la... - Olivier le 16/01/2022 à 23:09
C'est clair que les actions réalisées ne correspondent...