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 Document 代码注释规范
Apr 13 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
Aug 31 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
PHP zip扩展Linux下安装过程分享
May 05 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
smarty高级特性之过滤器的使用方法
Dec 25 PHP
thinkPHP中分页用法实例分析
Dec 26 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
PHP7创建销毁session的实例方法
Feb 03 PHP
php post换行的方法
Feb 03 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
zend framework多模块多布局配置
2011/02/26 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
php实现求相对时间函数
2015/06/15 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
js中的json对象详细介绍
2014/10/29 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
python自动格式化json文件的方法
2015/03/11 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
python用for循环求和的方法总结
2019/07/08 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
python读取Kafka实例
2019/12/23 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
Python解析多帧dicom数据详解
2020/01/13 Python
python中get和post有什么区别
2020/06/19 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
小学端午节活动方案
2014/03/13 职场文书
毕业生求职信范文
2014/06/29 职场文书
市场营销计划书
2015/01/17 职场文书
情人节单身感言
2015/08/03 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书