出于性能原因,在检查文件或目录是否存在时,我们应该仅使用realpath()而不是realpath() + file_exists() ??
案例A ::
if(realpath(__DIR__."/../file.php")===false)案例B ::
if(file_exists(realpath(__DIR__."/../file.php"))===false)我认为CASE A做了这项工作,CASE B做了两次。
发布于 2011-12-04 15:54:10
情况B不仅是多余的(因为根据docs,如果无法解析路径或文件不存在,realpath将返回false ),如果文件不存在,这就有点愚蠢了。
由于此语句将返回FALSE:
realpath(__DIR__."/../file.php");这一点:
file_exists(realpath(__DIR__."/../file.php"));真的是这样的:
file_exists(FALSE); //!
附注:realpath永远不会返回"FALSY“值。我的意思是,它永远不会返回== FALSE而不是=== FALSE的东西(例如,NULL,'',0,数组())。为什么?实际上,在*nix系统(Mac、Unix、Linux)中,实际路径总是包含对根/的引用,而在Windows中,这两个字符串在用作布尔值(例如,在if、while或for循环中)时将计算为true。这意味着您可以直接执行以下操作:
if(!realpath(__DIR__."/../file.php")) // do something或者,如果您需要实际拥有realpath,您可以:
if(!($path = realpath(__DIR__."/../file.php")))
// file does not exist
else
// $path is now the full path to the file发布于 2011-12-04 15:17:37
这是正确的。如果文件不存在,realpath()将返回false。案例B是多余的。
http://us3.php.net/realpath#refsect1-function.realpath-returnvalues
发布于 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。
https://stackoverflow.com/questions/8373859
复制相似问题