]>
Commit | Line | Data |
---|---|---|
1 | <?php | |
2 | ||
3 | require_once 'exceptions/IOException.php'; | |
4 | ||
5 | /** | |
6 | * Class FileUtils | |
7 | * | |
8 | * Utility class for file manipulation. | |
9 | */ | |
10 | class FileUtils | |
11 | { | |
12 | /** | |
13 | * @var string | |
14 | */ | |
15 | protected static $phpPrefix = '<?php /* '; | |
16 | ||
17 | /** | |
18 | * @var string | |
19 | */ | |
20 | protected static $phpSuffix = ' */ ?>'; | |
21 | ||
22 | /** | |
23 | * Write data into a file (Shaarli database format). | |
24 | * The data is stored in a PHP file, as a comment, in compressed base64 format. | |
25 | * | |
26 | * The file will be created if it doesn't exist. | |
27 | * | |
28 | * @param string $file File path. | |
29 | * @param mixed $content Content to write. | |
30 | * | |
31 | * @return int|bool Number of bytes written or false if it fails. | |
32 | * | |
33 | * @throws IOException The destination file can't be written. | |
34 | */ | |
35 | public static function writeFlatDB($file, $content) | |
36 | { | |
37 | if (is_file($file) && !is_writeable($file)) { | |
38 | // The datastore exists but is not writeable | |
39 | throw new IOException($file); | |
40 | } else if (!is_file($file) && !is_writeable(dirname($file))) { | |
41 | // The datastore does not exist and its parent directory is not writeable | |
42 | throw new IOException(dirname($file)); | |
43 | } | |
44 | ||
45 | return file_put_contents( | |
46 | $file, | |
47 | self::$phpPrefix.base64_encode(gzdeflate(serialize($content))).self::$phpSuffix | |
48 | ); | |
49 | } | |
50 | ||
51 | /** | |
52 | * Read data from a file containing Shaarli database format content. | |
53 | * If the file isn't readable or doesn't exists, default data will be returned. | |
54 | * | |
55 | * @param string $file File path. | |
56 | * @param mixed $default The default value to return if the file isn't readable. | |
57 | * | |
58 | * @return mixed The content unserialized, or default if the file isn't readable, or false if it fails. | |
59 | */ | |
60 | public static function readFlatDB($file, $default = null) | |
61 | { | |
62 | // Note that gzinflate is faster than gzuncompress. | |
63 | // See: http://www.php.net/manual/en/function.gzdeflate.php#96439 | |
64 | if (is_readable($file)) { | |
65 | return unserialize( | |
66 | gzinflate( | |
67 | base64_decode( | |
68 | substr(file_get_contents($file), strlen(self::$phpPrefix), -strlen(self::$phpSuffix)) | |
69 | ) | |
70 | ) | |
71 | ); | |
72 | } | |
73 | ||
74 | return $default; | |
75 | } | |
76 | } |