summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRick Ellis <rick.ellis@ellislab.com>2008-10-22 23:22:10 +0200
committerRick Ellis <rick.ellis@ellislab.com>2008-10-22 23:22:10 +0200
commite80b20f25521dc538bbdee3f35a31de2c6a931cb (patch)
tree596c3612677d7999dc985ddd38736032076fe001
parent7709aca4a8325da5906a7585a831456cbd8abf47 (diff)
Made is_really_writable conditionally call is_writable when the function will work reliably
-rw-r--r--system/codeigniter/Common.php17
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));