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 相关文章推荐
Ajax PHP分页演示
Jan 02 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
Nov 11 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
PHP单例模式简单用法示例
Jun 23 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
Redis在Laravel项目中的应用实例详解
Aug 11 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
swoole锁的机制代码实例讲解
Mar 04 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
PHP实现文件下载详解
2014/11/27 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
同时安装Python2 & Python3 cmd下版本自由选择的方法
2017/12/09 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
Python序列化pickle模块使用详解
2020/03/05 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
pycharm导入源码的具体步骤
2020/08/04 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
爱心捐款感谢信
2015/01/20 职场文书
肖申克救赎观后感
2015/06/02 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
python 下划线的多种应用场景总结
2021/05/12 Python
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
JS 基本概念详细介绍
2021/10/16 Javascript