PHP中file_exists使用中遇到的问题小结


Posted in PHP onApril 05, 2016

介绍

我发现了一个问题,今天与大家分享。我把整个过程描述一下。

问题:公司有个框架是基于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 相关文章推荐
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
php实现给图片加灰色半透明效果的方法
Oct 20 PHP
功能强大的php文件上传类
Aug 29 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 PHP
php7 图形用户界面GUI 开发示例
Feb 22 PHP
php实现商城购物车的思路和源码分析
Jul 23 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 PHP
PHP读取大文件的多种方法介绍
Apr 04 #PHP
PHP如何将XML转成数组
Apr 04 #PHP
php自动加载方式集合
Apr 04 #PHP
php文件上传的两种实现方法
Apr 04 #PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 #PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 #PHP
PHP命名空间和自动加载类
Apr 03 #PHP
You might like
我的论坛源代码(五)
2006/10/09 PHP
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
2015/12/10 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
JavaScript静态的动态
2006/09/18 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
九种原生js动画效果
2015/11/11 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
python中的编码知识整理汇总
2016/01/26 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
python 装饰器的使用示例
2020/10/10 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
电子商务个人自荐信
2013/12/12 职场文书
前台文员岗位职责
2013/12/28 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
学校运动会通讯稿
2015/07/18 职场文书
各国货币符号大全
2022/02/17 杂记
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA
python中的random模块和相关函数详解
2022/04/22 Python