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 04 PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
基于PHP 面向对象之成员方法详解
May 04 PHP
php中用加号与用array_merge合并数组的区别深入分析
Jun 03 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
PHP生成压缩文件实例
Feb 07 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
Laravel 自动生成验证的实例讲解:login / logout
Oct 14 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 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更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
基于rollup的组件库打包体积优化小结
2018/06/18 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
对Python3 序列解包详解
2019/02/16 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
Europcar意大利:汽车租赁
2019/07/07 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
介绍一下linux的文件系统
2012/03/20 面试题
校长岗位职责
2013/11/26 职场文书
小松树教学反思
2014/02/11 职场文书
岗位竞聘书范文
2014/03/31 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫