深入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调用mysql存储过程
Feb 14 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
浅谈PHP接收POST数据方式
Jun 05 PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 PHP
Symfony2联合查询实现方法
Mar 18 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
Oct 29 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
PHP实现判断数组是一维、二维或几维的方法
Feb 06 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
php写入txt乱码的解决方法
Sep 17 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 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与已存在的Java应用程序集成
2006/10/09 PHP
一步一步学习PHP(8) php 数组
2010/03/05 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
Python使用minidom读写xml的方法
2015/06/03 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
COSETTE官网:奢华,每天
2020/03/22 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
汉语言文学毕业生求职信
2013/10/01 职场文书
化学专业毕业生自荐信
2013/11/15 职场文书
测绘工程系学生的自我评价
2013/11/30 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
有关爱国演讲稿
2014/05/07 职场文书
节能减耗标语
2014/06/21 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
教师党员自我评价2015
2015/03/04 职场文书
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android