3

特定のディレクトリ内のすべてのファイルを反復処理しているときにis_dirを使用すると、問題が発生します。コードはちょっと小さいので、投稿すると私が何を意味するのかよく理解できると思います。

 $files = array();

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

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

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

ダンプします:([0] =>。)

それ以外の場合、次のコードを使用してファイルがdirであるかどうかを確認しないと、次のようになります。

 $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 varをパラメーターとして使用することは、問題ではないと思いますが、それを機能させる方法がわかりません。

読んでくれてありがとう!

4

3 に答える 3

6

Kolinkがコメントで言ったように、あなたはおそらくglobルートに行くほうが良いでしょう、しかしあなたがopendirに固執することに決めたなら:

パスは$folderになります。'/'。$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(または他のいくつかのエッジケース)と評価されるためです。.また、実際にとを気にすることはめったにない..ので、コードがそこにあり、フィルタリング...て除外します。

于 2012-05-07T21:32:37.167 に答える
3

問題は次のとおりです。$fileにはベース名のみが含まれ、絶対ファイル名は含まれていません。したがって、フォルダへのパスを前に追加します。

is_dir($folder . '/' . $file)
于 2012-05-07T21:32:07.717 に答える
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++;
}
?>
于 2015-09-18T14:09:40.127 に答える