php 文件缓存区,PHP 文件缓存

/**

* 文件缓存类

* Class Cache

*/

class FileCache{

private static $Dir = './'; // 缓存的目录

private static $DirMode = 0777; // 文件夹权限

/**

* 设置缓存目录

* @param $dir string 缓存的目录

*/

public function Dir( $dir ){

if ( !is_dir( $dir ) ) {

mkdir( $dir, self::$DirMode, true );

}

self::$Dir = $dir;

}

/**

* 读取缓存文件

* @param $file string 缓存文件

* @param boolean 读取成功返回结果, 否则返回 false

*/

public function Read( $file ){

$filename = self::$Dir . $file;

if ( !file_exists( $filename ) ) {

return false;

}

// 读取缓存文件

if (!( $handle = @fopen( $filename, 'rb' ) ) ) {

return false;

}

// 跳过写入缓存文件保护代码

fgets( $handle );

// 取出序列化的缓存数据,并进行序列化恢复

$data = unserialize( fgets( $handle ) );

return $data;

}

/**

* 写入缓存文件

* @param $file string 写入缓存的文件名

* @param $data array, 需要进行缓存数据

* @param boolean 读取成功返回结果, 否则返回 false

*/

public function Write( $file, $data = array() ){

$filename = self::$Dir . $file;

// 尝试打开 $filename,如果文件不存在则创建

if ( $handle = @fopen( $filename, 'wb' ) ) {

// 取得独占锁定

@flock($handle, LOCK_EX);

// 缓存文件建议保存为 .php 格式

// 写入缓存文件保护代码

// 防止恶意访问该文件

fwrite( $handle, '' );

fwrite( $handle, "\n" );

// 序列化待缓存的数据

$data = serialize($data);

// 写入缓存数据

fwrite( $handle, $data );

// 释放锁定

@flock( $handle, LOCK_UN );

fclose( $handle );

return true;

}

return false;

}

/**

* 清除缓存文件

* @param array $fileArr 需要清除的缓存文件

* @param bool $filenameMode 完整文件名模式,为 true 时必须 $file 参数必须输入完整的文件名,用于清除不在同一文件夹下的缓存文件!

*

* 案例:

* Cache::Clear(array('file1'));//清除单条数据

* Cache::Clear(array('file1', 'file2', 'file3'));//清除多条数据,注意:必须在同一文件夹下

* Cache::Clear(array('../cache/file1', '../new/cache/file1'), true);//完整文件名模式

*/

public function Clear( $fileArr, $filenameMode = false ) {

if ( !is_array( $fileArr ) || empty( $fileArr ) ) {

return;

}

foreach ( $fileArr as $File ) {

if ( $filenameMode ) {

unlink( $File );

} else {

unlink(self::$Dir . $File);

}

}

}

}

###写入缓存

$data = array('aaa','bbb');

// 写入 ./cache/A.php

Cache::Dir('./cache/');

Cache::Write('A.php', $data);

// 写入 ./global_cache/B.php

Cache::Dir('./global_cache/');

Cache::Write('B.php', $data);

###读取缓存

// 读取./cache/A.php

Cache::Dir('./cache/');

print_r(Cache::Read('A.php'));

// 读取 ./cache/B.php

Cache::Dir('./global_cache/');

print_r(Cache::Read('B.php'));

###清除缓存

// 清除方法1

Cache::Dir('./cache/');

Cache::Clear(array('A.php'));

Cache::Dir('./global_cache/');

Cache::Clear(array('B.php'));

// 方法2

Cache::Clear(array('./cache/A.php', './global_cache/B.php'), true);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值