• ThinkPHP5.1 清除缓存


    ThinkPHP5.1 清除缓存

    在基类控制器里,写上clear()方法,到时候用于调用,在也不是JSalert('清除缓存了')
    当然,5.1取消了CACHE_PATH TEMP_PATH常量,所以要定义这些缓存目录,还需引入use thinkfacadeEnv

    // 我是直接按照文档,设置了2个变量来存储缓存目录,当然还可以在配置文件中进行配置,然后通过config获取
    public function clear(){
    	$CACHE_PATH = Env::get('runtime_path') . 'cache/';
    	$TEMP_PATH = Env::get('runtime_path'). 'temp/';
        if (delete_dir_file($CACHE_PATH) && delete_dir_file($TEMP_PATH)) {
            return json(["code"=>1,"msg"=>"清除缓存成功"]);
        } else {
            return json(["code"=>0,"msg"=>"清除缓存失败"]);
        }
    }
    

    这个时候发现delete_dir_file()函数未定义,我们去公共函数里进行定义并写出来:
    由于5.1 没有DS常量了,所以选用DIRECTORY_SEPARATOR来代替

    common.php:

    /**
     * 循环删除目录和文件
     * @param string $dir_name
     * @return bool
     */
    function delete_dir_file($dir_name) {
        $result = false;
        if(is_dir($dir_name)){
            if ($handle = opendir($dir_name)) {
                while (false !== ($item = readdir($handle))) {
                    if ($item != '.' && $item != '..') {
                        if (is_dir($dir_name . DIRECTORY_SEPARATOR. $item)) {
                            delete_dir_file($dir_name . DIRECTORY_SEPARATOR. $item);
                        } else {
                            unlink($dir_name . DIRECTORY_SEPARATOR. $item);
                        }
                    }
                }
                closedir($handle);
                if (rmdir($dir_name)) {
                    $result = true;
                }
            }
        }
        return $result;
    }
    

    第二种方法

    public function delCache() {
    	if (Dir::del(Env::get('runtime_path').'cache/') {
    		$data = ['status' => 1, 'info' => '缓存删除成功'];
    	} else {
    		$data = ['status' => 0, 'info' => '缓存删除失败];
    	}
    	return json($data);
    }
    

    这个需要一个Dir类

    <?php
    // +----------------------------------------------------------------------
    // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
    // +----------------------------------------------------------------------
    // | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
    // +----------------------------------------------------------------------
    // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
    // +----------------------------------------------------------------------
    // | Author: superman <953369865@qq.com>
    // +----------------------------------------------------------------------
    namespace OrgUtil;
    use ThinkDb;
    final class Dir
    {
    
        /**
         * @param string $dir_name 目录名
         * @return mixed|string
         */
        static public function dirPath($dir_name)
        {
            $dirname = str_ireplace("\", "/", $dir_name);
            return substr($dirname, "-1") == "/" ? $dirname : $dirname . "/";
        }
    
        /**
         * 获得扩展名
         * @param string $file 文件名
         * @return string
         */
        static public function getExt($file)
        {
            return strtolower(substr(strrchr($file, "."), 1));
        }
    
        /**
         * 遍历目录内容
         * @param string $dirName 目录名
         * @param string $exts 读取的文件扩展名
         * @param int $son 是否显示子目录
         * @param array $list
         * @return array
         */
        static public function tree($dirName = null, $exts = '', $son = 0, $list = array())
        {
            if (is_null($dirName)) $dirName = '.';
            $dirPath = self::dirPath($dirName);
            static $id = 0;
            if (is_array($exts))
                $exts = implode("|", $exts);
            foreach (glob($dirPath . '*') as $v) {
                $id++;
                if (is_dir($v) || !$exts || preg_match("/.($exts)/i", $v)) {
                    $list [$id] ['type'] = filetype($v);
                    $list [$id] ['filename'] = basename($v);
                    $path = str_replace("\", "/", realpath($v)) . (is_dir($v) ? '/' : '');
                    $list [$id] ['path']=$path;
                    $list [$id] ['spath']=ltrim(str_replace(dirname($_SERVER['SCRIPT_FILENAME']),'',$path),'/');
                    $list [$id] ['filemtime'] = filemtime($v);
                    $list [$id] ['fileatime'] = fileatime($v);
                    $list [$id] ['size'] = is_file($v) ? filesize($v) : self::get_dir_size($v);
                    $list [$id] ['iswrite'] = is_writeable($v) ? 1 : 0;
                    $list [$id] ['isread'] = is_readable($v) ? 1 : 0;
                }
                if ($son) {
                    if (is_dir($v)) {
                        $list = self::tree($v, $exts, $son = 1, $list);
                    }
                }
            }
            return $list;
        }
    
        static public function get_dir_size($f)
        {
            $s = 0;
            foreach (glob($f . '/*') as $v) {
                $s += is_file($v) ? filesize($v) : self::get_dir_size($v);
            }
            return $s;
        }
    
        /**
         * 只显示目录树
         * @param null $dirName 目录名
         * @param int $son
         * @param int $pid 父目录ID
         * @param array $dirs 目录列表
         * @return array
         */
        static public function treeDir($dirName = null, $son = 0, $pid = 0, $dirs = array())
        {
            if (!$dirName) $dirName = '.';
            static $id = 0;
            $dirPath = self::dirPath($dirName);
            foreach (glob($dirPath . "*") as $v) {
                if (is_dir($v)) {
                    $id++;
                    $dirs [$id] = array("id" => $id, 'pid' => $pid, "dirname" => basename($v), "dirpath" => $v);
                    if ($son) {
                        $dirs = self::treeDir($v, $son, $id, $dirs);
                    }
                }
            }
            return $dirs;
        }
    
        /**
         * 删除目录及文件,支持多层删除目录
         * @param string $dirName 目录名
         * @return bool
         */
        static public function del($dirName)
        {
            if (is_file($dirName)) {
                unlink($dirName);
                return true;
            }
            $dirPath = self::dirPath($dirName);
            if (!is_dir($dirPath)) return true;
            foreach (glob($dirPath . "*") as $v) {
                is_dir($v) ? self::del($v) : unlink($v);
            }
            return @rmdir($dirName);
        }
    
        /**
         * 批量创建目录
         * @param $dirName 目录名数组
         * @param int $auth 权限
         * @return bool
         */
        static public function create($dirName, $auth = 0755)
        {
            $dirPath = self::dirPath($dirName);
            if (is_dir($dirPath))
                return true;
            $dirs = explode('/', $dirPath);
            $dir = '';
            foreach ($dirs as $v) {
                $dir .= $v . '/';
                if (is_dir($dir))
                    continue;
                mkdir($dir, $auth);
            }
            return is_dir($dirPath);
        }
    
        /**
         * 复制目录
         * @param string $olddir 原目录
         * @param string $newdir 目标目录
         * @param bool $strip_space 去空白去注释
         * @return bool
         */
        static public function copy($olddir, $newdir, $strip_space = false)
        {
            $olddir = self::dirPath($olddir);
            $newdir = self::dirPath($newdir);
            if (!is_dir($olddir))
                error("复制失败:" . $olddir . "目录不存在");
            if (!is_dir($newdir))
                self::create($newdir);
            foreach (glob($olddir . '*') as $v) {
                $to = $newdir . basename($v);
                if (is_file($to))
                    continue;
                if (is_dir($v)) {
                    self::copy($v, $to, $strip_space);
                } else {
                    if ($strip_space) {
                        $data = file_get_contents($v);
                        file_put_contents($to, strip_space($data));
                    } else {
                        copy($v, $to);
                    }
                    chmod($to, "0777");
                }
            }
            return true;
        }
    
        /**
         * 目录下创建安全文件
         * @param $dirName 操作目录
         * @param bool $recursive 为true会递归的对子目录也创建安全文件
         */
        static public function safeFile($dirName, $recursive = false)
        {
            $file = LIB_PATH . '/index.html';
            if (!is_dir($dirName)) {
                return;
            }
            $dirPath = self::dirPath($dirName);
            /**
             * 创建安全文件
             */
            if (!is_file($dirPath . 'index.html')) {
                copy($file, $dirPath . 'index.html');
            }
            /**
             * 操作子目录
             */
            if ($recursive) {
                foreach (glob($dirPath . "*") as $d) {
                    is_dir($d) and self::safeFile($d);
                }
            }
        }
    
    }
    
  • 相关阅读:
    LeetCode 230. Kth Smallest Element in a BST
    LeetCode 114. Flatten Binary Tree to Linked List
    LeetCode 222. Count Complete Tree Nodes
    LeetCode 129. Sum Root to Leaf Numbers
    LeetCode 113. Path Sum II
    LeetCode 257. Binary Tree Paths
    Java Convert String & Int
    Java Annotations
    LeetCode 236. Lowest Common Ancestor of a Binary Tree
    LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/wxvirus/p/12896763.html
Copyright © 2020-2023  润新知