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 数组使用详解 推荐
Jun 02 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
PHP取进制余数函数代码
Jan 19 PHP
php中global和$GLOBALS[]的分析之一
Feb 02 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
Dec 18 PHP
PHP语法小结之基础和变量
Nov 22 PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
php面象对象数据库操作类实例
2014/12/02 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
Python ATM功能实现代码实例
2020/03/19 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
python中os.remove()用法及注意事项
2021/01/31 Python
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
二年级体育教学反思
2014/01/15 职场文书
电力培训心得体会
2014/09/02 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
小学运动会开幕词
2016/03/04 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python
mysql 带多个条件的查询方式
2021/06/05 MySQL