tp5实现删除服务器或本地文件和文件夹
一 .因为客户的服务器内存比较小,为了方便后期的有利管理,需要及时的删除不需要的图片及文件
下面介绍方法,采用的是ThinkPHP5.0框架
1. 先来看下我的结构目录:
可以看到我所有的文件都保存在public/uploads下边的以日期命名的文件夹中,
这里采用了tp5的file类,有兴趣的可以去研究下,这里我用到了 unlink(),以及rmdir()的方法来删除文件夹
和文件夹下边的文件,
由于,tp5有限制,要求删除的文件夹下边必须不能有文件,所以如果直接删除文件夹的话,会提示你没有权限
这里需要循环一下文件夹下的文件,分别删除文件,然后再删除文件夹,好了,废话不多讲,下边上说明:
二:在你的控制器其中写入下面这个方法,不需要做任何改动,这个方法的作用是循环删除文件夹下的文件
借用了网上其他网友的改进方法,如下所示:
public function delDirAndFile($path, $delDir = FALSE) { if (is_array($path)) { foreach ($path as $subPath) delDirAndFile($subPath, $delDir); } if (is_dir($path)) { $handle = opendir($path); if ($handle) { while (false !== ( $item = readdir($handle) )) { if ($item != "." && $item != "..") is_dir("$path/$item") ? delDirAndFile("$path/$item", $delDir) : unlink("$path/$item"); } closedir($handle); if ($delDir) return rmdir($path); } } else { if (file_exists($path)) { return unlink($path); } else { return FALSE; } } clearstatcache(); }
然后,我们就可以来调用这个方法来进行删除操作了,如下所示:
//删除全部文件的方法 public function delSave(){ $path=request()->param('path'); $this->delDirAndFile(ROOT_PATH . 'public' . DS . 'uploads'.DS.$path); rmdir(ROOT_PATH . 'public' . DS . 'uploads'.DS.$path); return $this->success('删除成功','del'); }
这里$path指的是,你需要删除的文件夹名,例如20180715,
如果,你要删除uploads/20180715/1.jpg,那么只需要把$path的值赋值为20180715即可。
三:如果你只需要制定删除特别的文件,那就更容易了,只需要用以下的方法即可:
//删除单个文件方法 public function test(){ $filename = ROOT_PATH . 'public' . DS . 'uploads/20180628/1.jpg'; if(file_exists($filename)){ unlink($filename); }else{ return '我已经被删除了哦!'; } }好了,删除文件的介绍到此结束,欢迎大家指教