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 验证码制作(网树注释思想)
Jul 20 PHP
php visitFile()遍历指定文件夹函数
Aug 21 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
在smarty中调用php内置函数的方法
Feb 07 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
Aug 07 PHP
php对称加密算法示例
May 07 PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 PHP
php 数组随机取值的简单实例
May 23 PHP
php常用数组函数实例小结
Dec 29 PHP
利用php操作memcache缓存的基础方法示例
Aug 02 PHP
PHP与Web页面的交互示例详解二
Aug 04 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
javascript document.images实例
2008/05/27 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
初识javascript 文档碎片
2010/07/13 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
Python实现的RSS阅读器实例
2015/07/25 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
python变量的存储原理详解
2019/07/10 Python
一行Python代码过滤标点符号等特殊字符
2019/08/12 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
关于 HTML5 的七个传说小结
2012/04/12 HTML / CSS
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
应届大学生求职信
2013/12/01 职场文书
银行学习十八大感想
2014/01/11 职场文书
单位接收函范文
2015/01/30 职场文书
开学典礼观后感
2015/06/15 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
Fluentd搭建日志收集服务
2022/09/23 Servers