2017-11-20 17 views
1

Ich versuche Gamers Daten aus gamercard.xbox.com mit meinem kleinen Skript zu holen:file_get_contents die Daten nicht aktualisiert

test.php

<?php 
error_reporting(E_ALL); ini_set('display_errors', 1); 

$regex = '/<div id=\"Gamerscore\">(.+?)<\/div>/'; 
$gamertag = 'Stallion83'; 

try { 
    $URL = file_get_contents('http://gamercard.xbox.com/en-US/' . $gamertag . '.card'); 

    if ($URL == false) { 
     echo 'Error!'; 
    } 
} catch (Exception $e) { 
    echo $e; 
} 

preg_match($regex, $URL, $gs); 

// Extract integer value from string 
$gamerscore = filter_var($gs[1], FILTER_SANITIZE_NUMBER_INT); 

// Force gs_int to be integer so it can be used with number_format later 
$gs_int = (int)$gamerscore; 

$textFile = 'data/gamerscore_' . $gamertag . '.txt'; 

// Save gamerscore value into everyone's own txt file 
file_put_contents($textFile, $gs_int); 
?> 

Jetzt funktioniert dies und es Erstellt eine TXT-Datei im Datenordner, der nur die Spielernummer enthält. Aber mein Problem ist, wenn ich das Skript erneut ausführe, nachdem der Gamerscore-Wert gestiegen ist, gibt das Skript mir keine Fehler und es scheint gut auszuführen, aber der Gamerscore-Wert, den es in der .txt-Datei speichert, ist der alte Wert.

Ich kann auf die URL http://gamercard.xbox.com/en-US/Stallion83.card gehen und sehen, die Nummer ist anders als mein Skript zeigt.

Ich dachte, es könnte ein Caching-Problem sein, aber ich denke, file_get_contents verwendet kein Caching.

Gibt es noch etwas, das ich für file_get_contents einstellen könnte, um zu erzwingen, dass der neueste Inhalt der angegebenen URL abgerufen wird? Ich versuchte Timeout zu verwenden, aber es machte keinen Unterschied.

+0

gerade ein anderes Problem zu berücksichtigen: vielleicht die Datei nicht mit dem neuen Wert (aus irgendeinem Grunde) gespeichert wird. – FirstOne

+0

Echoing $ gamerscore oder $ gs_int gibt immer noch den alten Wert – user1589375

+0

Vielleicht ist es eine serverseitige Zwischenspeicherung. – FirstOne

Antwort

1

Dies wird höchstwahrscheinlich durch Cache verursacht. In diesem Fall scheint der Serverzu sein, der eine zwischengespeicherte Version der Seite zurückgibt.

Häufig kann das Hinzufügen eines zufälligen Werts zur URL eine Problemumgehung sein, z. B. ?foo.

Also, in Ihrem Fall, so etwas wie:

[...] . $gamertag . 'card?' . mt_rand()); 
Verwandte Themen