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 相关文章推荐
一个改进的UBB类
Oct 09 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
Jun 27 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
linux中cd命令使用详解
Jan 08 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
Oct 08 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
thinkPHP统计排行与分页显示功能示例
Dec 02 PHP
IIS 7.5 asp Session超时时间设置方法
Apr 17 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 PHP
php+js实现点赞功能的示例详解
Aug 07 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
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
django修改models重建数据库的操作
2020/03/31 Python
Python打印不合法的文件名
2020/07/31 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
我们的节日国庆活动方案
2014/08/19 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
齐云山导游词
2015/02/06 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android
python3中apply函数和lambda函数的使用详解
2022/02/28 Python
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js
python实现双向链表原理
2022/05/25 Python