2017-08-07 1 views
0

Ich versuche, Download-Daten für einen Podcast zu sammeln. Wenn die MP3-Datei einer Folge angefordert wird, möchte ich diese in meinem Google Analytics-Konto erfassen.Wie in. Htaccess gebe ich die angeforderte Datei zurück, aber dann ein PHP-Skript ausführen?

Ich habe Stack Overflow-Artikel gefunden, die zeigen, wie eine Anfrage an ein PHP-Skript umgeleitet wird, das die Daten an Google Analytics weiterleitet und dann die .mp3-Datei zurückgibt, aus irgendeinem Grund jedoch in Safari und iOS funktioniert in Chrome).

Dies ist, was ich für die .htaccess-Datei wurde mit:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule (.*).(mp3) download.php?file=$1.$2 [R,L] 
</IfModule> 
# END WordPress 

Also ich frage mich, ob es einen Weg, um Skript meine .htaccess-Datei ist die Datei normalerweise zurück, aber dann meine download.php nennen Skript, das nur das Tracking von Google Analytics verarbeitet. Wenn es aus irgendeinem Grund fehlschlägt, beeinträchtigt dies nicht die Person, die die Datei abgehört.

Danke!

Antwort

0

Sie könnten versuchen, ein Skript einzurichten, das Daten an die Google Analytics-Serverseite über sendet, möglicherweise mit cURL, und die Datei mit passenden Headern versorgt, so dass keine Umleitung erforderlich ist.

download.php:

<?php 

$filename = $_GET['file']; 

$data = array('v'=>'1', 
       'tid'=>'UA-XXXXX-Y', 
       'cid'=>'555', 
       't'=>'event', 
       'ec'=>'sound' 
       'ea'=>'download' 
       'el'=>$filename); 
$url = 'https://google-analytics.com/collect'; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_exec($ch); 

if(file_exists($filename)) { 
    header('Content-Type: audio/mpeg'); 
    header('Content-Disposition: filename="test.mp3"'); 
    header('Content-length: '.filesize($filename)); 
    header('Cache-Control: no-cache'); 
    header("Content-Transfer-Encoding: chunked"); 

    readfile($filename); 
} else { 
    header("HTTP/1.0 404 Not Found"); 
} 

Alternativ können Sie versuchen, Apache Parsen Zugriffsprotokolle mit einem Cron-Job-Skript, aber das scheint Speicher aufwendig und zu kompliziert.

EDIT: ich in GAMP-Code hinzugefügt und über die Syntax geändert mehr positiv sein

Verwandte Themen