PHP中file_exists使用中遇到的问题小结


Posted in PHP onApril 05, 2016

介绍

我发现了一个问题,今天与大家分享。我把整个过程描述一下。

问题:公司有个框架是基于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实现分页的一个示例
Oct 09 PHP
php在字符串中查找另一个字符串
Nov 19 PHP
php 过滤器实现代码
Aug 09 PHP
php 生成文字png图片的代码
Apr 17 PHP
PHP正则表达式之定界符和原子介绍
Oct 05 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
Jun 28 PHP
Symfony实现行为和模板中取得request参数的方法
Mar 17 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PDO::prepare讲解
Jan 29 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
Jul 18 PHP
PHP读取大文件的多种方法介绍
Apr 04 #PHP
PHP如何将XML转成数组
Apr 04 #PHP
php自动加载方式集合
Apr 04 #PHP
php文件上传的两种实现方法
Apr 04 #PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 #PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 #PHP
PHP命名空间和自动加载类
Apr 03 #PHP
You might like
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
php动态生成函数示例
2014/03/21 PHP
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
2014/08/22 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
Python导入txt数据到mysql的方法
2015/04/08 Python
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
python实现大文件分割与合并
2019/07/22 Python
django Admin文档生成器使用详解
2019/07/22 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
python3处理word文档实例分析
2020/12/01 Python
Crocs波兰官方商店:女鞋、男鞋、童鞋、洞洞鞋
2019/10/08 全球购物
物流管理毕业生自荐信
2013/10/24 职场文书
医生进修自我鉴定
2014/01/19 职场文书
小学毕业寄语大全
2014/04/03 职场文书
生物学专业求职信
2014/07/23 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书