首页 > 代码库 > 又拍云递归删除目录及文件

又拍云递归删除目录及文件

偶然翻看了一下又拍云存储的api文档,发现无法删除非空目录,简单写了一个,使用Yii框架,所以可能看起来有点怪,见谅吧。

 1 <?php
 2 
 3 /**
 4  * 文件说明.
 5  * 
 6  * @author Kun Xu <yfxukun@163.com>
 7  */
 8 class UpyunController extends Controller
 9 {
10 
11     /**
12      * 删除文件夹及文件,递归删除目录及文件.
13      */
14     public function actionRemoveDirQuiet($path = ‘/‘, $bucketname = ‘<bucketname>‘)
15     {
16         $bucketname = ‘<bucketname>‘; //空间名.
17         $username = ‘<username>‘; //操作者账号.
18         $password = ‘<password>‘; //操作者密码.
19         Yii::import(‘ext.UpYun‘); //Yii引入UpYun SDK,记得将upyun.class.php改名为UpYun.php放入extensions目录.
20         $upYun = new UpYun($bucketname, $username, $password);
21         if (strncasecmp(‘/‘, $path, 1) !== 0) {
22             $path = ‘/‘ . $path;
23         }
24         $this->removeDir($path, $upYun); //调用删除方法.
25     }
26 
27     /**
28      * 删除目录.
29      * @param string $path 要删除的目录路径.
30      * @param UpYun $upYun UpYun实例.
31      */
32     private function removeDir($path, $upYun)
33     {
34         // file_put_contents(‘/home/xukun/upyun.log‘, ‘[removedir方法]‘ . $path . PHP_EOL, FILE_APPEND);
35         $list = $upYun->getList($path); //获取目录列表信息.
36         if ($list) {
37             foreach ($list as $item) {
38                 $file = $path . ‘/‘ . $item[‘name‘];
39                 if ($this->isDir($file, $upYun)) {//是文件夹,递归删除子文件夹文件.
40                     // file_put_contents(‘/home/xukun/upyun.log‘, ‘[下一个removedir方法]‘ . $file . PHP_EOL, FILE_APPEND);
41                     $this->removeDir($file, $upYun);
42                 } else {//普通文件,直接删除
43                     // file_put_contents(‘/home/xukun/upyun.log‘, ‘[删除文件]‘ . $file . PHP_EOL, FILE_APPEND);
44                     $upYun->deleteFile($file);
45                 }
46             }
47         }
48         // file_put_contents(‘/home/xukun/upyun.log‘, ‘[删除空目录]‘ . $path . PHP_EOL, FILE_APPEND);
49         $upYun->rmDir($path);
50     }
51 
52 
53     /**
54      * 判断文件是否是一个目录,是返回true,否则返回false.
55      * @param string $path 要判断的路径.
56      * @param UpYun $upYun UpYun实例.
57      * @return boolean
58      */
59     private function isDir($path = ‘/‘, UpYun $upYun)
60     {
61         if (strncasecmp(‘/‘, $path, 1) !== 0) {
62             $path = ‘/‘ . $path;
63         }
64         $info = $upYun->getFileInfo($path);
65         $type = $info[‘x-upyun-file-type‘];
66         if ($type == ‘folder‘) {
67             return true;
68         } else {
69             return false;
70         }
71     }
72 
73 }