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 相关文章推荐
UCenter中的一个可逆加密函数authcode函数代码
Jul 20 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
Mar 20 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
ThinkPHP中session函数详解
Sep 14 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
Sep 26 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
PHP 多任务秒级定时器的实现方法
May 13 PHP
php实现构建排除当前元素的乘积数组方法
Oct 06 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
php报错502badgateway解决方法
Oct 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创建无限级树型菜单
2015/11/05 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
利用css+原生js制作简单的钟表
2020/04/07 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
jQuery.parseJSON()函数详解
2019/02/28 jQuery
详解小程序退出页面时清除定时器
2019/04/28 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
python返回昨天日期的方法
2015/05/13 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
遗体告别仪式主持词
2014/03/20 职场文书
《菜园里》教学反思
2014/04/17 职场文书
外贸业务员求职信
2014/06/16 职场文书
工作失职造成投诉的检讨书范文
2014/10/05 职场文书
团队会宣传标语
2014/10/09 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
详解 TypeScript 枚举类型
2021/11/02 Javascript