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中使用Oracle数据库(4)
Oct 09 PHP
基于Windows下Apache PHP5.3.1安装教程
Jan 08 PHP
PHP 字符串长度判断效率更高的方法
Mar 02 PHP
理解PHP中的stdClass类
Apr 18 PHP
ThinkPHP CURD方法之where方法详解
Jun 18 PHP
PHP 反射(Reflection)使用实例
May 12 PHP
3种php生成唯一id的方法
Nov 23 PHP
PHP微信公众号自动发送红包API
Jun 01 PHP
php注册审核重点解析(数据访问)
May 23 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
PHP RabbitMQ消息列队
May 11 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生成二维码的两个方法和实例
2014/07/01 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
JavaScript中的私有成员
2006/09/18 Javascript
如何判断图片地址是否失效
2007/02/02 Javascript
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
Python实现类继承实例
2014/07/04 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
python爬取代理ip的示例
2020/12/18 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
中国电视购物:快乐购
2017/02/04 全球购物
旅游管理专业个人求职信范文
2013/12/24 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
影视广告专业求职信
2014/09/02 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
公司员工离职感言
2015/08/03 职场文书
会议室使用管理制度
2015/08/06 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang