又拍雲遞歸刪除目錄及文件

偶然翻看了一下又拍雲存儲的api文檔,發現沒法刪除非空目錄,簡單寫了一個,使用Yii框架,因此可能看起來有點怪,見諒吧。php

 1 <?php
 2 
 3 /**
 4  * 文件說明.
 5  * 
 6  * @author Kun Xu <kunx@jumei.com>
 7  */
 8 class UpyunController extends Controller
 9 {
10 
11     /**
12      * 刪除文件夾及文件,遞歸刪除目錄及文件.
13      * @param string $path 要遞歸刪除的目錄.
14      * @param string $bucketname 空間名.
15      */
16     public function actionRemoveDirQuiet($path = '/', $bucketname = '')
17     {
18         $bucketname = '<bucketname>'; //空間名.
19         $username = '<username>'; //操做者帳號.
20         $password = '<password>'; //操做者密碼.
21         Yii::import('ext.UpYun'); //Yii引入UpYun SDK,記得將upyun.class.php更名爲UpYun.php放入extensions目錄.
22         $upYun = new UpYun($bucketname, $username, $password);
23         if (strncasecmp('/', $path, 1) !== 0) {
24             $path = '/' . $path;
25         }
26         $this->removeDir($path, $upYun); //調用刪除方法.
27     }
28 
29     /**
30      * 刪除目錄.
31      * @param string $path  要刪除的目錄路徑.
32      * @param UpYun  $upYun UpYun實例.
33      */
34     private function removeDir($path, UpYun $upYun)
35     {
36         $list = $upYun->getList($path); //獲取目錄列表信息.
37         if ($list) {
38             foreach ($list as $item) {
39                 if (strrpos($path, '/') == strlen($path) - 1) {//判斷路徑是否以/結束,因爲開始路徑多是以/結束的,因此這裏須要排除一下
40                     $file = $path . $item['name'];
41                 } else {
42                     $file = $path . '/' . $item['name'];
43                 }
44                 if ($item['type'] == 'folder') {//是文件夾,遞歸刪除子文件夾文件.
45                     $this->removeDir($file, $upYun);
46                 } else {//普通文件,直接刪除
47                     $upYun->deleteFile($file);
48                 }
49             }
50         }
51         $upYun->rmDir($path);
52     }
53 
54 }
相關文章
相關標籤/搜索