Home > Backend Development > PHP Tutorial > php学习之道:php中is_file和file_exist的区别,and判断目录is_dir

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

WBOY
Release: 2016-06-23 13:53:17
Original
986 people have browsed it

在 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的性能好,那我也没办法


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template