Nasıl bir web sayfasının güncel sürümünü dönmek için PHP'nin fopen () zorlayabilirsiniz?

3 Cevap php

this google docs page ve current içeriği şöyledir:

alt text

Aşağıdaki PHP fopen() komut ile bu sayfayı okurken Ancak, ben bir older, cached sürümünü almak:

alt text

I this question önerilen iki çözüm (rastgele bir nitelik ve POST kullanarak) denedim ve ben de clearstatcache() çalıştı ama her zaman web sayfasının önbelleğe alınmış sürümünü almak.

What do I have to change in the following script so that fopen() returns the current version of the web page?

<?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;
}

?>

EKLENDİ: $opts ve $context yaptırmayı bana önbelleğe alınmış sayfa verir gibi:

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;
}

EKLENDİ: Firefox kullanıcı ajan gönderir bu curl komut yanı önbelleğe alınmış sürümünü döndürür:

<?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);
?>

3 Cevap

Ben de bu olsun:

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

"Önbelleğe alma" daha büyük olasılıkla, bu senin hatan, Google Docs yapılan veya olması gerekir (yanlış URL?).


Response headers:

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

Ben başarıyla bu çoğaltılamaz. Eğer yayınlanan web belgesinin sahibi değilken Google önbelleğe IS. Oturumu, bu bana eski sürümü verdi.

Onu yayımlanmamış ve yayınlanamaz sonra, ben artık sorunu yeniden olabilir. Eğer bunu güncellemek zaman "Web Sayfası Olarak Paylaş" altında belgeyi yayınlama tutmak emin olun.

Just in (veya script) günlüğe bir tarayıcıyı kontrol, emin olun. Bu güncelleme vermezse: yayından ve tekrar yayımlamak. Benim için URL değişmedi.

Emin tarayıcı bilgileri önbelleğe değildir yapmayı deneyin. Ben herhangi bir önbellek başlıklarını ya da bir şey göremiyorum. Webserverınız şey ekleyerek olabilir, veya tarayıcı önbelleğe varsayarak olabilir. Eğer isteği doğru zamanda oluşturulan emin olun, böylece çıkışı ile zaman dahil deneyin.

Ben sık sık güncellenen veriler için fopen yıl önce kullanılmıştır. Fopen ile bir önbellek sorun koştu asla. PHP geliştiricileri geçerli kullanım-vakaların çoğu bozacağını VE kendi belgelerinde olmadığı gibi fopen bir web önbelleği ekledi Aslında, ben hayal kırıklığı olacaktır. Ben gidip sadece emin olmak için PHP kaynak kodu bakacağız.

Bazılarımız üreyen deneyebilirsiniz böylece belgeyi güncelleme yapabilir miyim?