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 google或baidu分页代码
Nov 26 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
Session保存到数据库的php类分享
Oct 24 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
Jan 11 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
PHP解析RSS的方法
Mar 05 PHP
smarty模板判断数组为空的方法
Jun 10 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
PHP中PDO事务处理操作示例
May 02 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
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
Laravel5.1框架路由分组用法实例分析
2020/01/04 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
下拉框select的绑定示例
2014/09/04 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
Python中针对函数处理的特殊方法
2014/03/06 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
Django中ORM的基本使用教程
2020/12/22 Python
详解Python中的文件操作
2021/01/14 Python
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
英文自荐信格式
2013/11/28 职场文书
党员公开承诺事项
2014/03/25 职场文书
初中作文评语大全
2014/04/23 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android