参考:https://blog.csdn.net/u014649204/article/details/24114383
1、在windows中,当文件只有只读属性时,is_writeable()函数才返回false,当返回true时,该文件不一定是可写的。
如果是目录,在目录中新建文件并通过打开文件来判断;
如果是文件,可以通过打开文件(fopen),来测试文件是否可写。
2、在Unix中,当php配置文件中开启safe_mode时(safe_mode=on),is_writeable()同样不可用。
读取配置文件是否safe_mode是否开启。
function is_really_writable($file)
{
if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE) {
return is_writable($file);
}
if (is_dir($file)) {
$file = rtrim($file, '/') . '/' . md5(mt_rand(1,100) . mt_rand(1,100));
if (($fp = @fopen($file, "w+")) === FALSE) {
return FALSE;
}
fclose($fp);
@chmod($file, 0777);
@unlink($file);
} elseif (!is_file($file) OR ($fp = @fopen($file, "r+")) === FALSE) {
fclose($fp);
return FALSE;
}
return TRUE;
}