Le contenu actuel de this google docs page est:Comment puis-je forcer fopen() de PHP à retourner la version actuelle d'une page web?
alt text http://www.deviantsart.com/upload/i9k01q.png
Cependant, lors de la lecture cette page avec le PHP fopen() script suivant, je reçois un plus, en cache Version:
alt text http://www.deviantsart.com/upload/1ccdgn7.png
J'ai essayé deux solutions proposées dans this question (un attribut aléatoire et en utilisant POST) et j'ai également essayé clearstatcache() mais je reçois toujours la version mise en cache de la page Web.
Que dois-je modifier dans le script suivant afin que fopen() renvoie la version actuelle de la page Web?
<?php
$url = 'http://docs.google.com/View?id=dc7gj86r_32g68627ff&rand=' . getRandomDigits(10);
echo $url . '<hr/>';
echo loadFile($url);
function loadFile($sFilename) {
clearstatcache();
if (floatval(phpversion()) >= 4.3) {
$sData = file_get_contents($sFilename);
} else {
if (!file_exists($sFilename)) return -3;
$opts = array('http' =>
array(
'method' => 'POST',
'content'=>''
)
);
$context = stream_context_create($opts);
$rHandle = fopen($sFilename, 'r', $context);
if (!$rHandle) return -2;
$sData = '';
while(!feof($rHandle))
$sData .= fread($rHandle, filesize($sFilename));
fclose($rHandle);
}
return $sData;
}
function getRandomDigits($numberOfDigits) {
$r = "";
for($i=1; $i<=$numberOfDigits; $i++) {
$nr=rand(0,9);
$r .= $nr;
}
return $r;
}
?>
AJOUTÉE: prendre les $ opte et contexte $ me donne une page en cache ainsi:
function loadFile($sFilename) {
if (floatval(phpversion()) >= 4.3) {
$sData = file_get_contents($sFilename);
} else {
if (!file_exists($sFilename)) return -3;
$rHandle = fopen($sFilename, 'r');
if (!$rHandle) return -2;
$sData = '';
while(!feof($rHandle))
$sData .= fread($rHandle, filesize($sFilename));
fclose($rHandle);
}
return $sData;
}
AJOUTÉE: ce boucle de script qui envoie un agent utilisateur Firefox renvoie la version en cache également:
<?php
$url = 'http://docs.google.com/View?id=dc7gj86r_32g68627ff';
//$user_agent = 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)';
$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)';
$ch = curl_init();
//curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie");
//curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookie");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
echo curl_exec($ch);
?>
oui, je parie que vous utilisez Internet Explorer lorsque vous obtenez la version en cache ai-je raison? Je reçois la version actuelle dans Firefox et Chrome mais la version CACHED dans IE8, comme indiqué ici: http://stackoverflow.com/questions/2742258/why-direfire-chrome-show-a-different-page-than- ie8, alors sûrement, puisque Firefox et Chrome (webkit?) peuvent en effet obtenir la version actuelle, il doit y avoir une option dans fopen() pour forcer aussi google docs à donner une version actuelle. –
@Edward: Nope, en cours d'exécution Firefox 3.6.3 ici et je n'ai jamais visité cette URL avant avec un navigateur quelconque. Croyez-moi: ** c'est de votre faute **. –
@Edward: Avez-vous besoin de frapper ** CTRL + F5 dans Firefox et Chrome ** ?! –