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 相关文章推荐
PHPlet在Windows下的安装
Oct 09 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
Drupal7连接多个数据库及常见问题解决
Mar 02 PHP
PHP实现抓取HTTPS内容
Dec 01 PHP
php简单socket服务器客户端代码实例
May 18 PHP
php添加数据到xml文件的简单例子
Sep 08 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
Feb 10 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
Apr 04 PHP
PHP批斗大会之缺失的异常详解
Jul 09 PHP
laravel 如何实现引入自己的函数或类库
Oct 15 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
我的论坛源代码(二)
2006/10/09 PHP
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
JavaScript实现鼠标滚轮控制页面图片切换功能示例
2017/10/14 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
Python中分数的相关使用教程
2015/03/30 Python
Python中title()方法的使用简介
2015/05/20 Python
python实现电脑自动关机
2018/06/20 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
python def 定义函数,调用函数方式
2020/06/02 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
公司财务自我评价分享
2013/12/17 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
文案策划专业自荐信
2014/07/07 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
工商局个人工作总结
2015/03/03 职场文书