Overview
Comment: | Use float instead of int as with 32 bits systems, it will max to 2 GB of disk space and cause issues. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk | stable |
Files: | files | file ages | folders |
SHA3-256: |
729becbcf11c5a5885171e7d0a269433 |
User & Date: | bohwaz on 2021-05-03 18:40:50 |
Other Links: | manifest | tags |
Context
2021-05-04
| ||
00:23 | Improve list of transactions and users in documents section, add user name, transaction detail, and order of columns in a dynamic list check-in: d612fd293d user: bohwaz tags: trunk, stable | |
2021-05-03
| ||
18:40 | Use float instead of int as with 32 bits systems, it will max to 2 GB of disk space and cause issues. check-in: 729becbcf1 user: bohwaz tags: trunk, stable | |
18:02 | Don't allow rename of transactions and users files check-in: ae48cda34d user: bohwaz tags: trunk, stable | |
Changes
Modified src/include/lib/Garradin/Files/Files.php from [a99c4bec9a] to [1e02a40945].
︙ | ︙ | |||
217 218 219 220 221 222 223 | $path = trim($path . '/' . $part, '/'); $breadcrumbs[$path] = $part; } return $breadcrumbs; } | | | | | | | 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 | $path = trim($path . '/' . $part, '/'); $breadcrumbs[$path] = $part; } return $breadcrumbs; } static public function getQuota(): float { return FILE_STORAGE_QUOTA ?? self::callStorage('getQuota'); } static public function getUsedQuota(bool $force_refresh = false): float { if ($force_refresh || Static_Cache::expired('used_quota', 3600)) { $quota = self::callStorage('getTotalSize'); Static_Cache::store('used_quota', $quota); } else { $quota = (float) Static_Cache::get('used_quota'); } return $quota; } static public function getRemainingQuota(bool $force_refresh = false): float { if (FILE_STORAGE_QUOTA !== null) { return FILE_STORAGE_QUOTA - self::getUsedQuota($force_refresh); } return self::callStorage('getRemainingQuota'); } static public function checkQuota(int $size = 0): void { if (!self::$quota) { return; } $remaining = self::getRemainingQuota(true); if (($remaining - (float) $size) < 0) { throw new ValidationException('L\'espace disque est insuffisant pour réaliser cette opération'); } } static public function enableQuota(): void { self::$quota = true; |
︙ | ︙ |
Modified src/include/lib/Garradin/Files/Storage/FileSystem.php from [c12d0e525f] to [0741adb79a].
︙ | ︙ | |||
206 207 208 209 210 211 212 | // file_image.jpeg $files[$file->getType() . '_' .$file->getFilename()] = self::_SplToFile($file); } return Utils::knatcasesort($files); } | | | | | | | | | | 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 | // file_image.jpeg $files[$file->getType() . '_' .$file->getFilename()] = self::_SplToFile($file); } return Utils::knatcasesort($files); } static public function getTotalSize(): float { if (null !== self::$_size) { return self::$_size; } $total = 0; $path = self::_getRoot(); foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY, \RecursiveIteratorIterator::CATCH_GET_CHILD) as $p) { $total += $p->getSize(); } self::$_size = (float) $total; return self::$_size; } /** * @see https://www.crazyws.fr/dev/fonctions-php/fonction-disk-free-space-et-disk-total-space-pour-ovh-2JMH9.html * @see https://github.com/jdel/sspks/commit/a890e347f32e9e3e50a0dd82398947633872bf38 */ static public function getQuota(): float { $quota = @disk_total_space(DATA_ROOT); return $quota === false ? \PHP_FLOAT_MAX : (float) $quota; } static public function getRemainingQuota(): float { $quota = @disk_free_space(DATA_ROOT); return $quota === false ? \PHP_FLOAT_MAX : (float) $quota; } static public function truncate(): void { Utils::deleteRecursive(self::_getRoot()); } |
︙ | ︙ |
Modified src/include/lib/Garradin/Files/Storage/SQLite.php from [0ae2ccbb40] to [b6215410e7].
︙ | ︙ | |||
185 186 187 188 189 190 191 | if ($file->parent) { self::touch($file->parent); } return true; } | | | | | | | | 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | if ($file->parent) { self::touch($file->parent); } return true; } static public function getTotalSize(): float { return (float) DB::getInstance()->firstColumn('SELECT SUM(size) FROM files;'); } /** * @see https://www.crazyws.fr/dev/fonctions-php/fonction-disk-free-space-et-disk-total-space-pour-ovh-2JMH9.html * @see https://github.com/jdel/sspks/commit/a890e347f32e9e3e50a0dd82398947633872bf38 */ static public function getQuota(): float { $quota = @disk_total_space(DATA_ROOT); return $quota === false ? \PHP_FLOAT_MAX : (float) $quota; } static public function getRemainingQuota(): float { $quota = @disk_free_space(DATA_ROOT); return $quota === false ? \PHP_FLOAT_MAX : (float) $quota; } static public function truncate(): void { $db = DB::getInstance(); $db->exec('DELETE FROM files_contents; DELETE FROM files; VACUUM;'); } |
︙ | ︙ |
Modified src/include/lib/Garradin/Files/Storage/StorageInterface.php from [a0c0da8a45] to [dea0474d61].
︙ | ︙ | |||
72 73 74 75 76 77 78 | * Moves a file to a new path, when its name or path has changed */ static public function move(File $file, string $new_path): bool; /** * Return total size of used space by files stored in this backed */ | | | | | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | * Moves a file to a new path, when its name or path has changed */ static public function move(File $file, string $new_path): bool; /** * Return total size of used space by files stored in this backed */ static public function getTotalSize(): float; /** * Return total disk space * This will only be called if FILE_STORAGE_QUOTA constant is null */ static public function getQuota(): float; /** * Return available free disk space * This will only be called if FILE_STORAGE_QUOTA constant is null */ static public function getRemainingQuota(): float; /** * Delete all stored content in this backend */ static public function truncate(): void; /** |
︙ | ︙ |