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 相关文章推荐
php下使用以下代码连接并测试
Apr 09 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
基于PHP 面向对象之成员方法详解
May 04 PHP
php 使用GD库为页面增加水印示例代码
Mar 24 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
Sep 22 PHP
PHP闭包函数传参及使用外部变量的方法
Mar 15 PHP
Symfony2框架学习笔记之表单用法详解
Mar 18 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
May 17 PHP
PHP常见数组排序方法小结
Aug 20 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 PHP
Laravel定时任务的每秒执行代码
Oct 22 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下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
学习python类方法与对象方法
2016/03/15 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
Python爬取成语接龙类网站
2018/10/19 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
2014年社区重阳节活动策划方案
2014/09/16 职场文书
工程承包协议书范本
2014/09/29 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
千手观音观后感
2015/06/03 职场文书
房屋所有权证明
2015/06/19 职场文书
初中团支书竞选稿
2015/11/21 职场文书