首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php,realpath与realpath + file_exists使用率

php,realpath与realpath + file_exists使用率
EN

Stack Overflow用户
提问于 2011-12-04 15:03:23
回答 3查看 3.2K关注 0票数 4

出于性能原因,在检查文件或目录是否存在时,我们应该仅使用realpath()而不是realpath() + file_exists() ??

案例A ::

代码语言:javascript
复制
if(realpath(__DIR__."/../file.php")===false)

案例B ::

代码语言:javascript
复制
if(file_exists(realpath(__DIR__."/../file.php"))===false)

我认为CASE A做了这项工作,CASE B做了两次。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-04 15:54:10

情况B不仅是多余的(因为根据docs,如果无法解析路径或文件不存在,realpath将返回false ),如果文件不存在,这就有点愚蠢了。

由于此语句将返回FALSE

代码语言:javascript
复制
realpath(__DIR__."/../file.php");

这一点:

代码语言:javascript
复制
file_exists(realpath(__DIR__."/../file.php"));

真的是这样的:

代码语言:javascript
复制
file_exists(FALSE); //!

附注:realpath永远不会返回"FALSY“值。我的意思是,它永远不会返回== FALSE而不是=== FALSE的东西(例如,NULL'',0,数组())。为什么?实际上,在*nix系统(Mac、Unix、Linux)中,实际路径总是包含对根/的引用,而在Windows中,这两个字符串在用作布尔值(例如,在if、while或for循环中)时将计算为true。这意味着您可以直接执行以下操作:

代码语言:javascript
复制
if(!realpath(__DIR__."/../file.php")) // do something

或者,如果您需要实际拥有realpath,您可以:

代码语言:javascript
复制
if(!($path = realpath(__DIR__."/../file.php")))
   // file does not exist
else
   // $path is now the full path to the file
票数 7
EN

Stack Overflow用户

发布于 2011-12-04 15:17:37

这是正确的。如果文件不存在,realpath()将返回false。案例B是多余的。

http://us3.php.net/realpath#refsect1-function.realpath-returnvalues

票数 2
EN

Stack Overflow用户

发布于 2013-03-13 05:51:34

它们几乎是一样的,但不完全一样!

案例A将检查路径是否存在,如果展开后的路径将指向文件或文件夹,则realpath将返回非False值。此外,如果您传递给realpath一个null-value或一个空字符串,它将返回当前文件夹。

案例B还可以检查返回的路径是否为常规文件(而不是目录!)。如果realpath解析到某个文件夹的路径,则is_file调用将返回false,您可以从那里处理它。

因此,realpath将检查给定路径下是否存在文件或文件夹(或指向该文件夹的符号链接),并将空值扩展到当前目录。额外的is_file检查可以确保您使用的是文件而不是文件夹。

用例B(使用is_file而不是file_exists)如果你想确定你正在处理一个文件,如果文件夹也没问题,用例A。:)

file_exists (与is_file相反)也为目录返回true

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8373859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档