2009-04-14 14 views
24

私は知っています私はを知っています。これはsooと簡単に聞こえます。しかし、私はインターネット上で正解を見つけることができないようです。ディレクトリがPHPで存在するかどうかをチェック

解決策の1つは、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サーバー上にそのようなディレクトリが見つからない場合でも、関数はtrueを返します。

アイデア?

+0

私はもはやバグレポートへのリンクを見つけることができますが、これは、PHP 5.2で報告されたバグではなかったです。 –

答えて

53

正常に動作するはずです。 is_dir()ドキュメントから:ファイル名は を存在し、そうでない場合はFALSEディレクトリ、 ある場合

trueを返します。ところで

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

:それはこれを試していない、とにかく場合

まあ、。これらの関数の結果はstatキャッシュにキャッシュされます。そのキャッシュをクリーニングするにはclearstatcache()を使用してください。

+5

clearstatcacheの情報が+1の場合、書き込み不可能なディレクトリもディレクトリなので、 –

2

is_dir()がパス(可能)がディレクトリであることに同意した後で、おそらくopendir()を使用します。

opendir()によって返されたリソースが有効な場合は、ディレクトリがあり、それを読み取るためのハンドルがすでにあることがわかります。

有効なハンドルが返された場合は、どちらの方法でもclosedir()を必ず呼び出してください。

編集:

この回答は、いずれかの方法でディレクトリを開くことを前提としています。パスが正常/有効であることを保証する必要があるだけの場合、file_exists()ははるかに安価です。

0

あなたはこれを試みることができる:

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

は問題の解決策ではありません。 – stefs

関連する問題