深入PHP数据缓存的使用说明


Posted in PHP onMay 10, 2013
<?php
// https://3water.com/article/23093.htm
function set_cache($name, $value) {
    // 设置相对或者绝对目录,末尾不要加 "/"
    $cache_dir = "./cache";
    // 设置扩展名
    $cache_extension = ".php";    $cache_str_begin = "<?php\n//Cache Created at: " . date ( "Y-m-d H:i:s" ) . "\n";
    if (! is_array ( $value )) {
        $cache_str_middle = "\$$name = \"$value\";";
    } else {
        $cache_str_middle = "\$$name = " . arrayeval ( $value ) . ";";
    }
    $cache_str_end = "\n?>";
    $cache_str = $cache_str_begin . $cache_str_middle . $cache_str_end;
    // 缓存文件路径
    $cache_file = "$cache_dir/$name$cache_extension";
    if ($fp = @fopen ( $cache_file, "wb" )) {
        fwrite ( $fp, $cache_str );
        fclose ( $fp );
        return true;
    } else {
        echo $cache_file;
        exit ( "Can not write to cache files, please check cache directory " );
        return false;
    }
}

// 将array变成字符串, 来自discuz!
function arrayeval($array, $level = 0) {
    if (! is_array ( $array )) {
        return "\"$array\"";
    }
    $space = "";
    for($i = 0; $i <= $level; $i ++) {
        $space .= "\t";
    }
    $evaluate = "Array\n$space(\n";
    $comma = $space;
    if (is_array ( $array )) {
        foreach ( $array as $key => $val ) {
            $key = is_string ( $key ) ? "\"" . addcslashes ( $key, "\"\\" ) . "\"" : $key;
            $val = ! is_array ( $val ) && (! preg_match ( "/^\-?[1-9]\d*$/", $val ) || strlen ( $val ) > 12) ? "\"" . addcslashes ( $val, "\"\\" ) . "\"" : $val;
            if (is_array ( $val )) {
                $evaluate .= "$comma$key => " . arrayeval ( $val, $level + 1 );
            } else {
                $evaluate .= "$comma$key => $val";
            }
            $comma = ",\n$space";
        }
    }
    $evaluate .= "\n$space)";
    return $evaluate;
}
$test_array = array (
        "6b" => "a\\",
        "b",
        "c",
        array (
                "c",
                "d" 
        ) 
);
$fileAndVarName = "newFile";
// 在生成$encode_str的时候,为使字符串中原有字符格式不变,系统在编译时会给字符串中预定义字符前加 \ 使预定义字符保留在字符串中,但输出或打印字符串的时候只会输出打印出预定义字符,不会打印出预定义字符前面的 \
$encode_str = json_encode ( $test_array );
// 因为这里要把字符串打印成PHP代码,输出的时候,字符串中预定义字符会打乱程序运行,所以要在原有转义字符前再加转移字符,使字符串输出打印时在预定义字符前转义字符也能输出
$addslashes_str = addslashes ( $encode_str ); // addslashes将字符串中预定义字符前加 \ 使其能存放在字符串中不产生作用,不参与程序运行
echo stripslashes($addslashes_str); // 反转义函数,可去掉字符串中的反斜线字符。若是连续二个反斜线,则去掉一个,留下一个。若只有一个反斜线,就直接去掉。
echo "<br>";

// 可以传数组对象,也可以传转换成json的字符串,转换成json字符串,使用时需要再转换成数组
set_cache ( "$fileAndVarName", $addslashes_str );
var_dump ( $addslashes_str );
echo "<br/>";
include_once "./cache/$fileAndVarName.php";
var_dump ( $$fileAndVarName );
echo "<br/>";
$decode_arr = ( array ) json_decode ( $$fileAndVarName );
var_dump ( $decode_arr );
echo "<br/>";
 
// 缓存另一种方法,用serialize把数组序列号成字符串,存放在任意扩展名文件中,使用时用fopen打开读取其中字符串内容,再用unserialize反序列化成原数据
$serialize_str = serialize ( $test_array );
echo $serialize_str; // 这个就是描述过的数组但在这里是一个字符串而已
echo "<br/>";
$unserialize_str = unserialize ( $serialize_str ); // 把描述过的数据恢复
var_dump($unserialize_str); //还原成为 $test_array ,数组结构并没有丢失。
?>
PHP 相关文章推荐
PHP 将图片按创建时间进行分类存储的实现代码
Jan 05 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
PHP5 的对象赋值机制介绍
Aug 02 PHP
php一个找二层目录的小东东
Aug 02 PHP
PHP父类调用子类方法的代码例子
Apr 09 PHP
JavaScript创建命名空间的5种写法
Jun 24 PHP
php文件上传简单实现方法
Jan 24 PHP
php实现修改新闻时删除图片的方法
May 12 PHP
优化WordPress中文章与评论的时间显示
Jan 12 PHP
php自动提交表单的方法(基于fsockopen与curl)
May 09 PHP
PHP大神的十大优良习惯
Sep 14 PHP
PHP的PDO大对象(LOBs)
Jan 27 PHP
基于PHP常用函数的用法详解
May 10 #PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 #PHP
PHP 自定义错误处理函数的使用详解
May 10 #PHP
PHP 类相关函数的使用详解
May 10 #PHP
解析PHP缓存函数的使用说明
May 10 #PHP
基于PHP选项与信息函数的使用详解
May 10 #PHP
PHP 观察者模式的实现代码
May 10 #PHP
You might like
PHP 实用代码收集
2010/01/22 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
PHP函数积累总结
2019/03/19 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
jquery之empty()与remove()区别说明
2010/09/10 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
2014/06/06 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
python批量生成本地ip地址的方法
2015/03/23 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
Python基于yaml文件配置logging日志过程解析
2020/06/23 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
医学专业个人求职自荐信格式
2013/09/23 职场文书
食堂标语大全
2014/06/11 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
整改落实自查报告
2014/11/05 职场文书
班主任2015新年寄语
2014/12/08 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
导游词之贵州织金洞
2019/10/12 职场文书