2012-05-07 9 views
1

特定のディレクトリ内のすべてのファイルを繰り返し処理しているときにis_dirを使用するときに問題が発生しました。is_dirが期待どおりに動作しない

$files = array(); 

if ($dir = @opendir($folder)){ 

    while($file = readdir($dir)){ 

     if (is_dir($file)) $files[] = $file; 
    }   
    closedir($dir);  
} 
print_r($files) 

それはダンプ: ([0] =>)

そうでなければ、私があれば、 コードはので、私は、私はそれを投稿した場合、あなたがより良い私が何を意味するかを理解すると思う一種の小さいですファイルがこのコードを使用してディレクトリである天気をチェックしません:

$files = array(); 

if ($dir = @opendir($folder)){ 

    while($file = readdir($dir)){ 

     $files[] = $file; 
    }   
    closedir($dir);  
} 
print_r($files) 

それは期待したものダンプ: ([0] => .. [1] => BLA [2] => blablabla [3 ] => index.php [4] => styles.css [5] =>。)

$ file変数をパラメータとして使うのはちょっとした問題だと思いますが、それを動作させる方法はわかりません。

読んでいただきありがとうございます!

+0

すべてのサブディレクトリの一覧が必要ですか?その場合はglob()を使用してください –

+1

あなたは['glob(" * GLOB_ONLYDIR) '](http://php.net/glob)のホイールを改革しているようです。この場合、問題はすでに解決されています;) –

+0

Oks、問題解決済み、皆さん、これはかなり速かったです。このグロブオプションやopendirの相対パスについては知らなかったです。ありがとう!! – LuthorMithos

答えて

6

ていますが、opendirなどに固執することを決定した場合::だから、フォルダへのパスを付加

パスはなります$フォルダ。 '/'。 $ fileだけでなく$ file。 opendir()は、相対パスを返します。したがって、is_dirはループ内でfalseを返しています。

if ($dir = opendir($folder)){ 

    while(false !== ($file = readdir($dir))) { 
     if ($file == '.' || $file == '..') { 
      continue; 
     } else if (is_dir($folder . '/' . $file)) { 
      $files[] = $file; 
     } 
    } 

    closedir($dir);  

} 

また、false !==にも注意してください。これは、 "0"という名前のフォルダがfalse(または他のいくつかのエッジケース)と評価されるために必要です。また、実際に...を気にすることはめったにありません。そのため、コードは...を除外します。

+0

お返事いただきありがとうございます。私が最初のコメントで言ったように、すでにそれを解決しました。 – LuthorMithos

4

問題:$ファイルには絶対ファイル名ではなく、ベース名のみが含まれています。 Kolinkはコメントで言ったように、あなたはおそらくglobルートを行く方がいいでしょう

is_dir($folder . '/' . $file) 
0
<? // findfiles.php - what is in directory "videoarchive" 
$dir = 'images/videoarchive/'; // path from top 
$files = scandir($dir); 
$files_n = count($files); 

echo '<br>There are '.$files_n.' records in directory '.$dir.'<br>' ; 

$i=0; 
while($i<=$files_n){ 
    // "is_dir" only works from top directory, so append the $dir before the file 
    if (is_dir($dir.'/'.$files[$i])){ 
     $MyFileType[$i] = "D" ; // D for Directory 
    } else{ 
     $MyFileType[$i] = "F" ; // F for File 
    } 
    // print itemNo, itemType(D/F) and itemname 
    echo '<br>'.$i.'. '. $MyFileType[$i].'. ' .$files[$i] ; 
    $i++; 
} 
?> 
関連する問題