2009-04-14 41 views
24

我知道,我知道,這聽起來soo容易。但我似乎無法在互聯網上找到正確的答案。檢查一個目錄是否存在於PHP

我發現的解決方案之一是使用is_dir

if(is_dir($dir)) 
    echo 'directory exists'; 
else 
    echo 'drectory not exist'; 

但這是錯誤 - 所有這個函數的作用是檢查$dir是否是一個目錄,它不檢查目錄是否存在,還是不行。換句話說,如果我把:

$rootDir = "C:\\Documents and Settings\\test\\My Documents\\Image Directory\\Me Dog\\"; 

,則函數會返回一個真實的,即使你可以找到你的Web服務器上沒有這樣的目錄。

任何想法?

+0

這是PHP 5.2報告的bug,雖然我再也找不到鏈接錯誤報告。 – 2009-04-14 07:55:00

回答

53

應該正常工作。從is_dir()文件:如果文件存在和 是一個目錄,FALSE 否則

返回TRUE。

好了,反正如果不試試這個:

if(file_exists($dir) && is_dir($dir)) 

BTW。這些函數的結果被緩存在stat緩存中。使用clearstatcache()清理該緩存。

+5

對於clearstatcache信息+1,總是知道 – 2012-08-09 08:04:38

2

在is_dir()同意路徑(可能)是目錄之後,您可能會想要使用opendir()

如果opendir()返回的資源是有效的,那麼你知道你有一個目錄,並且已經有了一個讀取它的句柄。

只要返回有效的句柄,一定要調用closedir(),無論哪種方式。

編輯:

此答案假定您將以任何方式打開目錄。如果你只需要確保路徑是有效的,file_exists()便宜得多。

0

你可以試試這個:

if(is_dir($dir) && is_writeable($dir)) 
{ 
    // ... 
} 
+6

不是解決問題的辦法,因爲不可寫目錄也是目錄。 – stefs 2009-04-14 07:53:03