PHP中is_file不能替代file_exists的理由


Posted in PHP onMarch 04, 2014

我们可以使用下面的代码测试一下:

<?php  
      $filename = 'test.txt';
      if (is_file($filename)) {
          echo "$filename exists!\n";
      } else {
          echo "$filename no exists!\n";
      }
      sleep(10);
     if (is_file($filename)) {
          echo "$filename exists!\n";
      } else {
          echo "$filename no exists!\n";
      }
?>

在运行测试代码时,我们确保test.txt文件存在。在上面的代码中,第一次使用is_file函数判断文件是否存在,然后调用sleep函数睡眠10秒。在这10秒内,我们要把test.txt文件删除。最后看看第二次调用is_file函数的结果。输出结果如下:
test.txt exists!
test.txt exists!
嗯,你没有看错,两次都是输出“test.txt exists!”,这是为什么呢?原因就是is_file有缓存。第一次调用is_file函数的时候,PHP会把文件的属性(file stat)保存下来,当再次调用is_file的时候,如果文件名更第一次的一样,那么就会直接返回缓存。
那么把is_file改为file_exists呢?我们可以把上面代码的is_file函数改为file_exists函数,再次使用上面的测试方法测试。结果如下:
test.txt exists!
test.txt no exists!
第二次调用file_exists的时候返回文件不存在,这是因为file_exists函数没有缓存,没次调用file_exists的时候都会去磁盘搜索文件是否存在,所以第二次才会返回false。
说了那么多,我只想说明is_file不能代替file_exists使用,如果你硬是觉得is_file的性能好,那我也没办法
PHP 相关文章推荐
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
小谈php正则提取图片地址
Mar 27 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
Apr 01 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
Aug 28 PHP
PHP批量删除jQuery操作
Jul 23 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 PHP
thinkphp5 模型实例化获得数据对象的教程
Oct 18 PHP
php实现自动生成验证码的实例讲解
Nov 17 PHP
php获取目标函数执行时间示例
Mar 04 #PHP
PHP代码优化的53个细节
Mar 03 #PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 #PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 #PHP
使用php清除bom示例
Mar 03 #PHP
设置php页面编码的两种方法示例介绍
Mar 03 #PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 #PHP
You might like
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
详解vscode中vue代码颜色插件
2018/10/11 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
js实现全选和全不选
2020/07/28 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
简单的Python的curses库使用教程
2015/04/11 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
python计算时间差的方法
2015/05/20 Python
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
python 查找字符串是否存在实例详解
2017/01/20 Python
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
对Python 中矩阵或者数组相减的法则详解
2019/08/26 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
妈妈活动方案
2014/08/15 职场文书
导游词幽默开场白
2019/06/26 职场文书
Vue全局事件总线你了解吗
2022/02/24 Vue.js
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP