PHP file_exists问题杂谈


Posted in PHP onMay 07, 2012

问题

公司有个框架是基于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 计算两个时间戳相隔的时间的函数(小时)
Dec 18 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
如何用PHP实现插入排序?
Apr 10 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
php mysql_real_escape_string函数用法与实例教程
Sep 30 PHP
php获取文件大小的方法
Feb 26 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
php实现的树形结构数据存取类实例
Nov 29 PHP
PHP 反射(Reflection)使用实例
May 12 PHP
thinkPHP交易详情查询功能详解
Dec 02 PHP
php微信公众号开发之秒杀
Oct 20 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 #PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 #PHP
php截取后台登陆密码的代码
May 05 #PHP
php在线代理转向代码
May 05 #PHP
超小PHP小马小结(方便查找后门的朋友)
May 05 #PHP
apache mysql php 源码编译使用方法
May 03 #PHP
几个有用的php字符串过滤,转换函数代码
May 01 #PHP
You might like
PHP安装BCMath扩展的方法
2019/02/13 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
Javascript json object 与string 相互转换的简单实现
2016/09/27 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
[35:43]2018DOTA2亚洲邀请赛 4.1 小组赛B组 paiN vs Effect
2018/04/03 DOTA
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
详解Python 解压缩文件
2019/04/09 Python
快速创建python 虚拟环境
2020/11/28 Python
利用python爬取有道词典的方法
2020/12/08 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
材料物理专业个人求职信
2013/12/15 职场文书
法人任命书范本
2014/06/04 职场文书
禁毒宣传活动总结
2014/08/26 职场文书
骨干教师申报材料
2014/12/17 职场文书
关于五一放假的通知
2015/08/18 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
Python基础详解之描述符
2021/04/28 Python
sql中mod()函数取余数的用法
2021/05/29 SQL Server