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的特殊设置
Oct 09 PHP
PHP入门速成教程
Mar 19 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
Nov 03 PHP
如何用php获取文件名后缀
Jun 09 PHP
浅析PHP编程中10个最常见的错误
Aug 08 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
php 三元运算符实例详细介绍
Dec 15 PHP
PHP测试框架PHPUnit组织测试操作示例
May 28 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
php web环境和命令行环境下查找php.ini的位置
Jul 17 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
Dec 29 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
smarty基础之拼接字符串的详解
2013/06/18 PHP
PHP连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
php的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
python实现合并两个数组的方法
2015/05/16 Python
巧用python和libnmapd,提取Nmap扫描结果
2016/08/23 Python
Python中shape计算矩阵的方法示例
2017/04/21 Python
Python实现的归并排序算法示例
2017/11/21 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
利用nohup来开启python文件的方法
2019/01/14 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
工作建议书范文
2014/05/13 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书