介绍
 
我发现了一个问题,今天与大家分享。我把整个过程描述一下。
 
问题
 
  公司有个框架是基于smarty写的,我负责php的升级,维护人员把新环境布上来之后,测试人员找我提出经常报错(错误:提示找不到文件的)。
  我追踪了一下代码,原来是smarty的这个地方报的错误。
  

  错误:这里报出文件不存在。

  思考过程:

  1、我原以为是程序里没有这个文件呢,结果发现,文件是有的,那是怎么回事?

  2、后来我再猜是不是php内核有问题,我把php的相关内核文件看了一遍,也没发现问题。结果我就把整个过程跟项目经理说去了。——事情也没解决,就这样先不了了之。升级的事情先耽误着。

  今天又发现这个问题,我第一反应是php版本是不是升级了,发现没有。——后来把整个目录设置成777就没事了(chmod 777
-R 目录)。我想是不是file_exists()方法问题。

  所以,我就进行了相关的调试和实验。

 调试过程
 
调试代码:

目录:

观察各个权限:test对www是没有任何权限的,而执行文件index.php有读写执行权限,包含文件test.txt有读写权限。

运行结果:

 目录的执行权限影响file_exists()
 
1、给test一个最大的权限——755

既然成功了,说明file_exists()函数是受目录权限的限制的。

那什么样的目录权限影响file_exists()呢?

我做了几个实验:

1、文件的任何上级目录,只有写权限时报文件不存在;

2、文件的任何上级目录,只有读权限时也报文件不存在;

3、而当所有上级目录都有执行权限的时候,报文件是存在的,一切都正常。

结果,说明file_exists()在判断文件是否存在的时候是递归判断每个目录是不是有执行权限。

修改文件路径为相对路径,得出一样的结果。

总结
 
在php手册上并没有提到,file_exists会受目录的执行权限影响。今通过此文告知那些也有这方面问题的开发者。仅以此为戒。
 
附加信息
 
感谢大家留的言,非常有用。经过大家的意见我再查了下手册,确实,如果目录没有执行权限,php-fpm应用进程就不能到这个目录下面去进行文件搜索,当然就认为文件不存在(实际是认为没有可执行的目录是不存在的)。
手册内容,大家可以一起斟酌一下,主要是执行权限。在这里就不详谈读写权限了(一般都很好理解)。

明显手册中,对目录的执行权限有明确的指示。对目录的执行权限,就是拥有被搜索的权利。
 

 
推荐
 
如果这篇文章对你有所帮助,或者也让你解决了此类问题,请推荐一把,让哥们有更强的写作动力。

坑爹的file_exists的更多相关文章

  1. 【转】PHP 杂谈 坑爹的file_exists

    转自:http://www.cnblogs.com/baochuan/archive/2012/05/06/2445822.html 介绍   我发现了一个问题,今天与大家分享.我把整个过程描述一下. ...

  2. PHP中file_exists()函数不能检测包含中文的文件名的解决办法

    版权声明:本文为博主原创文章,未经博主允许不得转载.          PHP中一般使用file_exists()判断某个文件或者文件夹是否存在,如果文件或文件夹存在则返回true,不存在则返回fal ...

  3. Elasticsearch 的坑爹事——记录一次mapping field修改过程

    Elasticsearch 的坑爹事 本文记录一次Elasticsearch mapping field修改过程 团队使用Elasticsearch做日志的分类检索分析服务,使用了类似如下的_mapp ...

  4. [iOS]坑爹的ALAsset(Assets Library Framework)

    Assets Library Framework 可以用来做iOS上的多选器,选照片视频啥的啦就不介绍了. 目前的项目有点类似dropbox,可以选择设备内的照片然后帮你上传文件,使用了Assets ...

  5. .net core 一次坑爹的类库打包过程

    众所周知,.net core 跨平台类库引用一定要通过nuget获得.(如有问题,欢迎指出) 打包 将普通.net project转换成.net core 的类库有两种方式: 1.新建.net cor ...

  6. 首师大附中互测题:50136142WXY的坑爹百度地图【B006】(可以喝的超大桶水)

    [B006]50136142WXY的坑爹百度地图[难度B]——————————————————————————————————————————————————————————————————————— ...

  7. 坑爹坑娘坑祖宗的87端口(记一次tomcat故障排查)

    原贴如下 坑爹坑娘坑祖宗的87端口(记一次tomcat故障排查) 虽然我用的是PHPstudy部署的dedecms,还是一样栽倒这个坑里了. 总结经验:本地测试使用8000~9000的端口比较安全.

  8. 坑爹的 SONY AS100V GPS

    事情是这样的,为了记录自己的生活,也是出于对视频编辑的兴趣,买了一台 SONY 的 AS100V 运动摄像机. 公司到货,回家路上拍了一段,回家兴冲冲的连上电脑,想看看 GPS 数据,发现是 SONY ...

  9. app里使用163邮箱发送邮件,被163认为是垃圾邮件的坑爹经历!_ !

    最近有个项目,要发邮件给用户设定的邮箱报警,然后就用了163邮箱,代码是网上借来的^^,如下: package com.smartdoorbell.util; import android.os.As ...

随机推荐

  1. Oracle学习笔记_09_字符串相关函数

    二.参考资料 0.Oracle中的字符串类型及相关函数详解 1.ORACLE 字符串操作 2.oracle函数大全-字符串处理函数

  2. qt中建立图片资源文件

    qt中如果你要添加图片资源文件我们需要执行以下步骤: (1)先找好一张图片,这里就不多说了,网上资源很多. (2)把我们找好的文件统一放到一个文件夹,然后拉到工程文件所在的文件夹下 (3)在qt中新建 ...

  3. File System 定额(配额查询)

    不多说,在弄一个基于FileSytem/IndexedDB的小应用,目前处于基础开发阶段, 我们在使用FileSystem的时候无疑是需要知道浏览器的定额(配额的),怎么去查询,当然可以查询 Quot ...

  4. Sequelize 基本操作

    Sequelize 是 Node 的一个 ORM(Object-Relational Mapping) 框架,用来方便数据库操作. 配置 sequelize 以 mysql 为例 首先我们要引入npm ...

  5. Jquery ajax异步传值的两个实用的方法,你看后肯定会用第二个

    故名思议,你是个asp.net  或者是搞PHP的或者 是javaweb的 ,但是为了提高界面的效率,你必须会实用jquery的ajax,当然,在ajax异步传值的时候很头疼的一件事情就是,拼接字符串 ...

  6. 盒模型 bug 与触发 bfc

     一.margin合并 css经典bug  两个块级元素 分别设置 margin-bottom 和 margin-top 并不能达到预期效果 <style> .up{ width: 200 ...

  7. Zabbix实战-简易教程(2)--整体架构图

  8. Flask笔记

    # -*- coding: utf-8 -*- from flask import Flask,render_template,request,redirect,session,url_for imp ...

  9. 推荐几个不错的 java 教程和 HTML 教程

    Java入门第一季 Java入门第二季 2小时学会Spring Boot Java模板引擎之Freemarker HTML+CSS基础课程 H5+JS+CSS3实现七夕言情 jQuery基础系列

  10. springboot项目启动时提示Address already in use: bind

    PS:web项目在启动的时候,一般会报Address already in use: bind,常规的处理思路为:删除任务管理器中的javaw.exe进程即可:当删除仍然解决不了时,一般处理思路如下, ...