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
dedecms 制作模板中使用的全局标记图文教程
Mar 11 PHP
php自动适应范围的分页代码
Aug 05 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
Jul 05 PHP
php匹配字符中链接地址的方法
Dec 22 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
PHP读书笔记整理_结构语句详解
Jul 01 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
Oct 24 PHP
laravel 关联关系遍历数组的例子
Oct 10 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 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
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
2014/02/10 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
Nginx 配置多站点vhost 的方法
2018/01/07 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
python实现批量监控网站
2016/09/09 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
python实现石头剪刀布程序
2021/01/20 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
pymysql 开启调试模式的实现
2019/09/24 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
python属于解释型语言么
2020/06/15 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
农田水利实习自我鉴定
2013/09/19 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
董事长开业致辞
2015/07/29 职场文书
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android