在简单的PHP缓存(带有ob_start和文件)中,我需要部分(更多 - 或等于每页3个)不缓存(.PHP动态内容或.PHP文件)基于上下文用户)。
+-----------------+
| CACHING CONTENT |
| |
+-----------------+
| NO CACHING |
+-----------------+
| CACHING CONTENT |
+-----------------+
| NO CACHING |
+-----------------+
| |
| CACHING CONTENT |
+-----------------+
我想要的“无缓存”部分包括动态内容。我可以在三个cached.html文件中缓存(选项1),但我更喜欢每个缓存页面只有一个文件(而不是3个页面,选项2)。缓存的最佳选择是什么?
注意:请不要使用第三种系统解决方案(memcached,APC ......)。我需要基于PHP的选项。
答案 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"