2

ディレクトリ処理の機能をテストしています。以下を含むフォルダー/ディレクトリがあります。

0 ファイルフォルダ

false ファイル フォルダ

my_pictures ファイル フォルダー

MVI_3094 mov ファイル

img01 jpeg画像

等...

ディレクトリをトラバースして特定の結果を出力する次のコードを書きました

$handle = opendir("files/");
while(($entry = readdir($handle)) !== false)
{
    if($entry == "." || $entry == "..")
    {
        continue;
    }
    if(is_dir($entry))
    {
        echo "Directory:$entry<br />";
    }
}

私の唯一の問題は、2 番目の「if」ステートメントが次の結果を出力しないことです。

echo "Directory:$entry<br />";

エントリがディレクトリであっても。「var_dump」関数を使用して手動でエントリを確認したところ、ディレクトリとして true が返されます。

どんな提案も役に立ちます

4

6 に答える 6

7

これを試して確認してください。ちょっと試して...

$handle = opendir("files/");
while(($entry = readdir($handle)) !== false)
{
    if($entry == "." || $entry == "..")
    {
        continue;
    }
    elseif(is_dir("files/".$entry))
    {
        echo "Directory:$entry<br />";
    }
}
于 2013-02-24T00:48:13.773 に答える
1

$entry は相対パスです... is_dir は絶対パスを想定しています。

于 2013-02-24T00:49:10.330 に答える
1

試す:

if(is_dir("files/".$entry))

readdir()ファイル名を返すだけです。したがって、コードはサブディレクトリではなく現在のディレクトリでファイルを探しています。

于 2013-02-24T00:50:46.110 に答える
0

これは、ディレクトリエントリのベース名をプローブするだけです:

 is_dir($entry)

opendir() の結果リストは、読み取り用に指定したディレクトリに相対的になります。したがって、次を使用する必要があります。

 is_dir("files/$entry")
于 2013-02-24T00:50:10.703 に答える
0

を使用してみてくださいDirectoryIterator

$iterator = new \DirectoryIterator(realpath('files/'));

foreach($iterator as $file){

  if($file->isDot())
    continue;

  if($file->isDir())
    printf('Directory: %s <br/>', $file->getRealPath());

}
于 2013-02-24T00:50:57.953 に答える
0

あなたの問題は、 inelseif(is_dir($entry)) {entry「file.txt」や「somedirectory」などの文字列に等しいことです。これは、ファイルを指すパスではありません。「files/file.txt」である必要があります。

これを試して:

$dir = "files/";
$handle = opendir($dir);
while(($entry = readdir($handle)) !== false)
{
    if($entry == "." || $entry == "..")
    {
        continue;
    }
    if(is_dir($dir.$entry))
    {
        echo "Directory:$entry<br />";
    }
}
于 2013-02-24T00:53:28.167 に答える