zoukankan      html  css  js  c++  java
  • 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);
                }
            }
        }
    
    }
    
  • 相关阅读:
    七、python抽象
    六、python条件、循环及其它语句
    泛型数组
    判断数组是否包含此元素
    数组倒序
    Class字节码文件获取的三种方法
    操作系统的产生
    Java重载的概述
    表设计遵循的三大范式实例
    pyqt5窗体分隔
  • 原文地址:https://www.cnblogs.com/wxvirus/p/12896763.html
Copyright © 2011-2022 走看看