use additional file_exists checks
[pharext/pharext] / src / pharext / Task / Cleanup.php
1 <?php
2
3 namespace pharext\Task;
4
5 use pharext\Task;
6
7 use FilesystemIterator;
8 use RecursiveDirectoryIterator;
9 use RecursiveIteratorIterator;
10
11 /**
12 * Recursively cleanup FS entries
13 */
14 class Cleanup implements Task
15 {
16 /**
17 * @var string
18 */
19 private $rm;
20
21 public function __construct($rm) {
22 $this->rm = $rm;
23 }
24
25 /**
26 * @param bool $verbose
27 */
28 public function run($verbose = false) {
29 if ($verbose) {
30 printf("Cleaning up %s ...\n", $this->rm);
31 }
32 if ($this->rm instanceof Tempfile) {
33 unset($this->rm);
34 } elseif (is_dir($this->rm)) {
35 $rdi = new RecursiveDirectoryIterator($this->rm,
36 FilesystemIterator::CURRENT_AS_SELF | // needed for 5.5
37 FilesystemIterator::KEY_AS_PATHNAME |
38 FilesystemIterator::SKIP_DOTS);
39 $rii = new RecursiveIteratorIterator($rdi,
40 RecursiveIteratorIterator::CHILD_FIRST);
41 foreach ($rii as $path => $child) {
42 if ($child->isDir()) {
43 @rmdir($path);
44 } else {
45 @unlink($path);
46 }
47 }
48 @rmdir($this->rm);
49 } elseif (file_exists($this->rm)) {
50 @unlink($this->rm);
51 }
52 }
53 }