深入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文件上传主要代码讲解
Sep 30 PHP
PHP CURL获取返回值的方法
May 04 PHP
php获取textarea的值并处理回车换行的方法
Oct 20 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
php面向对象值单例模式
May 03 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
Dec 19 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 17 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
Dec 02 PHP
Laravel中获取IP的真实地理位置
Apr 01 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
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
ie下动态加态js文件的方法
2011/09/13 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
nodejs服务搭建教程 nodejs访问本地站点文件
2017/04/07 NodeJs
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
vue按需加载实例详解
2019/09/06 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
简单介绍Python中的readline()方法的使用
2015/05/24 Python
python妹子图简单爬虫实例
2015/07/07 Python
python3爬虫之设计签名小程序
2018/06/19 Python
python日志logging模块使用方法分析
2019/05/23 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
python str字符串转uuid实例
2020/03/03 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
国培计划培训感言
2014/03/11 职场文书
推荐信怎么写
2014/05/09 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
校园环保标语
2014/06/13 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
Java 多态分析
2022/04/26 Java/Android