PHP中判断文件存在使用is_file还是file_exists?


Posted in PHP onApril 03, 2015

判断文件存在用is_file还是file_exists?

在写程序时发现在判断文件是否存在时,有两种写法,有的人用了is_file,有的人用了file_exists,用哪个更好或者说更合适呢?

看了这篇PHP中file_exists与is_file,is_dir的区别的说法基本明白,PHP的 file_exists = is_dir + is_file。

写程序验证一下:

分别执行1000次,记录所需时间。

文件存在(当前目录)

is_file:0.4570ms

file_exists:2.0640ms

文件存在(绝对路径3层/www/hx/a/)
is_file:0.4909ms

file_exists:3.3500ms

文件存在(绝对路径5层/www/hx/a/b/c/)
is_file:0.4961ms

file_exists:4.2100ms

文件不存在(当前目录)
is_file:2.0170ms

file_exists:1.9848ms

文件不存在(绝对路径5层/www/hx/a/b/c/)
is_file:4.1909ms

file_exists:4.1502ms

目录存在
file_exists:2.9271ms

is_dir:0.4601ms

目录不存在
file_exists:2.9719ms

is_dir:2.9359ms

is_file($file)
file_exists($file)

当$file是目录时,is_file返回false,file_exists返回true

文件存在的情况下,is_file比file_exists要快得多;
要检测文件所在的目录越深,速度差越多,但至少快4倍。

文件不存在的情况下,is_file比file_exists要慢一点点,但可以忽略不计。

目录存在的情况下,is_dir比file_exists要快得多;
目录不存在的情况下,is_dir比file_exists要慢一点点,但可以忽略不计。

结论:

如果要判断文件是否存在,用函数 is_file(),
如果要判断目录是否存在,用函数 is_dir(),
好像没地方需要用file_exists了,不确定传入的参数是文件还是目录的时候用?

附测试程序:

function runtime($t1){    

    return number_format((microtime(true) - $t1)*1000, 4).'ms';

}

$times = 1000;
$t1 = microtime(true);

for($i=0;$i<$times;$i++){

    is_file('/www/hx/www.9enjoy.com/config.php');

}
echo '<br>is_file:'.runtime($t1);
$t2 = microtime(true);  

for($i=0;$i<$times;$i++){

    file_exists('/www/hx/www.9enjoy.com/config.php');

}

echo '<br>file_exists:'.runtime($t2);  
/*

$t3 = microtime(true);  

for($i=0;$i<$times;$i++){

    is_dir('/www/hx/www.9enjoy.com/');

}

echo '<br>is_dir:'.runtime($t3);   

*/
PHP 相关文章推荐
数据库的日期格式转换
Oct 09 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
基于Zend的Captcha机制的应用
May 02 PHP
PHP与javascript实现变量交互的示例代码
Jul 23 PHP
解析php开发中的中文编码问题
Aug 08 PHP
php中的静态变量的基本用法
Mar 20 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
php入门教程之Zend Studio设置与开发实例
Sep 09 PHP
thinkPHP实现签到功能的方法
Mar 15 PHP
Laravel框架用户登陆身份验证实现方法详解
Sep 14 PHP
PHP哈希表实现算法原理解析
Dec 11 PHP
php专用数组排序类ArraySortUtil用法实例
Apr 03 #PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 #PHP
PHP中返回引用类型的方法
Apr 03 #PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 #PHP
PHP5多态性与动态绑定介绍
Apr 03 #PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
Apr 03 #PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 #PHP
You might like
php5中date()得出的时间为什么不是当前时间的解决方法
2008/06/30 PHP
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
jQuery 表单验证扩展(三)
2010/10/20 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
总结Python中逻辑运算符的使用
2015/05/13 Python
Python进程间通信Queue实例解析
2018/01/25 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
Android面试题及答案
2015/09/04 面试题
技术人员面试提纲
2013/11/28 职场文书
协议书范本
2014/04/23 职场文书
事业单位人员的自我评价范文
2014/09/21 职场文书
商铺门面租房协议书
2014/10/21 职场文书
会议通知格式范文
2015/04/15 职场文书
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android