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对gzip文件或者字符串解压实例参考
Jul 25 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
基于empty函数的判断详解
Jun 17 PHP
解析wamp5下虚拟机配置文档
Jun 27 PHP
php实现图片添加水印功能
Feb 13 PHP
mysql alter table命令修改表结构实例详解
Sep 24 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
thinkPHP引入类的方法详解
Dec 08 PHP
php微信公众号开发之快递查询
Oct 20 PHP
php集成开发环境详解
Sep 24 PHP
php中关于换行的实例写法
Sep 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
MySQL授权问题总结
2007/05/06 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
JqGrid web打印实现代码
2011/05/31 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
几种响应式文字详解
2017/05/19 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
单位介绍信格式范文
2015/05/04 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
亮剑观后感600字
2015/06/05 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS