is_file和file_exists的区别

2013-05-27 17:02:45 +08:00
 kasp
把标题放到GOOGLE里搜索,出来的结果都是关于二者读写速度的介绍,没有人提到结果上的不同,我遇到了。
情景介绍:
在开发环境下挂载开发人员的机器共享来实现程序的读取使用
开发人员A是XP系统于是就出现挂载成功但文件判断存在失败的情况。
将is_file换成file_exists一切恢复。
使用linux samba共享的未出现此问题。
原理未知。。。
3738 次点击
所在节点    PHP
10 条回复
imcaibaozi
2013-05-27 17:18:34 +08:00
is_file() will return false if the given path points to a directory. file_exists() will return true if the given path points to a valid file or directory.

http://stackoverflow.com/questions/792899/is-file-or-file-exists-in-php
kasp
2013-05-27 17:27:35 +08:00
同样是文件的情况下。
@imcaibaozi
kasp
2013-05-27 17:35:08 +08:00
$xpf = dirname(dirname(__FILE__)).'/works/xpf';//xpf目录是XP共享,通过mount挂载到linux目录
$r = $xpf.'/config/cache.php';
var_dump(file_exists($r));//true
var_dump(is_file($r));//false
imcaibaozi
2013-05-27 18:53:03 +08:00
is_link() 呢?
vietor
2013-05-27 19:05:01 +08:00
猜想is_file读了file attributes来判断类型,应该比file_exists慢
Feobe
2013-05-27 21:41:21 +08:00
php::is_file
————————————-
total self: 0.5ms
total cum: 0.5ms
calls: 10,000
php::file_exists
————————————-
total self: 41ms
total cum: 41ms
calls: 10,000
is_file却快了N倍

在php底层源码里,也确是这样
@vietor
fatpa
2013-05-28 00:59:54 +08:00
一个判断文件是否存在,一个判断是否为文件吧……
vietor
2013-05-28 08:57:35 +08:00
@Feobe 的确我错了。
之前我考察过这两个函数,我忘记了结论。经过你的数据,可以想起一部分:file attributes验证文件存在的方式最快,file_exists好像调用了别的处理,是什么想不起来了。
imcaibaozi
2013-05-28 11:36:29 +08:00
@kasp 最后到底是因为什么呢@@
kasp
2013-05-28 19:17:42 +08:00
@imcaibaozi 不知道呢,应该需要读下PHP源码看下两个函数实现的方式有什么区别吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/70306

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX