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+mysql)
Nov 23 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
php实现处理输入转义字符的代码
Nov 08 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 PHP
PHP实现RTX发送消息提醒的实例代码
Jan 03 PHP
PHP中empty,isset,is_null用法和区别
Feb 19 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 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
1 Tube Radio
2021/03/02 无线电
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
Web程序工作原理详解
2014/12/25 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
JavaScript中splice与slice的区别
2017/05/09 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
Python自定义简单图轴简单实例
2018/01/08 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
2019/09/20 Python
Python计算IV值的示例讲解
2020/02/28 Python
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
Myprotein瑞典官方网站:畅销欧洲英国运动营养品牌
2018/01/22 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
weblogic面试题
2016/03/07 面试题
室内拓展活动方案
2014/02/13 职场文书
行政监察建议书
2014/05/19 职场文书
班级体育活动总结
2014/07/05 职场文书
三严三实对照检查材料
2014/09/22 职场文书
后备干部推荐材料
2014/12/24 职场文书
会议主持词开场白
2015/05/28 职场文书
员工旷工检讨书
2015/08/15 职场文书
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript