PHP开发也有几个月了,感觉php缓存是很重要的一块,无论是页面级的(主要指smarty)还是dao级的。使用上还不怎么熟,但还是记录下笔记。本篇讲述的缓存是写到磁盘文件,这是看piwik源码时看到的,感觉思想很好,这也得益于PHP的var_export 方法。主要把要保存的内容(int,string,也可以使array)保存为php文件,这样当include这个php文件后,保存的内容就自动当做变量被include进来了。
源码如下:
<?php
class Piwik_CacheFile
{
protected $cachePath;
protected $cachePrefix;
function __construct($directory)
{
$this->cachePath = PIWIK_USER_PATH . '/tmp/cache/' . $directory . '/';
}
function get($id)
{
$cache_complete = false;
$content = '';
// We are assuming that most of the time cache will exists
$ok = @include($this->cachePath . $id . '.php');
if ($ok && $cache_complete == true) {
return $content;
}
return false;
}
function set($id, $content)
{
if( !is_dir($this->cachePath))
{
Piwik_Common::mkdir($this->cachePath);
}
if (!is_writable($this->cachePath)) {
return false;
}
$id = $this->cachePath . $id . '.php';
$cache_literal = "<"."?php\n\n";
$cache_literal .= "$"."content = ".var_export($content, true).";\n\n";
$cache_literal .= "$"."cache_complete = true;\n\n";
$cache_literal .= "?".">";
// Write cache to a temp file, then rename it, overwritng the old cache
// On *nix systems this should guarantee atomicity
$tmp_filename = tempnam($this->cachePath, 'tmp_');
if ($fp = @fopen($tmp_filename, 'wb')) {
@fwrite ($fp, $cache_literal, strlen($cache_literal));
@fclose ($fp);
if (!@rename($tmp_filename, $id)) {
// On some systems rename() doesn't overwrite destination
@unlink($id);
if (!@rename($tmp_filename, $id)) {
// Make sure that no temporary file is left over
// if the destination is not writable
@unlink($tmp_filename);
}
}
return true;
}
return false;
}
function delete($id)
{
$filename = $this->cachePath . $id . '.php';
if (file_exists($filename)) {
@unlink ($filename);
return true;
}
return false;
}
}
分享到:
相关推荐
Laravel Page Cache 该软件包允许您轻松地将响应缓存为磁盘上的静态文件,以便快速进行页面加载
Laravel页面缓存 该软件包使您可以轻松地将响应作为静态文件缓存在磁盘上,以实现快速的页面加载。 介绍尽管如今静态网站建设者(例如Jekyll和Jigsaw)非常受欢迎,但动态PHP网站仍然为大多数静态网站提供了很多价值...
is_dir(),is_link(),filectime(),fileatime(),filemtime(),fileinode(),filegroup(),fileowner(),filesize(),filetype() , fileperms() 解决办法:在使用这些函数前,使用clearstatcache ( ) 清除缓存带来...
前言 顾名思义文件缓存转内存缓存就是将存储在文件中的数据转到内存中去,实现磁盘操作转为内存操作,这样可以大大提高数据访问速度,并能实现缓存数据的分布式部署。文件缓存与内存缓存的介绍请参考名词解释部分。 ...
php-dba-cache使用数据库(dbm样式)抽象层来缓存/存储您PHP对象,字符串,整数或数组。 甚至SimpleXMLElement的实例都可以放入缓存中。 您不必担心缓存文件的大小。 这取决于磁盘的可用空间。 具有持久连接的Oracle...
根据服务器环境和可用资源,应用程序可以使用以下缓存适配器之一: APC(缓存服务) 文件(磁盘上的目录) Memcache(缓存服务) Redis(缓存服务) 会话(会话中的短期缓存) db(数据库缓存) pop-cache是的组件...
直接从当前位置运行,缓存移到 0x80000。驻留内存精简到 4 Kb。 2.支持有碎片的文件仿真,最多 8 个片段。占用 11Kb - 13Kb 内存(由是否加载光驱确定)。 3.支持 WinXP 系统的短文件名小写。根据短文件名偏移 0x0...
众多磁盘缓存数据转为内存缓存。 9.修改了时间插件的样式控制代码,不受外界CSS的影响。 10.修正cache类在Unix系统下无法建立缓存文件的bug。 11.修正了sql缓存对预处理语句造成取值的重复,取消了预处理的语句。 12...
新的IO组件在处理磁盘中的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件...
通过启用Opcache的缓存优化,将PHP代码预编译为Opcode缓存到共享内存中供进程反复调用,从而减少了重复从磁盘解析PHP代码的时间消耗,显著的提高了PHP性能,提升了业务性能的调用,但是也引发了一些问题,就是我们每次更新...
eAccelerator/1.0_svn427 PHP加速器,优化程序,编码器和动态内容缓存。 Zend Optimizer/3.3.3 优化代码,提高PHP应用程序的执行速度,显著降低服务器的CPU负载。 memcached.exe/1.2.6 memcached内存对象缓存系统...
本程序仅对首页进行缓存,由于总磁力链接数达300万以上,磁力详情页缓存可会占用大量磁盘空间V1.0版,暂不提供缓存。 三、目录说明 -| | | config.php 配置文件,使用前请先修改 | | function.php ...
Optimizer+ 将 PHP 代码预编译生成的脚本文件 Opcode 缓存在共享内存中供以后反复使用,从而避免了从磁盘读取代码再次编译的时间消耗。同时,它还应用了一些代码优化模式,使得代码执行更快。从而加速 PHP 的执行。 ...
本篇文章是对PHP输出缓存(output_buffering)的使用进行了详细的分析介绍,需要的朋友参考下
这是一个对象,代表将物理存储数据的位置(数据库,Memcached,磁盘上的文件等)。 您将在找到所有要点。 对于以下示例,假设我们在变量$storage具有别名Cache和$storage 。 use Nette \ Caching \ Cache ; $ ...
它可以管理您的会话数据,而无需在Web或数据库服务器上执行磁盘I / O。 您也可以将其作为网站的中央对象存储来运行。 在此角色下,它通过使用Memcache的“ get”和“ set”命令实现缓存,用于使用Doctrine缓存支持...
不用重启服务器,自动添加了php的web服务扩展(isapi),打开了相关支持isapi的iis扩展,自动创建了phpmyadmin管理网站(默认端口为8080),自动添加iis的isapi缓存扩展,自动设置了php安装目录权限(要求磁盘为ntfs格式)详细...
新的IO组件在处理磁盘中的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件...
新的IO组件在处理磁盘中的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件...