zoukankan      html  css  js  c++  java
  • php is_writeable函数bug问题

    其中bug存在两个方面,
    1、在windowns中,当文件只有只读属性时,is_writeable()函数才返回false,当返回true时,该文件不一定是可写的。
    如果是目录,在目录中新建文件并通过打开文件来判断;
    如果是文件,可以通过打开文件(fopen),来测试文件是否可写。
    2、在Unix中,当php配置文件中开启safe_mode时(safe_mode=on),is_writeable()同样不可用。
    读取配置文件是否safe_mode是否开启。

    <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>

  • 相关阅读:
    札记:Fragment基础
    [BOT] 一种android中实现“圆角矩形”的方法
    [翻译]Bitmap的异步加载和缓存
    札记:android手势识别,MotionEvent
    [虾扯蛋] android界面框架-Window
    关情纸尾-----OC-基本命令
    这个寒假真正意义的开始----第一天学习OC。
    ubuntu16虚拟机安装win10
    ubuntu16安装企业微信
    ubuntu16安装wine
  • 原文地址:https://www.cnblogs.com/newmiracle/p/11865496.html
Copyright © 2011-2022 走看看