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 相关文章推荐
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
Jan 19 PHP
php中随机函数mt_rand()与rand()性能对比分析
Dec 01 PHP
php中socket通信机制实例详解
Jan 03 PHP
phpcms手机内容页面添加上一篇和下一篇
Jun 05 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
Mar 10 PHP
php实现将base64格式图片保存在指定目录的方法
Oct 13 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
PHP实现的简单组词算法示例
Apr 10 PHP
php字符串函数 str类常见用法示例
May 15 PHP
基于PHP实现堆排序原理及实例详解
Jun 19 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
Javascript & DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
微信小程序实现banner图轮播效果
2020/06/28 Javascript
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
python 实时遍历日志文件
2016/04/12 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
python的中异常处理机制
2018/08/30 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
大学生新闻专业个人自我评价
2013/11/12 职场文书
外语专业毕业生个人的自荐信
2013/11/19 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
2014年标准化工作总结
2014/12/17 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技