// die Whitelist
$whitelist = array(
'diswinamp','displs','diswmp','disreal','disflash',
'itawinamp','itapls','itawmp','itareal','itaflash',
'oldwinamp','oldpls','oldwmp','oldreal','oldflash'
);
// hier sind die echten Streamlinks eingetragen
$streamlinksPath = 'data/links.txt';
// der Pfad zu der Counter-Datei
$counterPath = 'data/counter.txt';
// die Datei, die für das lock zuständig ist
$filelockPath = 'data/counter.lock';
// Schreibversuche - man kann's wenigstens probieren
$writeRetries = 100;
// die StreamID, damit nicht immer $_GET geschrieben werden muss
$streamID = trim($_GET['id']);
// die dazu gehörenden URL - noch auf keinem Wert
$streamURL = false;
// wir prüfen auf Abbruchbedingen sofort zu Anfang
if ($streamID !== "" && in_array($streamID, $whitelist)) {
if (($streams = file($streamlinksPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)) !== false) {
// wir suchen die URL zur streamID
foreach ($streams as $stream) {
list($t_streamID, $t_streamURL) = explode('|', $stream);
if ($t_streamID === $streamID) {
$streamURL = $t_streamURL;
}
}
// wenn ein Stream gefunden wurde
if ($streamURL !== false) {
// Versuche starten
for($i=0,$written=false; ($i<$writeRetries && $written===false); $i++) {
// wir probieren durch, ob die Lock-Datei existiert oder ob wir sie löschen können
if ((!file_exists($filelockPath) || @unlink($filelockPath)) {
// öffne die Lock-Datei zum Schreiben bzw. erstelle diese. Sollte die Datei wider erwarten wieder existieren, wird abgebrochen
if ($filelockHandle = @fopen($filelockPath, 'xb')) !== false) {
// Schleife kann nach diesem Durchlauf beendet werden
$written = true;
// öffne den Counter zum lesen und schreiben
$counterHandle = fopen($counterPath, 'c+');
$counterLines = array();
// die Daten lesen
while (!feof($counterHandle)) {
$counterLines[] = fgets($counterHandle);
}
// Datei leeren
ftruncate($counterHandle,0);
// Datei-Pointer zurücksetzen
fseek($counterHandle,0);
// und die Zeilen wieder schreiben
foreach ($counterLines as $line) {
$expLine = explode("|", $line);
if ($expLine[0] === $streamID) {
$count = intval($expLine[1]) + 1;
$line = $streamID . '|' . $count . '|' . date('d.m.y.') . '|' . date('H:i') . "\n";
}
fputs($counterHandle, $line);
}
// brav alle Handles schliessen
fclose($counterHandle);
fclose($filelockHandle);
// die Lock-Datei löschen und so den (das?) lock freigeben
@unlink($filelockPath);
}
}
}
// Header senden
header('Location: ' . $streamURL);
header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0');
exit();
}
}
}
// Wenn alle Stricke reissen
header('Location: http://www.domain.eu');
exit();