0

scandir()を使用して、ディレクトリ内のすべてのフォルダを作成中のメニュー構造に一覧表示しようとしています。これが私がこれまでに持っているコードです:

$directory = "models/";
$files = scandir($directory);

echo "  <a class=\"menuitem submenuheader\" href=\"#\" >models</a>
        <div class=\"submenu\">\n
        <ul>\n";

foreach($files as $file)
{
     if(is_dir($file))
     {
        echo "<li><a href=\"$file.html\">$file</a></li>\n";
     }
}
echo "</ul>\n</div>\n";

コードのif(is_dir($ file)行に問題があると思います。メニュー(。)と(..)に2つの項目がリストされています。

提供されているすべてのヘルプに感謝します!とても感謝しています。

テストを行うために、foreachループをforループに置き換えました。

$directory = "models/";
$folders = scandir($directory);

echo "<a class=\"menuitem submenuheader\" href=\"#\" >models</a>\n";
echo "<div class=\"submenu\">\n";
echo "<ul>\n";

for ($i=0; $i<count($folders); $i++) {
     if ($folders[$i] != '.' && $folders[$i] != '..') {
         if(is_dir($folders[$i])) {
            echo "<li><a href=\"" . $folders[$i] . ".html\">" . $folders[$i] . "</a></li>\n";
         }
     }
}
echo "</ul>\n</div>\n";

それでも機能しません($ディレクトリ内のフォルダをプルしません)しかし、

if(is_dir($folders[$i]))

if(!is_dir($folders[$i]))

$ディレクトリ内のすべてのファイルと単一のフォルダが一覧表示されます。なぜこれを行っているのかわからない。何か案は?

4

2 に答える 2

0

コメントは正しいです。これらを無視するには、条件を追加するだけです。

if(is_dir($file) && $file != '.' && $file != '..')
{
   echo "<li><a href=\"$file.html\">$file</a></li>\n";
}

あなたが言っていることがそうでない限り、これらは唯一の結果であり、もっとあるはずです。

また、パスを正しく呼び出していることを確認してください。そこから正しいパスを使用$_SERVER['DOCUMENT_ROOT']して構築できます。このようなもの:

$directory = $_SERVER['DOCUMENT_ROOT']."/models/";
于 2012-10-20T00:45:18.367 に答える
0

とった!!!

is_dir()は、問題のフォルダーへのフルパスをリストする必要があると思います。そうしないと、機能しません。コードを次のように変更しました。

if(is_dir($directory . $folders[$i])) {

そしてそれは完璧に動作します!

みんな助けてくれてありがとう!このサイトでブレーンストーミングを行うと、私の脳のジュースが流れます...

于 2012-10-20T01:26:34.003 に答える