简单的PHP缓存超过3个部分

时间:2011-10-16 22:05:55

标签: php caching

简单的PHP缓存(带有ob_start和文件)中,我需要部分(更多 - 或等于每页3个)不缓存(.PHP动态内容或.PHP文件)基于上下文用户)。

+-----------------+
| CACHING CONTENT |
|                 |
+-----------------+
|   NO CACHING    |
+-----------------+
| CACHING CONTENT |
+-----------------+
|   NO CACHING    |
+-----------------+
|                 |
| CACHING CONTENT |
+-----------------+

我想要的“无缓存”部分包括动态内容。我可以在三个cached.html文件中缓存(选项1),但我更喜欢每个缓存页面只有一个文件(而不是3个页面,选项2)。缓存的最佳选择是什么?

  1. 缓存多个文件(head_tag.html,body_part1.html,body_part2.html,body_part3.html ...)和中间动态内容(files.php)。
  2. 缓存到唯一文件,其中一些标记用动态内容替换(并且......如何?)
  3. 其他
  4. 注意:请不要使用第三种系统解决方案(memcached,APC ......)。我需要基于PHP的选项。

2 个答案:

答案 0 :(得分:2)

您可以将占位符用于页面的非缓存部分,并缓存整个页面。例如,整个缓存页面可能如下所示:

<html>
... (static content)
#DYNAMIC-CONTENT-NAME#
... (static content)
#SECOND-DYNAMIC-CONTENT-PLACEHOLDER#
... (static content)
</html>

然后在PHP中,您只需获取此缓存页面并将所有占位符替换为动态内容。

// obtain the cached page from storage
$cached_page = get_cached_page();

// generate the HTML for the dynamic content
$dynamic_content = get_dynamic_content();

// replace the placeholders with the actual dynamic content
$page = str_replace('#DYNAMIC-CONTENT-NAME#', $dynamic_content, $cached_page);

// display the resulting page
echo $page;

这样,您可以根据需要放置任意数量的命名占位符,根据需要添加多个动态内容,然后只需用实际内容替换它们。

答案 1 :(得分:0)

使用直接php

有两种方法可以做到这一点

标题approch

$cachetime = 60 * 60 * 24 * 7; // 1 Week
header(‘Expires: ‘.gmdate(‘D, d M Y H:i:s’, time()+$expires).’GMT’);

或者通过在文件系统中缓存完整文件(包含动态内容中的包含/内容)(可用于缓存网站的部分内容)

<?php
  $cachefile = "cache/".$reqfilename.".html"; #change $reqfilename to $_SERVER['PHP_SELF'] if you are using in headers, footers, menus files
  $cachetime = 60 * 60 * 24 * 7; // 1 Week
  // Serve from the cache if it is younger than $cachetime
  if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile))) {
     include($cachefile);
     exit;
  }
  ob_start(); // start the output buffer
?>
.. Your usual PHP script and HTML here ...
<?php
   // open the cache file for writing
   $fp = fopen($cachefile, 'w'); 

   // save the contents of output buffer to the file
   fwrite($fp, ob_get_contents());
   // close the file
   fclose($fp); 
   // Send the output to the browser
   ob_end_flush(); 
?>

您还可以使用标头缓存用户计算机上的文件,或使用缓存信息更新htaccess。 htaccess实现可能会有所不同,具体取决于托管服务器上安装的模块。我用:

# Add Expiration
ExpiresActive On
ExpiresDefault "access plus 1 week"
ExpiresByType text/html "access plus 1 day"
ExpiresByType text/php "access plus 1 day"
ExpiresByType image/gif "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 week"
ExpiresByType image/png "access plus 1 week"
ExpiresByType text/css "access plus 1 week"
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType application/x-javascript "access plus 1 week"
ExpiresByType image/x-icon "access plus 1 week"
ExpiresByType image/ico "access plus 1 week"
ExpiresByType text/xml "access plus 1 day"