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出错界面
Oct 09 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 PHP
PHP Class&Object -- 解析PHP实现二叉树
Jun 25 PHP
PHP 转义使用详解
Jul 15 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php实现对两个数组进行减法操作的方法
Apr 17 PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 PHP
如何写php守护进程(Daemon)
Dec 30 PHP
php 多文件上传的实现实例
Oct 23 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 PHP
php用户名的密码加密更安全的方法
Jun 21 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 分页函数multi() discuz
2009/06/21 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
js 获取、清空input type="file"的值示例代码
2014/02/19 Javascript
js获取url中"?"后面的字串方法
2014/05/15 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
JS中数组重排序方法
2016/11/11 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
python实现趣味图片字符化
2019/04/30 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
工业自动化专业毕业生推荐信
2013/11/18 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
促销活动总结报告
2014/04/26 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
超市收银员岗位职责
2015/04/07 职场文书
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL