偶然翻看了一下又拍云存储的api文档,发现无法删除非空目录,简单写了一个,使用Yii框架,所以可能看起来有点怪,见谅吧。
1 <?php
2
3 /**
4 * 文件说明.
5 *
6 * @author Kun Xu <[email protected]>
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 }
时间: 2024-10-30 01:01:57