php学习之道:php中is_file和file_exist的区别,and判断目录is_dir

PHP中,is_file和file_isexist是有很小区别的

1) is_file:

$path ="/path/to/file/text.txt";

if(file_exists($path))

echo "File Exists";

else

echo "File not Exists";

比如在这个例子中,文件存在会返回true,不存在返回false,但注意的是,假如传入一个

正确的路径(比如一个文件目录),也会返回true:

$path ="/path/to/file";

2) file_isexist()

这个就不会了,真的是判断一个文件是否存在,假如传入上面的一个虽然看上去

正确的路径,也是返回false的哦

看了这篇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了,不确定传入的参数是文件还是目录的时候用?

我们可以使用下面的代码测试一下:

复制代码代码如下:

$filename = ‘test.txt‘;

if (is_file($filename)) {

echo "$filename exists!\n";

} else {

echo "$filename no exists!\n";

}

sleep(10);

if (is_file($filename)) {

echo "$filename exists!\n";

} else {

echo "$filename no exists!\n";

}

?>

在运行测试代码时,我们确保test.txt文件存在。在上面的代码中,第一次使用is_file函数判断文件是否存在,然后调用sleep函数睡眠10秒。在这10秒内,我们要把test.txt文件删除。最后看看第二次调用is_file函数的结果。输出结果如下:

test.txt exists!

test.txt exists!

嗯,你没有看错,两次都是输出“test.txt exists!”,这是为什么呢?原因就是is_file有缓存。第一次调用is_file函数的时候,PHP会把文件的属性(file stat)保存下来,当再次调用is_file的时候,如果文件名更第一次的一样,那么就会直接返回缓存。

那么把is_file改为file_exists呢?我们可以把上面代码的is_file函数改为file_exists函数,再次使用上面的测试方法测试。结果如下:

test.txt exists!

test.txt no exists!

第二次调用file_exists的时候返回文件不存在,这是因为file_exists函数没有缓存,没次调用file_exists的时候都会去磁盘搜索文件是否存在,所以第二次才会返回false。

说了那么多,我只想说明is_file不能代替file_exists使用,如果你硬是觉得is_file的性能好,那我也没办法

php学习之道:php中is_file和file_exist的区别,and判断目录is_dir

时间: 2024-10-11 20:46:47

php学习之道:php中is_file和file_exist的区别,and判断目录is_dir的相关文章

php学习之道:php empty()和isset()的区别

在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问题不再. 顾名思义,empty() 判断一个变量是否为"空",isset() 判断一个变量是否已经设置.正是这种所谓的"顾名思义",令我开始时走了些弯路:当一个变量值等于0时,empty()也会成立(True),因而会发生一些意外.原来,empty() 和 isset(

Java学习之道:Java构造器和方法的区别

摘要 要学习Java,你必须理解构造器.因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆.但是,构造器和方法又有很多重要的区别. 原作者:Robert Nielsen 原站:www.javaworld.com 我们说构造器是一种方法,就象讲澳大利亚的鸭嘴兽是一种哺育动物.(按:老外喜欢打比喻,我也就照着翻译).要理解鸭嘴兽,那么先必须理解它和其他哺育动物的区别.同样地,要理解构造器,那么就要了解构造器和方法的区别.所有学习java的人,尤其是对那些要认证考试的,理解构造器是非常重要的.下

php学习之道:php中is_file和file_exist的差别,and推断文件夹is_dir

在PHP中,is_file和file_isexist是有非常小差别的 1) is_file: $path ="/path/to/file/text.txt"; if(file_exists($path)) echo "File Exists"; else echo "File not Exists"; 比方在这个样例中,文件存在会返回true,不存在返回false,但注意的是.假如传入一个 正确的路径(比方一个文件文件夹).也会返回true: $

C语言学习笔记 (002) - C++中引用和指针的区别(转载)

下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const.volatile等等.见下图,所示指针的含义: 引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用.见下图,所示引用的含义: 2.指针和引用的区别 首先,引用不可以为空,但指针可以为空.前面也说过了引用是对象的别名,引用为空--对象都不存在,怎么可能有别名!故定义一个引用的时候,必须初始化.因此

【课外阅读】拖延症预防及治疗(《学习之道》)

内容主要来自<学习之道>中第5章:预防拖延,第6章:小恶魔无处不在. 初步认识: 不要用意志力来抵抗拖延,因为意志力需要动用大量的神经资源. 我们拖延的,往往是让我们感到不安的事情,那时大脑中的痛觉中心被激活了. 令人痛苦的是预感本身,当你真正投入的时候,痛苦就消失了,“对一项任务的恐惧会比这项任务本身消耗更多的时间和能量.” 人们往往讨厌做自己不擅长的事情,当你开始对某件事游刃有余,你就会乐在其中了. 大脑是如何拖延的? 每次想到不怎么喜欢的事都会激活大脑中的痛觉中枢,逃到那些令你更开心的事

php学习之道:php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类

1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求:  Web Service是真正"办事"的那个,提供一种办事接口的统称. WSDL提供"能办的事的文档说明":  对要提供的服务的一种描述格式.我想帮你的忙,但是我要告诉你我都能干什么,以及干这些事情需要的参数类型. SOAP提供"请求"的规范:  向服务接口传递请求的格式,包括方法和参数等.你想让人家办事,总得告诉人家

php学习之道:php中iconv函数 详解

iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库. 用法如下: $string = "亲爱的朋友欢迎访问胡文芳的博客,希望给您带来一点点的帮助!"; iconv("utf8","gbk",$string)//将字符串string  编码由utf8转变成gbk: 扩展如下: echo $str= '你好,欢迎访问胡文芳的博客,该博客记录一个程序员的成长过程!'; echo ' '; echo iconv('GB2312

Java学习之道:Java中十个常见的违规编码

最近,我给Java项目做了一次代码清理工作.经过清理后,我发现一组常见的违规代码(指不规范的代码并不表示代码错误)重复出现在代码中.因此,我把常见的这些违规编码总结成一份列表,分享给大家以帮助Java爱好者提高代码的质量和可维护性. 这份列表没有依据任何规则或顺序,所有的这些都是通过代码质量工具包括CheckStyle,FindBugs和PMD检查出.一起来看下: 一.Eclipse编译器提供源代码格式输入 Eclipse提供自动源码格式选项,并且组织输入(删除未使用的代码).你可以使用下面的这

JavaFX学习之道:JavaFX之TableView

TableView表 TableColumn列 构建一个表主要有TableView,TableColumn,ObservableList,Bean. 添加列table.getColumns().addAll(firstNameCol, lastNameCol, emailCol); ObservableList里面是存放的数据 table.setItems(observableList);添加数据 observableList里面一般是存放的Bean,列与Bean之间建立联系,从而获取值. 列与