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小程序自动提交到自助友情连接
Nov 24 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
PHP写日志的实现方法
Nov 05 PHP
PDO防注入原理分析以及注意事项
Feb 25 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 PHP
Laravel框架使用Redis的方法详解
May 30 PHP
Yii2语言国际化自动配置详解
Aug 22 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 PHP
php反射学习之依赖注入示例
Jun 14 PHP
Linux系统下安装PHP7.3版本
Jun 26 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
一个更简单的无限级分类菜单代码
2007/01/16 PHP
基于php iconv函数的使用详解
2013/06/09 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
Python程序设计入门(4)模块和包
2014/06/16 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
tensorflow更改变量的值实例
2018/07/30 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
python数据类型强制转换实例详解
2020/06/22 Python
keras输出预测值和真实值方式
2020/06/27 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
领导的自我鉴定
2013/12/28 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
工程进度款催款函
2015/06/24 职场文书
初中团委工作总结
2015/08/13 职场文书
感谢师恩主题班会
2015/08/17 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python