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+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
理解PHP5中static和const关键字的区别
Mar 19 PHP
php 来访国内外IP判断代码并实现页面跳转
Dec 18 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
Jun 20 PHP
PHP整合PayPal支付
Jun 11 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
Zend Framework入门知识点小结
Mar 19 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
Jul 07 PHP
浅谈PHP的数据库接口和技术
Dec 09 PHP
php字符集转换
Jan 23 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 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设置编码格式的方法
2013/03/05 PHP
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
javascript window对象属性整理
2009/10/24 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
javascript实现评分功能
2020/06/24 Javascript
用Python实现命令行闹钟脚本实例
2016/09/05 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
python对矩阵进行转置的2种处理方法
2019/07/17 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
员工自我鉴定
2013/10/09 职场文书
外贸销售员求职的自我评价
2013/11/23 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
有关爱国演讲稿
2014/05/07 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
工作表现证明
2015/06/15 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript