2010-05-02 79 views
0

當前內容的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&amp;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); 
?> 

回答

1

我也得到這樣的:

Test One;http://docs.google.com/View?id=dc7gj86r_30dzgzbjch 
Test Two;http://docs.google.com/View?id=dc7gj86r_31dbssfrzx 

的「緩存」必須在谷歌文檔被正在做的,或者更可能的是,它是你的錯(網址有誤?)。


響應頭:

Set-Cookie: ****** 
Content-Type: text/html; charset=UTF-8 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Pragma: no-cache 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Date: Sun, 02 May 2010 03:30:29 GMT 
X-Frame-Options: ALLOWALL 
Content-Encoding: gzip 
X-Content-Type-Options: nosniff 
X-XSS-Protection: 1; mode=block 
Content-Length: 3987 
Server: GSE 
+0

是的,我敢打賭,當您獲得緩存版本時,您正在使用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

+0

@Edward:Nope,在這裏運行Firefox 3.6.3,之前我從來沒有用任何瀏覽器訪問過這個URL。相信我:**這是你的錯**。 – 2010-05-02 03:12:04

+0

@愛德華:你有沒有在Firefox和Chrome中點擊CTRL + F5 **? – 2010-05-02 03:17:50

1

儘量確保你的瀏覽器不緩存信息。我沒有看到任何緩存標題或任何內容。您的網絡服務器可能會添加一些內容,或者您​​的瀏覽器可能會假設它已被緩存。嘗試在輸出中包含時間,以確保請求是在正確的時間生成的。

我在很多年前用fopen來更新數據,經常更新。從來沒有遇到與fopen緩存問題。事實上,如果PHP開發人員添加一個Web緩存來打開它,將會破壞大部分有效的用例,而且它不在它們的文檔中,我會感到失望。我會去看看PHP源代碼,以確保。

你可以更新文件,以便我們有些人可以嘗試複製嗎?

+1

謝謝,我再次更新了文檔,但fopen()腳本與我的瀏覽器無關,我確定我可以在Internet Explorer中找到一些設置來清除其緩存,以便它顯示當前版本爲我的Firefox和Chrome可以做,但我需要的是腳本,顯然谷歌文檔正在做某種選擇性緩存,但我想知道的是爲什麼它給了我的Firefox瀏覽器一個新版本,但我的(剛剛添加)捲曲腳本上面有一個Firefox版本的用戶代理,還有哪些curl/fopen中的其他設置可以更改爲強制新版本? – 2010-05-02 03:21:04

+0

看到我的其他答案,但基本上這是確保問題不是你的電腦緩存你製作的腳本(不是谷歌文檔頁面) – Reece45 2010-05-02 03:43:15

2

我已經成功地轉載了此內容。如果您不是發佈的網頁文檔的所有者,Google會進行緩存。如果你註銷,它給了我舊版本。

在我取消發佈並重新發布之後,我無法再重現此問題。確保您在更新文檔時將文檔保留在「以網頁形式共享」下。

只要確認,檢入未登錄的瀏覽器(或腳本)即可。如果不更新:取消發佈並再次發佈。它沒有改變我的網址。

+0

+1,Nice。他的Firefox和Chrome瀏覽器設置了Cookie。它必須是與Google相關的內容或與Google相關的內容,或者在這兩種情況下。 – 2010-05-02 03:45:07