生成缓存文件cache file

生成缓存文件cache file

class Test{
    public function index(){
        $arrConfig = Array(
            'name' => 'daicr',
            'age' => 24,
            'host' => '127.0.0.1',
            'port' => 80,
        );
        $str = $this -> getcachevars(array("config_im_api" => $arrConfig),'ARRAY');
        $this->writeToCache('file_name.php',$str,'cache_','./config');
        var_dump($str);
    }
    
    /**
     * @purpose    :    字符串处理函数;1、将数组(可以是多维数组)转换成数组样式的字符串;2、将字符串定义为一个常量
     * @author    :    daicr
     * @param    :    如果传递的$data是数组,则$type传入ARRAY
     * @param    :    如果传递的$data是字符串,则$type传入STRING
     * @return    :    string $evaluate 返回一个处理好的字符串,' 和 \ 会在前面加一个 \
     **/
    function getcachevars($data, $type = 'STRING') {
        $evaluate = '';
        foreach($data as $key => $val) {
            if(is_array($val)) {
                $evaluate .= "\$$key = ".$this->arrayeval($val).";\n";
            } else {
                $val = addcslashes($val, '\'\\');
                $evaluate .= $type == 'ARRAY' ? "\$$key = '$val';\n" : "define('".strtoupper($key)."', '$val');\n";
            }
        }
        return $evaluate;
    }
    
    function arrayeval($array, $level = 0) {
        $space = '';
        for($i = 0; $i <= $level; $i++) {
            $space .= "\t";
        }
        $evaluate = "Array\n$space(\n";
        $comma = $space;
        foreach($array as $key => $val) {
            $key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key;        // 将 key 加上一个 '' 
            if (!is_array($val) && (!preg_match("/^\-?\d+$/", $val) || strlen($val) > 12)) {  // /^\-?\d+$/ 匹配数字 或者以 - 开头的数字
                $val = '\''.addcslashes($val, '\'\\').'\'';
            } else {
                if ('\'postcode\'' === $key) { //邮编必须得保存为字符串型
                    $val = '\''.addcslashes($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;
    }
    
    /**
     * @purpose    :    cache写入函数
     * @author    :    daicr
     * @param    :    string $scriptName 生成的文件名
     * @param    :    string $cacheStr 需要写入的字符串
     * @param    :    string $prefix 前缀
     * @param    :    string $dir 写入路径
     * @return    :    string $evaluate 返回一个处理好的字符串,' 和 \ 会在前面加一个 \
     **/
    public function writeToCache($scriptName,$cacheStr,$prefix='cache_',$dir){
        if(!is_dir($dir)){
            mkdir($dir,0777);
        }
        if($fp = fopen("$dir/$prefix$scriptName", 'w')) {
            fwrite($fp, "<?php\n//Cache file, DO NOT modify me!\n".
                "//Created on ".date("M j, Y, G:i")."\n\n$cacheStr?>");
            fclose($fp);
        } else {
            exit('Can not write to cache files!');
        }
    }
}

$test = new Test();
$test -> index();

2018-02-24

posted @ 2018-02-24 15:02  Chrdai  阅读(1888)  评论(0编辑  收藏  举报