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编程网上资源导航
Oct 09 PHP
php代码优化及php相关问题总结
Oct 09 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
PHP学习之数组的定义和填充
Apr 17 PHP
通达OA公共代码 php常用检测函数
Dec 14 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
Jun 12 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 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连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
php 删除cookie方法详解
2014/12/01 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
潜说js对象和数组
2011/05/25 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
简述vue中的config配置
2018/01/23 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
pandas中ix的使用详细讲解
2020/03/09 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
EJB的几种类型
2012/08/15 面试题
中学生学雷锋活动心得体会
2014/03/10 职场文书
党日活动总结
2014/05/07 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers