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错误提示failed to open stream: HTTP request failed!的完美解决方法
Jun 06 PHP
php判断变量类型常用方法
Apr 24 PHP
PHP 图片水印类代码
Aug 27 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
php 数组字符串搜索array_search技巧
Jul 05 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 PHP
php7函数,声明,返回值等新特性介绍
May 25 PHP
PHP如何开启Opcache功能提升程序处理效率
Apr 27 PHP
PHP中->和=>的含义及使用示例解析
Aug 06 PHP
php去除数组中为0的元素的实例分析
Nov 17 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
收音机术语解释
2021/03/01 无线电
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
详解Python字符串对象的实现
2015/12/24 Python
python中子类调用父类函数的方法示例
2017/08/18 Python
Python进阶之递归函数的用法及其示例
2018/01/31 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
Python如何telnet到网络设备
2021/02/18 Python
canvas像素画板的实现代码
2018/11/21 HTML / CSS
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
大学校庆策划书
2014/01/31 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
委托书的样本
2015/01/28 职场文书
学会感恩主题班会
2015/08/12 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
详解MySQL中的主键与事务
2021/05/27 MySQL