From e80b20f25521dc538bbdee3f35a31de2c6a931cb Mon Sep 17 00:00:00 2001 From: Rick Ellis Date: Wed, 22 Oct 2008 21:22:10 +0000 Subject: Made is_really_writable conditionally call is_writable when the function will work reliably --- system/codeigniter/Common.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'system/codeigniter') diff --git a/system/codeigniter/Common.php b/system/codeigniter/Common.php index 8c08d3565..9212f07a1 100644 --- a/system/codeigniter/Common.php +++ b/system/codeigniter/Common.php @@ -32,16 +32,23 @@ /** * Tests for file writability * - * is_writable() returns TRUE on Windows servers - * when you really can't write to the file - * as the OS reports to PHP as FALSE only if the - * read-only attribute is marked. Ugh? + * is_writable() returns TRUE on Windows servers when you really can't write to + * the file, based on the read-only attribute. is_writable() is also unreliable + * on Unix servers if safe_mode is on. * * @access private * @return void */ function is_really_writable($file) -{ +{ + // If we're on a Unix server with safe_mode off we call is_writable + if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE) + { + return is_writable($file); + } + + // For windows servers and safe_mode "on" installations we'll actually + // write a file then read it. Bah... if (is_dir($file)) { $file = rtrim($file, '/').'/'.md5(rand(1,100)); -- cgit v1.2.3-24-g4f1b