ThinkPHP清除缓存/删除文件夹下所有文件

这篇博客介绍了如何在ThinkPHP框架中实现清除缓存的功能,包括删除指定文件夹下的所有文件。通过提供两个公共方法`rmFile`用于删除文件夹下的文件,以及两个控制器方法`cache`和`allrun`,分别实现了一对一和一键清除所有缓存。前端使用AJAX进行提交,弹窗确认后执行清除操作。

今天做了一个ThinkPHP清除缓存功能,在网上开了一下有一个比较简单的写法但是那个是ThinkPHP内置的一个类,我找了半天没找到这个类,气死我了  于是就用php删除文件夹下所有文件这个方法来达到清除缓缓存的的功能,废话不多说粘上代码:

/*此方法为公共方法用来删除某个文件夹下的所有文件
     * $path为文件的路径
     * $fileName文件夹名称
     * */
    public function rmFile($path,$fileName){
        //去除空格
        $path = preg_replace('/(\/){2,}|{\\\}{1,}/','/',$path);    
        //得到完整目录    
        $path.= $fileName;
        //判断此文件是否为一个文件目录
        if(is_dir($path)){
            //打开文件
            if ($dh = opendir($path)){
                //遍历文件目录名称
                   while (($file = readdir($dh)) != false){
                       //逐一进行删除
                       unlink($path.'\\'.$file);
                       }
                       //关闭文件
                      closedir($dh);
                }    
            }
    }

//一对一删除缓存
    public function cache(){

        //前台用ajax get方式进行提交的,这里是先判断一下
        if($_GET['type']){

             //获取提交过来的值(也就是要删除的文件夹名称)

            $type=$_GET['type'];

            //获取文件的绝对路径

            $abs_dir=dirname(dirname(dirname(dirname(__FILE__))));

            //与要删除的文件夹里的文件进行组合
            $pa=$abs_dir.'\Admin\Runtime\\';

           //调用上面写好的方法

            $this->rmFile($pa,$type);

            //返回提示信息
            $this->ajaxReturn(1,'清除成功',1);
        }else{
            $this->display();
        }
    }

//一键清除所有缓存
    public function allrun(){

        ////前台用ajax get方式进行提交的,这里是先判断一下
        if($_GET['type']){

          //得到传递过来的值
            $type=$_GET['type'];

            //将传递过来的值进行切割,我是已“-”进行切割的
            $name=explode('-', $type);

            //得到切割的条数,便于下面循环

            $count=count($name);

           //循环调用上面的方法

            for ($i=0;$i<$count;$i++){

                //得到文件的绝对路径

                $abs_dir=dirname(dirname(dirname(dirname(__FILE__))));

                //组合路径
                $pa=$abs_dir.'\Admin\Runtime\\';

                //调用删除文件夹下所有文件的方法
                $this->rmFile($pa,$name[$i]);    
            }

           //给出提示信息

            $this->ajaxReturn(1,'清除成功',1);
        }else{
            $this->display();
        }
    }

前台页面很简单 在这里就给出重要的代码

html文件

//这个是ajax get方式提交

<script type="text/javascript" src="__PUBLIC__/scripts/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$(function(){
    $('#button').click(function(){
        if(confirm("确认要清除模版缓存目录?")) {
        var $type=$('#type').val();
        var $mess=$('#mess');
        $.getJSON('__URL__/cache',{type:$type},function(json){
            if(json.status==1){
            $mess.slideDown(3000,function(){
                $mess.css('color:red');   
            }).html(json.info);
            }else{
                $mess.slideDown(3000,function(){
                    $mess.css('color:red');   
                }).html(json.info);
            }
        });
         }else{
                return false;
            }   
    });
});      
</script>

<form action="" method="get">
                      <table border="0" cellpadding="2" cellspacing="1" style="width:100%">

                       <tr>

                           //关键就是这个隐藏域的默认值 就是你要删除文件夹里面内容的文件夹的名

                           <input type="hidden" name="type" id="type" class="text" style="width:50px" value="Cache" />
                        <td nowrap align="left"><input type="button" id="button" class="text" style="width:100px;height:50px;" value="点击清除模版缓存目录" /></td>
                        <td id="mess"></td>
                      </tr>
                      </table>

                </form>

//一键清除所有

<form action="" method="get">
                      <table border="0" cellpadding="2" cellspacing="1" style="width:100%">
                       <tr>

                            //默认值是几个文件夹的名字连起来 提交方式和上面的一样
                           <input type="hidden" name="type" id="type" class="text" style="width:50px" value="Cache-Data-Temp-Logs" />
                        <td nowrap align="left"><input type="button" id="button" class="text" style="width:100px;height:50px;" value="点击一键清除所有" /></td>
                          <td id="mess"></td>
                      </tr>
                      </table>
                </form>


提供的引用内容未提及ThinkPHP 8多模块下view文件夹不生效的解决办法,不过一般可以从以下几个方面排查并解决问题: ### 检查视图配置 要保证视图配置文件 `config/view.php` 里的配置正确,特别是视图路径、模板后缀等配置。示例如下: ```php return [ // 模板引擎类型使用Think 'type' => 'Think', // 模板路径 'view_path' => '', // 模板后缀 'view_suffix' => 'html', // 模板文件名分隔符 'view_depr' => DIRECTORY_SEPARATOR, // 模板引擎普通标签开始标记 'tpl_begin' => '{', // 模板引擎普通标签结束标记 'tpl_end' => '}', // 标签库标签开始标记 'taglib_begin' => '{', // 标签库标签结束标记 'taglib_end' => '}', ]; ``` 要确保 `view_path` 配置的路径和实际的 `view` 文件夹路径一致。 ### 检查模块配置 在多模块环境下,要确保每个模块的配置无误。每个模块可能有自己独立的 `view` 文件夹,路径通常为 `app/模块名/view`。要保证模块名拼写正确,并且模块配置文件(通常在 `app/模块名/config` 下)里的视图配置没有冲突。 ### 检查命名空间和路由 要确保控制器的命名空间和路由配置正确。控制器需要正确指定所属模块,路由也需要正确指向对应的控制器和操作方法。示例如下: ```php use think\facade\Route; // 定义路由 Route::get('hello/:name', 'app\模块名\controller\Index@hello'); ``` ### 检查文件权限 要确保 `view` 文件夹及其子文件有足够的读写权限,特别是在Linux或Unix系统中。可以使用以下命令修改权限: ```bash chmod -R 755 app/模块名/view ``` ### 清除缓存 有时候缓存会导致视图文件不生效,可以尝试清除缓存文件缓存文件通常存储在 `runtime` 目录下,可以删除该目录下的 `cache` 和 `temp` 文件夹
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值