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面向对象全攻略 (十四) php5接口技术
Sep 30 PHP
php的一些小问题
Jul 03 PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 PHP
PHP @ at 记号的作用示例介绍
Oct 10 PHP
PHP类的特性实例分析
Sep 28 PHP
php封装的smarty类完整实例
Oct 19 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 PHP
PHP实现简易计算器功能
Aug 28 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
有关PHP 中 config.m4 的探索
Aug 26 PHP
深入浅析安装PhpStorm并激活的步骤详解
Sep 17 PHP
Yii 实现数据加密和解密
Mar 09 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 set_time_limit()函数的使用详解
2013/06/05 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
使用jQuery和PHP实现类似360功能开关效果
2014/02/12 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
ES6的新特性概览
2016/03/10 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
Pycharm学习教程(2) 代码风格
2017/05/02 Python
详解Python pygame安装过程笔记
2017/06/05 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
三年级学生评语大全
2014/12/26 职场文书
离婚财产分割协议书
2015/08/11 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android