首页 > 编程 > PHP > 正文

php学习之道:坑爹的file_exists

2020-03-22 17:47:17
字体:
来源:转载
供稿:网友
  • 介绍 我发现了一个问题,今天与大家分享。我把整个过程描述一下。 问题   公司有个框架是基于smarty写的,我负责php的升级,维护人员把新环境布上来之后,测试人员找我提出经常报错(错误:提示找不到文件的)。  我追踪了一下代码,原来是smarty的这个地方报的错误。  

    qqGqysLH6dKyw7u94r72o6y+zdXi0fnPyLK7wcvBy9auoaPJ/by2tcTKwsfpz8i1os7z18WhozwvcD4KPHA+oaGhob3xzOzT1reiz9bV4rj2zsrM4qOsztK12tK7t7TTpsrHcGhwsOaxvsrHsrvKx8n9vLbBy6Ost6LP1sO709Cho6Gqoaq688C0sNHV+7j2xL/CvMno1sOzyTc3N77Nw7vKwsHLKGNobW9kIDc3NyAtUiDEv8K8KaGjztLP68rHsrvKx2ZpbGVfZXhpc3RzKCm3vbeozsrM4qGjPC9wPgo8cD6hoaGhy/nS1KOsztK+zb340NDBy8/gudi1xLX3ytS6zcq10emhoyA8L3A+CjxwPjxpbWcgc3JjPQ=="http://www.it165.net/uploadfile/files/2014/0721/20140721184542570.png" alt="">

    调试过程 调试代码:

    目录:

    观察各个权限:test对www是没有任何权限的,而执行文件index.php有读写执行权限,包含文件test.txt有读写权限。

    运行结果:

    qqGqNzU1Cgo8cD48aW1nIHNyYz0="http://www.it165.net/uploadfile/files/2014/0721/20140721184543577.png" alt="">

    既然成功了,说明file_exists()函数是受目录权限的限制的。

    那什么样的目录权限影响file_exists()呢?

    我做了几个实验:

    1、文件的任何上级目录,只有写权限时报文件不存在;

    2、文件的任何上级目录,只有读权限时也报文件不存在;

    3、而当所有上级目录都有执行权限的时候,报文件是存在的,一切都正常。

    结果,说明file_exists()在判断文件是否存在的时候是递归判断每个目录是不是有执行权限。

    修改文件路径为相对路径,得出一样的结果。

    总结 在php手册上并没有提到,file_exists会受目录的执行权限影响。今通过此文告知那些也有这方面问题的开发者。仅以此为戒。 附加信息 感谢大家留的言,非常有用。经过大家的意见我再查了下手册,确实,如果目录没有执行权限,php-fpm应用进程就不能到这个目录下面去进行文件搜索,当然就认为文件不存在(实际是认为没有可执行的目录是不存在的)。手册内容,大家可以一起斟酌一下,主要是执行权限。在这里就不详谈读写权限了(一般都很好理解)。

    明显手册中,对目录的执行权限有明确的指示。对目录的执行权限,就是拥有被搜索的权利。

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表