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 相关文章推荐
第八节 访问方式 [8]
Oct 09 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
php中print(),print_r(),echo()的区别详解
Dec 01 PHP
apache php mysql开发环境安装教程
Jul 28 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
php中上传文件的的解决方案
Sep 25 PHP
Ajax+PHP实现的删除数据功能示例
Feb 12 PHP
PHP模型Model类封装数据库操作示例
Mar 14 PHP
PHP中命名空间的使用例子
Mar 22 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 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
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
js打造数组转json函数
2015/01/14 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
2018/12/29 jQuery
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
2019/10/15 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
Python探索之自定义实现线程池
2017/10/27 Python
Python编程实现蚁群算法详解
2017/11/13 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
Python random模块的使用示例
2020/10/10 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
工作过失检讨书
2014/02/23 职场文书
父母寄语大全
2014/04/12 职场文书
我的梦想演讲稿
2014/04/30 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
java设计模式--建造者模式详解
2021/07/21 Java/Android
js 实现验证码输入框示例详解
2022/09/23 Javascript