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 相关文章推荐
优化NFR之一 --MSSQL Hello Buffer Overflow
Oct 09 PHP
main.php
Dec 09 PHP
PHP STRING 陷阱原理说明
Jul 24 PHP
php批量更改数据库表前缀实现方法
Oct 26 PHP
php中Socket创建与监听实现方法
Jan 05 PHP
常见的四种POST 提交数据方式(小总结)
Oct 08 PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
May 13 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
Aug 18 PHP
Yii 框架控制器创建使用及控制器响应操作示例
Oct 14 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错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
php计算整个目录大小的方法
2015/06/19 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
PHP7新增函数
2021/03/09 PHP
newxtree.js代码
2007/03/13 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
微信小程序实现下拉菜单切换效果
2020/03/30 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
python获取多线程及子线程的返回值
2017/11/15 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
python内存管理机制原理详解
2019/08/12 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
还款承诺书范文
2014/05/20 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers
Python如何加载模型并查看网络
2022/07/15 Python
TypeScript 内置高级类型编程示例
2022/09/23 Javascript