From ff91b98a44cc9625c4fa8c40dec95871720af78a Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 27 Apr 2019 12:05:06 +0200 Subject: [PATCH] Improve robustness --- System/File/Local/File.php | 36 +++++++++++++++------------- tests/System/File/Local/FileTest.php | 4 +--- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/System/File/Local/File.php b/System/File/Local/File.php index 478ff1566..2b84abc63 100644 --- a/System/File/Local/File.php +++ b/System/File/Local/File.php @@ -74,24 +74,28 @@ final class File extends FileAbstract implements LocalContainerInterface, FileIn { $exists = \file_exists($path); - if ((ContentPutMode::hasFlag($mode, ContentPutMode::APPEND) && $exists) - || (ContentPutMode::hasFlag($mode, ContentPutMode::PREPEND) && $exists) - || (ContentPutMode::hasFlag($mode, ContentPutMode::REPLACE) && $exists) - || (!$exists && ContentPutMode::hasFlag($mode, ContentPutMode::CREATE)) - ) { - if (ContentPutMode::hasFlag($mode, ContentPutMode::APPEND) && $exists) { - \file_put_contents($path, \file_get_contents($path) . $content); - } elseif (ContentPutMode::hasFlag($mode, ContentPutMode::PREPEND) && $exists) { - \file_put_contents($path, $content . \file_get_contents($path)); - } else { - if (!Directory::exists(\dirname($path))) { - Directory::create(\dirname($path), 0755, true); + try { + if (($exists && ContentPutMode::hasFlag($mode, ContentPutMode::APPEND)) + || ($exists && ContentPutMode::hasFlag($mode, ContentPutMode::PREPEND)) + || ($exists && ContentPutMode::hasFlag($mode, ContentPutMode::REPLACE)) + || (!$exists && ContentPutMode::hasFlag($mode, ContentPutMode::CREATE)) + ) { + if ($exists && ContentPutMode::hasFlag($mode, ContentPutMode::APPEND)) { + \file_put_contents($path, \file_get_contents($path) . $content); + } elseif ($exists && ContentPutMode::hasFlag($mode, ContentPutMode::PREPEND)) { + \file_put_contents($path, $content . \file_get_contents($path)); + } else { + if (!Directory::exists(\dirname($path))) { + Directory::create(\dirname($path), 0755, true); + } + + \file_put_contents($path, $content); } - \file_put_contents($path, $content); + return true; } - - return true; + } catch (\Throwable $e) { + return false; } return false; @@ -251,7 +255,7 @@ final class File extends FileAbstract implements LocalContainerInterface, FileIn public static function size(string $path, bool $recursive = true) : int { if (!\file_exists($path)) { - throw new PathException($path); + return 0; } return (int) \filesize($path); diff --git a/tests/System/File/Local/FileTest.php b/tests/System/File/Local/FileTest.php index 362530d16..ed092622f 100644 --- a/tests/System/File/Local/FileTest.php +++ b/tests/System/File/Local/FileTest.php @@ -116,9 +116,7 @@ class FileTest extends \PHPUnit\Framework\TestCase public function testInvalidSizePath() : void { - self::expectException(\phpOMS\System\File\PathException::class); - - File::size(__DIR__ . '/invalid.txt'); + self::assertEquals(0, File::size(__DIR__ . '/invalid.txt')); } public function testInvalidPermissionPath() : void