diff options
Diffstat (limited to 'system/codeigniter')
-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));
|