/**

* 文件或目录权限检查函数

*

* @access public

* @param string $file_path 文件路径

* @param bool $rename_prv 是否在检查修改权限时检查执行rename()函数的权限

*

* @return int 返回值的取值范围为{0 <= x <= 15},每个值表示的含义可由四位二进制数组合推出。

* 返回值在二进制计数法中,四位由高到低分别代表

* 可执行rename()函数权限、可对文件追加内容权限、可写入文件权限、可读取文件权限。

*/

function file_mode_info($file_path)

{

/* 如果不存在,则不可读、不可写、不可改 */

if (!file_exists($file_path))

{

return false;

}

$mark = 0;

if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')

{

/* 测试文件 */

$test_file = $file_path . '/cf_test.txt';

/* 如果是目录 */

if (is_dir($file_path))

{

/* 检查目录是否可读 */

$dir = @opendir($file_path);

if ($dir === false)

{

return $mark; //如果目录打开失败,直接返回目录不可修改、不可写、不可读

}

if (@readdir($dir) !== false)

{

$mark ^= 1; //目录可读 001,目录不可读 000

}

@closedir($dir);

/* 检查目录是否可写 */

$fp = @fopen($test_file, 'wb');

if ($fp === false)

{

return $mark; //如果目录中的文件创建失败,返回不可写。

}

if (@fwrite($fp, 'directory access testing.') !== false)

{

$mark ^= 2; //目录可写可读011,目录可写不可读 010

}

@fclose($fp);

@unlink($test_file);

/* 检查目录是否可修改 */

$fp = @fopen($test_file, 'ab+');

if ($fp === false)

{

return $mark;

}

if (@fwrite($fp, "modify test.rn") !== false)

{

$mark ^= 4;

}

@fclose($fp);

/* 检查目录下是否有执行rename()函数的权限 */

if (@rename($test_file, $test_file) !== false)

{

$mark ^= 8;

}

@unlink($test_file);

}

/* 如果是文件 */

elseif (is_file($file_path))

{

/* 以读方式打开 */

$fp = @fopen($file_path, 'rb');

if ($fp)

{

$mark ^= 1; //可读 001

}

@fclose($fp);

/* 试着修改文件 */

$fp = @fopen($file_path, 'ab+');

if ($fp && @fwrite($fp, '') !== false)

{

$mark ^= 6; //可修改可写可读 111,不可修改可写可读011...

}

@fclose($fp);

/* 检查目录下是否有执行rename()函数的权限 */

if (@rename($test_file, $test_file) !== false)

{

$mark ^= 8;

}

}

}

else

{

if (@is_readable($file_path))

{

$mark ^= 1;

}

if (@is_writable($file_path))

{

$mark ^= 14;

}

}

return $mark;

}

php 检查路劲是否存在,php 检查文件或目录是否存在代码总结相关推荐

  1. 修改pppd拨号软件的DNS保存路劲以及/etc/resolv.conf文件DNS会被覆盖问题

    修改pppd拨号软件的DNS保存路劲 目的 一.从源码中找到pppd源码,修改DNS写入路劲 二.修改写入方式 三.编译 四.最后的补充,最好的解决方案 目的 在arm板中,pppd拨号软件获取的DN ...

  2. python相对路径-Python中的绝对路劲和相对路径

    1.绝对路径 os.path.abspath("文件名"): 显示的是一个文件的绝对路劲 eg: >>> import os >>> os.ch ...

  3. GBDT家族:GBDT家族成员的演进路劲、xgboost模型、lightGBM、LightGBM 相对于 XGBoost 的优点、catboost、xgboost、catboost、lightGBM对

    GBDT家族:GBDT家族成员的演进路劲.xgboost模型.lightGBM.LightGBM 相对于 XGBoost 的优点.catboost.xgboost.catboost.lightGBM对 ...

  4. 修改Eclipse发布路劲(Deploy path)

    Eclipse默认的发布路劲在用户的workspace里,比较难找,为了方便查看,可以将发布路劲修改为自己想要的. 修改方法: 1.先stop Servers下tomcat里的项目,然后remove ...

  5. weblogic概览下的上下文根配置_Weblogic服务下获取上下文路劲问题

    问题描述: 如果一个项目用weblogic部署的服务,在web_inf文件夹下只有web.xml文件,没有配置weblogic.xml文件时,这是用 类.class.getClassLoader(). ...

  6. java的未检查异常有哪些_Java:检查异常与未检查异常

    一.异常的介绍 Throwable 是 Java 中所有错误和异常的超类.Java 虚拟机仅抛出属于此类(或其子类之一)的实例对象,或者是 throw 语句也可以抛出该对象.同样,catch 子句中的 ...

  7. UEditor 1.36 版本 jsp版上传图片自定义路劲配置

    2019独角兽企业重金招聘Python工程师标准>>> 由于项目需要,最近使用了ueditor,并实现了图片以及文件的上传功能.走了不少弯路,花了点时间总结总结,记录一下以防忘记! ...

  8. 服务器取绝对路劲的问题

    服务器环境中取当前classPath的绝对路劲: 第一种方式: ClassLoader loader = Thread.currentThread().getContextClassLoader(); ...

  9. java 检测目录下的文件_如何在Java中检查文件是目录还是文件

    java 检测目录下的文件 java.io.File class contains two methods using which we can find out if the file is a d ...

最新文章

  1. 我总结的30条架构原则
  2. 让文本输入框只能输入数字
  3. 如何快速找到最优路线?深入理解游戏中寻路算法
  4. python参数化_Python 中如何实现参数化测试的方法示例
  5. 最长非单调增序列(最长非单调增序列,,要用N*LOG N(非常值得琢磨的算法。)...
  6. python输出星号_Python的星号(*、**)的作用
  7. 精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
  8. 仿微信导航栏滑动门练习
  9. pc系统安全问题让你防不胜防--安装系统屏保时,偶然发现没有安装的ie工具栏软件baidu_jpwb(Just Under/WINDOWS)!
  10. vs2015安装vs assist 教程
  11. 进出队C语言不用链表,C语言面试题总汇简要
  12. 计算机基础课程听课记录,听课记录-计算机应用基础
  13. MySQL math函数
  14. 色彩大全,色彩配色大全
  15. ansible使用之——网络设备自动巡检
  16. 郑州互联网公司和生活成本
  17. kali渗透实战02---获取内网QQ相册
  18. Cadence Orcad Capture CIS 如何替换元器件所有信息
  19. PDMS二次开发(一)——PML类型程序类型与概念
  20. x的四次方+1因式分解

热门文章

  1. linux用户怎么归纳到组,Linux用户和组命令总结
  2. 今晚直播 | Oracle技术加油站:快速处理紧急性能问题的工具与经验
  3. Oracle 20c 新特性知多少?ANSI SQL 全支持之 EXCEPT 运算符增强
  4. 外连接有 OR 关联条件只能走 NL优化
  5. 一文带你梳理Clang编译步骤及命令
  6. WeLink的杀手锏和远程办公软件的另一面
  7. 从五大结构体,带你掌握鸿蒙轻内核动态内存Dynamic Memory
  8. 华为云PB级数据库GaussDB(for Redis)揭秘第九期:与HBase的对比
  9. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】
  10. Python爬虫从入门到精通——基本库re的使用:正则表达式