PHP file_exists问题杂谈


Posted in PHP onMay 07, 2012

问题

公司有个框架是基于smarty写的,我负责php的升级,维护人员把新环境布上来之后,测试人员找我提出经常报错(错误:提示找不到文件的)。

我追踪了一下代码,原来是smarty的这个地方报的错误。

PHP file_exists问题杂谈

错误:这里报出文件不存在。

思考过程:

1、我原以为是程序里没有这个文件呢,结果发现,文件是有的,那是怎么回事?

2、后来我再猜是不是php内核有问题,我把php的相关内核文件看了一遍,也没发现问题。结果我就把整个过程跟项目经理说去了。——事情也没解决,就这样先不了了之。升级的事情先耽误着。

今天又发现这个问题,我第一反应是php版本是不是升级了,发现没有。——后来把整个目录设置成777就没事了(chmod 777 -R 目录)。我想是不是file_exists()方法问题。

所以,我就进行了相关的调试和实验。

PHP file_exists问题杂谈

调试过程
 
调试代码:

PHP file_exists问题杂谈

目录:

PHP file_exists问题杂谈

 

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

PHP file_exists问题杂谈

PHP file_exists问题杂谈

运行结果:

PHP file_exists问题杂谈

 

PHP file_exists问题杂谈

 目录的执行权限影响file_exists()
 
1、给test一个最大的权限——755

PHP file_exists问题杂谈

 

PHP file_exists问题杂谈

PHP file_exists问题杂谈
既然成功了,说明file_exists()函数是受目录权限的限制的。
那什么样的目录权限影响file_exists()呢?
我做了几个实验:
1、文件的任何上级目录,只有写权限时报文件不存在;
2、文件的任何上级目录,只有读权限时也报文件不存在;
3、而当所有上级目录都有执行权限的时候,报文件是存在的,一切都正常。
结果,说明file_exists()在判断文件是否存在的时候是递归判断每个目录是不是有执行权限。

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

PHP file_exists问题杂谈

PHP file_exists问题杂谈

总结

在php手册上并没有提到,file_exists会受目录的执行权限影响。今通过此文告知那些也有这方面问题的开发者。仅以此为戒。

附加信息

感谢大家留的言,非常有用。经过大家的意见我再查了下手册,确实,如果目录没有执行权限,php-fpm应用进程就不能到这个目录下面去进行文件搜索,当然就认为文件不存在(实际是认为没有可执行的目录是不存在的)。
手册内容,大家可以一起斟酌一下,主要是执行权限。在这里就不详谈读写权限了(一般都很好理解)。

PHP file_exists问题杂谈

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

PHP file_exists问题杂谈

PHP 相关文章推荐
PHP date函数参数详解
Nov 27 PHP
深入PHP中慎用双等于(==)的详解
Jun 06 PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
Sep 06 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 PHP
PHP中session跨子域的三种实现方法
Jul 25 PHP
Ajax和PHP正则表达式验证表单及验证码
Sep 24 PHP
PHP Mysqli 常用代码集合
Nov 12 PHP
基于php实现的验证码小程序
Dec 13 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 #PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 #PHP
php截取后台登陆密码的代码
May 05 #PHP
php在线代理转向代码
May 05 #PHP
超小PHP小马小结(方便查找后门的朋友)
May 05 #PHP
apache mysql php 源码编译使用方法
May 03 #PHP
几个有用的php字符串过滤,转换函数代码
May 01 #PHP
You might like
php实现的Captcha验证码类实例
2014/09/22 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
Angular中$compile源码分析
2016/01/28 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
python抓取网页图片示例(python爬虫)
2014/04/27 Python
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
python算的上脚本语言吗
2020/06/22 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
仓管岗位职责范本
2014/02/08 职场文书
楼面部长岗位职责范本
2014/02/14 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
商场收银员岗位职责
2015/04/07 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python