深入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 身份证号验证函数
May 07 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
PHP 快速排序算法详解
Nov 10 PHP
Laravel 5框架学习之表单
Apr 08 PHP
php提交post数组参数实例分析
Dec 17 PHP
PHP中常用的数组操作方法笔记整理
May 16 PHP
PHP并发多进程处理利器Gearman使用介绍
May 16 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
May 31 PHP
thinkPHP分组后模板无法加载问题解决方法
Jul 12 PHP
PHP常量define和const的区别详解
May 18 PHP
在thinkphp5.0路径中实现去除index.php的方式
Oct 16 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 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-msf源码详解
2017/12/25 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
js文件Cookie存取值示例代码
2014/02/20 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
2016/01/05 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
javascript使用canvas实现饼状图效果
2020/09/08 Javascript
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
python实现对输入的密文加密
2019/03/20 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
python实现广度优先搜索过程解析
2019/10/19 Python
python实现简单图书管理系统
2019/11/22 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
计算机专业个人简短的自我评价
2013/10/23 职场文书
给儿子的表扬信
2014/01/15 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
Elasticsearch 批量操作
2022/04/19 Python