Php, realpath与realpath + file_exists的用法


php, realpath versus realpath + file_exists usage

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

CASE A::

if(realpath(__DIR__."/../file.php")===false)

CASE B::

if(file_exists(realpath(__DIR__."/../file.php"))===false)

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

不仅情况B是多余的(因为如果路径无法解析或文件不存在,则realpath返回false),如果文件不存在,那就有点傻了。

由于该语句将返回FALSE:

realpath(__DIR__."/../file.php");

:

file_exists(realpath(__DIR__."/../file.php"));

真的是这样吗?

file_exists(FALSE); //!


作为旁注:realpath将永远不会返回"FALSY"值。通过这一点,我的意思是,它将永远不会返回的东西,== FALSE,但没有=== FALSE(例如。NULL, '', 0, array())。为什么?那么,实际路径将始终包含对根目录的引用—*nix系统(Mac, Unix, Linux)中的/和Windows中的C:',并且这两个字符串在用作布尔值(例如在if, while或for循环中)时将计算为true。这意味着你可以这样做:

if(!realpath(__DIR__."/../file.php")) // do something

或者,如果你真的需要的实际路径,你可以:

if(!($path = realpath(__DIR__."/../file.php")))
   // file does not exist
else
   // $path is now the full path to the file

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

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

它们几乎相同,但又不完全相同!

Case A将检查路径是否存在,如果路径展开后指向文件或文件夹realpath将返回非假值。此外,如果您向realpath传递null -值或空字符串,它将返回当前文件夹。

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

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

用例B(用is_file代替file_exists),如果你想确保你正在处理一个文件,用例a,如果文件夹也可以。:)

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