php is_writeable function bug problem

Wherein there are two aspects bug,
1, in windowns, when only the read-only file attribute, is_writeable () function does not return false, when returns true, the file may not be written.
If it is a directory, create a new file in the directory and to judge by opening the file;
if the file can open the file (fopen), to test whether the file is writable.
2, in Unix, when the configuration file open php safe_mode (safe_mode = on), is_writeable () also is unavailable.
Whether reads the configuration file safe_mode is turned on.

<pre>
/**
* Tests for file writability
*
* 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
*/
if ( ! function_exists('is_really_writable'))
{
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(mt_rand(1,100).mt_rand(1,100));

if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
{
return FALSE;
}

fclose($fp);
@chmod($file, DIR_WRITE_MODE);
@unlink($file);
return TRUE;
}
elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
{
return FALSE;
}

fclose($fp);
return TRUE;
}
}
</pre>

Guess you like

Origin www.cnblogs.com/newmiracle/p/11865496.html