2011-12-04 32 views

回答

7

不僅情況B冗餘(如真實路徑返回false如果路徑不能得到解決或文件不存在具體根據docs)時,如果該文件不存在,即有點傻。

由於這條語句將返回FALSE

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

此:

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

真的是這樣的:

file_exists(FALSE); //! 


作爲附註: realpath將永遠不會返回「FALSY」值。我的意思是它永遠不會返回 == FALSE但不是 === FALSE(例如 NULL, '',0,array())。爲什麼?那麼,真正的路徑將總是包含對Windows *中* nix系統(Mac,Unix,Linux)和 C:\中根— /的引用,並且當用作布爾值時,這兩個字符串將評估爲true(例如, while或for循環)。這意味着你可以這樣做:

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 
+0

詳細解釋...好! :) – AgelessEssence

1

,他們幾乎是相同的,但不完全是!

案例A將檢查是否存在的路徑,realpath將返回非假值,如果擴大它之後的路徑將指向文件或文件夾。此外,如果您通過realpath a null -value或一個空字符串,它將返回當前文件夾。

情況B也可以檢查返回的路徑是否是普通文件(而不是目錄!)。如果realpath解析文件夾的路徑,則is_file調用將返回false,您可以從那裏處理它。

因此realpath將檢查給定路徑上是否存在文件或文件夾(或符號鏈接鏈接)並將空值擴展到當前目錄。額外的is_file檢查可以確保您使用文件而不是文件夾。

用例B(與is_file而不是file_exists)如果你想確保你正在使用一個文件,用例A如果文件夾也沒問題。 :)

file_exists(與is_file不同)還返回true的目錄。

+0

很好的額外信息,我不知道真空路徑行爲時使用null值或emptry字符串,謝謝! – AgelessEssence