Issues (43)

app/filesystem/Filesystem.php (1 issue)

Labels
Severity
1
<?php
2
3
namespace filesystem;
4
5
use SebastianBergmann\ObjectReflector\InvalidArgumentException;
6
7
final class Filesystem
8
{
9
    public function exists(string $raw_filename)
10
    {
11
        $filename = sanitize_filename($raw_filename);
12
13
        return file_exists($filename);
14
    }
15
16
    public function read(string $raw_filename)
17
    {
18
        $filename = sanitize_filename($raw_filename);
19
20
        return @file_get_contents($filename);
21
    }
22
23
    public function delete(string $filename): bool
24
    {
25
        $filename_clean = sanitize_filename($filename);
26
27
        if (is_dir($filename_clean)) {
28
            $it = new \RecursiveDirectoryIterator($filename_clean, \RecursiveDirectoryIterator::SKIP_DOTS);
29
            $files = new \RecursiveIteratorIterator($it,
30
                        \RecursiveIteratorIterator::CHILD_FIRST);
31
            foreach($files as $file) {
32
                if ($file->isDir()){
33
                    rmdir($file->getRealPath());
34
                } else {
35
                    unlink($file->getRealPath());
36
                }
37
            }
38
            return rmdir($filename_clean);
39
        } else {
40
            return unlink($filename_clean);
41
        }
42
    }
43
44
    public function write(string $raw_filename, string $data)
45
    {
46
        $filename = sanitize_filename($raw_filename);
47
        $pathinfo = pathinfo($filename);
48
        if (!file_exists($pathinfo['dirname'])) {
49
            mkdir($pathinfo['dirname'], 0777, true);
50
        }
51
52
        return false !== file_put_contents($filename, $data);
53
    }
54
55
    /**
56
     * @param string $raw_filename - full filename to be renamed
57
     * @param string $new_name - new name of the file, relative to $filename path
58
     * 
59
     * @return bool|string
60
     */
61
    public function rename(string $raw_filename, string $new_name)
62
    {
63
        $filename = sanitize_filename($raw_filename);
64
        if (!$this->exists($filename)) {
65
            throw new \InvalidArgumentException("File $filename doesn't exists");
66
        }
67
        
68
        $pathinfo = pathinfo($filename);
69
        $new_filename = sanitize_filename($pathinfo['dirname'] . '/' . $new_name);
70
71
        if ($this->exists($new_filename)) {
72
            throw new \InvalidArgumentException("File $new_filename already exists");
73
        }
74
    
75
        if (rename($filename, $new_filename)) {
76
            return $new_filename;
77
        } else {
78
            return false;
79
        }
80
    }
81
82
    /**
83
     * @param string $path - full path name to scan
84
     * 
85
     * @return array of full path names of found dirs
86
     */
87
    public function listDirs(string $path): array
88
    {
89
        if (!$this->exists($path)) {
90
            throw new \InvalidArgumentException("$path not exists");
91
        }
92
93
        return array_filter(glob($path . '*'), 'is_dir');
0 ignored issues
show
It seems like glob($path . '*') can also be of type false; however, parameter $input of array_filter() does only seem to accept array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

93
        return array_filter(/** @scrutinizer ignore-type */ glob($path . '*'), 'is_dir');
Loading history...
94
    }
95
}
96