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学习教程之第2天
Jun 15 PHP
延长phpmyadmin登录时间的方法
Feb 06 PHP
解析php下载远程图片函数 可伪造来路
Jun 25 PHP
浅析PHP绘图技术
Jul 03 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
Jan 03 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
PHP-CGI远程代码执行漏洞分析与防范
May 07 PHP
[原创]php正则删除html代码中class样式属性的方法
May 24 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 PHP
简单实现php上传文件功能
Sep 21 PHP
laravel 实现划分admin和home 模块分组
Oct 15 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
php 获取SWF动画截图示例代码
2014/02/10 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
nodejs的路径问题的解决
2018/06/30 NodeJs
JQuery获得内容和属性方法解析
2020/05/30 jQuery
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
Python3读取文件常用方法实例分析
2015/05/22 Python
python爬虫基本知识
2018/03/05 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
python如何进入交互模式
2020/07/06 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
html5贪吃蛇游戏使用63行代码完美实现
2013/06/25 HTML / CSS
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
简历中个人求职的自我评价模板
2013/11/29 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
大学旷课检讨书
2014/01/28 职场文书
顶撞老师检讨书
2014/02/07 职场文书