簡體   English   中英

如何在 PHP 中緩存 web 頁面?

[英]How do I cache a web page in PHP?

如何在 php 中緩存 web 頁面,以便如果頁面尚未更新,查看者應該獲得緩存副本?

謝謝你的幫助。 PS:我是 php 的初學者。

實際上,您可以在結束腳本之前保存頁面的輸出,然后在腳本的開頭加載緩存。

示例代碼:

<?php

$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache
$cachetime = 3600; // time to cache in seconds

if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){
  $c = @file_get_contents($cf);
  echo $c;
  exit;
}else{
  unlink($cachefile);
}

ob_start();

// all the coding goes here

$c = ob_get_contents();
file_put_contents($cachefile);

?>

如果您有很多需要此緩存的頁面,您可以這樣做:

cachestart.php

<?php
$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache
$cachetime = 3600; // time to cache in seconds

if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){
  $c = @file_get_contents($cf);
  echo $c;
  exit;
}else{
  unlink($cachefile);
}

ob_start();
?>

cacheend.php

<?php

$c = ob_get_contents();
file_put_contents($cachefile);

?>

然后只需添加即可

include('cachestart.php');

在腳本的開頭。 並添加

include('cacheend.php');

在腳本的最后。 記住要有一個名為cache的文件夾,並允許PHP訪問它。

另外請記住,如果您正在進行整頁緩存,那么您的頁面不應該具有特定於SESSION的顯示(例如,顯示成員的欄或什么),因為它們也將被緩存。 查看特定緩存的框架(變量或頁面的一部分)。

除了mauris的回答,我想指出這一點:

使用緩存時必須小心。 當你有動態數據時(當你使用php而不是靜態html時應該是這種情況),那么當相應的數據發生變化時你必須使緩存無效。

根據您的動態數據類型,這可能非常簡單或非常棘手。

更新

如何使緩存失效取決於具體的緩存類型。 您必須知道哪些緩存文件屬於哪個頁面(可能還有用戶輸入)。 數據更改時,您應刪除緩存的文件或從緩存數據結構中刪除頁面輸出。

在不知道您使用哪種實現進行緩存的情況下,我無法向您提供有關該信息的更多詳細信息。

其他人建議例如Pear包或memcached。 它們具有在數據更改時使整個緩存或其部分無效的必要功能。

$c = ob_get_contents();
file_put_contents($cachefile);

是的

$c = ob_get_contents();
file_put_contents($cachefile,$c);

否則腳本將無法正常工作。

使用memcached 有關於如何在該網站上進行此操作的說明。

使用Squid或正確更新HTTP標頭以執行瀏覽器緩存。 我沒有看到需要根據問題旋轉自己的緩存版本。

PEAR有一個緩存包(實際上是兩個):

http://pear.php.net/package/Cache
http://pear.php.net/package/Cache_Lite適用於較小的應用

我曾經使用Cache包(第一個)進行查詢緩存,當時它完成了我記憶中的工作。

向世界致敬! 評論 savoir si les données sont à chaque fois mise à jour dans le cache ou pas sachant que le fichier est bien crée

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM