深入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异常处理技术,顶级异常处理器
Jun 13 PHP
解析mysql left( right ) join使用on与where筛选的差异
Jun 18 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
PHP实现更新中间关联表数据的两种方法
Sep 01 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 PHP
php简单随机字符串生成方法示例
Apr 19 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
用PHP实现Ftp用户的在线管理的代码
2007/03/06 PHP
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
PHP7 新增常量
2021/03/09 PHP
文字幻灯片
2006/06/26 Javascript
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
浅析js封装和作用域
2013/07/09 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
考察邀请函范文
2015/01/31 职场文书
高中政治教师教学反思
2016/02/23 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
导游词之天津古文化街
2019/11/09 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang