summaryrefslogtreecommitdiffstats
path: root/system/codeigniter/Common.php
diff options
context:
space:
mode:
Diffstat (limited to 'system/codeigniter/Common.php')
-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));