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 相关文章推荐
基于header的一些常用指令详解
Jun 06 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
php实现天干地支计算器示例
Mar 14 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
php检查日期函数checkdate用法实例
Mar 19 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
Zend Framework教程之Resource Autoloading用法实例
Mar 08 PHP
php+MySql实现登录系统与输出浏览者信息功能
Jul 01 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
Apr 04 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
Laravel5框架添加自定义辅助函数的方法
Aug 01 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 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中截取中文字符串的代码小结
2011/07/17 PHP
php给数组赋值的实例方法
2019/09/26 PHP
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
Python中查看文件名和文件路径
2017/03/31 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
2019/06/03 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
CSS3弹性盒模型开发笔记(三)
2016/04/26 HTML / CSS
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
上海微创软件面试题
2012/06/14 面试题
2013年员工自我评价范文
2013/12/27 职场文书
销售主管岗位职责
2014/02/08 职场文书
《小池塘》教学反思
2014/02/28 职场文书
取保候审保证书
2014/04/30 职场文书
节水标语大全
2014/06/11 职场文书
环卫工人慰问信
2015/02/15 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
毕业酒会致辞
2015/07/29 职场文书
关于的python五子棋的算法
2022/05/02 Python