千家信息网

PHP中is_writeable()函数存在Bug的示例分析

发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,这篇文章主要介绍了PHP中is_writeable()函数存在Bug的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP的i
千家信息网最后更新 2025年01月27日PHP中is_writeable()函数存在Bug的示例分析

这篇文章主要介绍了PHP中is_writeable()函数存在Bug的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

PHP的is_writeable()函数存在Bug,无法准确判断一个目录/文件是否可写,请写一个函数来判断目录/文件是否绝对可写

答:其中bug存在两个方面,
1)在windowns中,当文件只有只读属性时,is_writeable()函数才返回false,当返回true时,该文件不一定是可写的。
如果是目录,在目录中新建文件并通过打开文件来判断;
如果是文件,可以通过打开文件(fopen),来测试文件是否可写。

2)在Unix中,当php配置文件中开启safe_mode时(safe_mode=on),is_writeable()同样不可用。
读取配置文件是否safe_mode是否开启。

/*** 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;    }}

感谢你能够认真阅读完这篇文章,希望小编分享的"PHP中is_writeable()函数存在Bug的示例分析"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0