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 相关文章推荐
百度站点地图(百度sitemap)生成方法分享
Jan 09 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
Jun 09 PHP
php实现的一个简单json rpc框架实例
Mar 30 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 PHP
学习PHP session的传递方式
Jun 15 PHP
PHP微信开发之模板消息回复
Jun 24 PHP
PHP的自定义模板引擎
Mar 24 PHP
php修改数组键名的方法示例
Apr 15 PHP
PHP注释语法规范与命名规范详解篇
Jan 21 PHP
PHP bin2hex()函数基础实例讲解
Feb 11 PHP
Laravel 连接(Join)示例
Oct 16 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中SESSION使用中的一点经验总结
2012/03/30 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
php格式文件打开的四种方法
2018/02/24 PHP
php session_decode函数用法讲解
2019/05/26 PHP
jquery 无限级联菜单案例分享
2013/03/26 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
js和jquery中获取非行间样式
2017/05/05 jQuery
JS实现图片预览的两种方式
2017/06/27 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
Python中偏函数用法示例
2018/06/07 Python
Python给图像添加噪声具体操作
2019/03/03 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
基于python 取余问题(%)详解
2020/06/03 Python
Django url 路由匹配过程详解
2021/01/22 Python
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
财务会计人员岗位职责
2013/11/30 职场文书
家长评语和期望
2014/02/10 职场文书
车队司机自我鉴定
2014/03/02 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
学校食堂标语
2014/10/06 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
PHP设计模式(观察者模式)
2021/07/07 PHP
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS