的當前內容的this google docs page是:如何強制PHP的fopen()返回當前版本的網頁?
alt text http://www.deviantsart.com/upload/i9k01q.png
然而,閱讀此頁用下面的PHP時fopen()函數腳本,我得到一個老,緩存版本:
alt text http://www.deviantsart.com/upload/1ccdgn7.png
我試過兩種解決方案,建議在this question(隨機屬性和使用POST),我也試過clearstatcache()但我總是得到緩存版本的網頁。
我必須在下面的腳本中更改什麼,以便fopen()返回當前版本的網頁?
<?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;
}
?>
新增:取出$選擇採用和$背景給了我一個緩存的頁面,以及:
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;
}
新增:此捲曲腳本,它發送一個Firefox用戶代理還返回緩存版本:
<?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);
?>
是的,我敢打賭,當您獲得緩存版本時,您正在使用Internet Explorer,對不對?我在Firefox和Chrome中獲得CURRENT版本,但在IE8中獲得CACHED版本,如下所示:http://stackoverflow.com/questions/2742258/why-do-firefox-chrome-show-a-different-page-than- ie8,肯定的,因爲Firefox和Chrome(webkit?)確實可以獲得當前版本,所以在fopen()中必須有一些選項來強制google文檔提供當前版本。 – 2010-05-02 03:07:14
@Edward:Nope,在這裏運行Firefox 3.6.3,之前我從來沒有用任何瀏覽器訪問過這個URL。相信我:**這是你的錯**。 – 2010-05-02 03:12:04
@愛德華:你有沒有在Firefox和Chrome中點擊CTRL + F5 **? – 2010-05-02 03:17:50