深入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 相关文章推荐
基于文本的访客签到簿
Oct 09 PHP
PHP中的cookie
Nov 26 PHP
php定时计划任务的实现方法详解
Jun 06 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
Jun 21 PHP
成为好程序员必须避免的5个坏习惯
Jul 04 PHP
PHP实现的json类实例
Jul 28 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 PHP
Laravel 实现数据软删除功能
Aug 21 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 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
第十二节 类的自动加载 [12]
2006/10/09 PHP
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
中英文字符串翻转函数
2008/12/09 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
浅析javascript的return语句
2015/12/15 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
Python入门篇之文件
2014/10/20 Python
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
python版百度语音识别功能
2019/07/09 Python
python实现桌面托盘气泡提示
2019/07/29 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
电焊工工作岗位职责
2014/02/06 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
小学母亲节活动总结
2015/02/10 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs