From 6f830b22ba3fd5a89c56177165a53e8fa94ff9c0 Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Sat, 4 Jul 2015 06:16:40 +0200 Subject: [PATCH] Make sure the path can be written to. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../class_PathWriteProtectedException.php | 42 +++++++++++++++++++ .../class_FrameworkFileInputOutputPointer.php | 4 ++ 2 files changed, 46 insertions(+) create mode 100644 inc/classes/exceptions/file_directory/class_PathWriteProtectedException.php diff --git a/inc/classes/exceptions/file_directory/class_PathWriteProtectedException.php b/inc/classes/exceptions/file_directory/class_PathWriteProtectedException.php new file mode 100644 index 00000000..67b8bf0e --- /dev/null +++ b/inc/classes/exceptions/file_directory/class_PathWriteProtectedException.php @@ -0,0 +1,42 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +class FileWriteProtectedException extends FrameworkException { + /** + * The constructor + * + * @param $fqfn Full-qualified file name + * @param $code Code number for the exception + * @return void + */ + public function __construct ($fqfn, $code) { + // Add a message around the missing class + $message = sprintf('Path %s cannot be written to. Please check permissions.', dirname($fqfn)); + + // Call parent constructor + parent::__construct($message, $code); + } +} + +// [EOF] +?> diff --git a/inc/classes/main/file_directories/io/class_FrameworkFileInputOutputPointer.php b/inc/classes/main/file_directories/io/class_FrameworkFileInputOutputPointer.php index 08ac7811..ae372f35 100644 --- a/inc/classes/main/file_directories/io/class_FrameworkFileInputOutputPointer.php +++ b/inc/classes/main/file_directories/io/class_FrameworkFileInputOutputPointer.php @@ -41,6 +41,7 @@ class FrameworkFileInputOutputPointer extends BaseFileIo implements InputOutputP * @throws FileIsEmptyException If the given file name is NULL or empty * @throws FileReadProtectedException If PHP cannot read an existing file * @throws FileWriteProtectedException If PHP cannot write an existing file + * @throws PathWriteProtectedException If PHP cannot write to an existing path * @throws FileIoException If fopen() returns not a file resource */ public static final function createFrameworkFileInputOutputPointer ($fileName) { @@ -57,6 +58,9 @@ class FrameworkFileInputOutputPointer extends BaseFileIo implements InputOutputP } elseif ((file_exists($fileName)) && (!is_writable($fileName))) { // File exists but cannot be written throw new FileWriteProtectedException($fileName, self::EXCEPTION_FILE_CANNOT_BE_WRITTEN); + } elseif (!is_writable(dirname($fileName))) { + // Path is not writable + throw new PathWriteProtectedException($fileName, self::EXCEPTION_PATH_CANNOT_BE_WRITTEN); } // Try to open a handler -- 2.39.5