diff options
author | Rick Ellis <rick.ellis@ellislab.com> | 2008-10-22 23:22:10 +0200 |
---|---|---|
committer | Rick Ellis <rick.ellis@ellislab.com> | 2008-10-22 23:22:10 +0200 |
commit | e80b20f25521dc538bbdee3f35a31de2c6a931cb (patch) | |
tree | 596c3612677d7999dc985ddd38736032076fe001 | |
parent | 7709aca4a8325da5906a7585a831456cbd8abf47 (diff) |
Made is_really_writable conditionally call is_writable when the function will work reliably
-rw-r--r-- | system/codeigniter/Common.php | 17 |
1 files changed, 12 insertions, 5 deletions
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));
|