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 数组遍历顺序理解
Sep 09 PHP
php foreach、while性能比较
Oct 15 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
Nov 11 PHP
浅谈php冒泡排序
Dec 30 PHP
php实现删除空目录的方法
Mar 16 PHP
php实现的用户查询类实例
Jun 18 PHP
php异常处理方法实例汇总
Jun 24 PHP
PHP的swoole扩展安装方法详细教程
May 18 PHP
laravel5环境隐藏index.php后缀(apache)的方法
Oct 12 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中实现中文字符进制转换原理分析
2011/12/06 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
基于JQuery实现的类似购物商城的购物车
2011/12/06 Javascript
js 字符串转换成数字的三种方法
2013/03/23 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
2020/08/27 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
[56:20]LGD vs VP Supermajor 败者组决赛 BO3 第三场 6.10
2018/07/04 DOTA
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
pytorch中index_select()的用法详解
2021/01/06 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
酒吧总经理岗位职责
2013/12/10 职场文书
市场专员岗位职责
2014/02/14 职场文书
采购类个人求职的自我评价
2014/02/18 职场文书
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫
Nginx配置使用详解
2022/07/07 Servers