1

PHPを使用して、ディレクトリをポイントし、そのディレクトリ内の特定のファイルの名前をドロップダウンメニューに入力するドロップダウンメニューを作成しようとしています。

これが私が取り組んでいるものです:

<?php

$path = "pages/"; //change this if the script is in a different dir that the files you want
$show = array( '.php', '.html' ); //Type of files to show

$select = "<select name=\"content\" id=\"content\">";

$dh = @opendir( $path );

while( false !== ( $file = readdir( $dh ) ) ){
    $ext=substr($file,-4,4);
        if(in_array( $ext, $show )){       
            $select .= "<option value='$path/$file'>$file</option>\n";
    }
}  

$select .= "</select>";
closedir( $dh );

echo "$select";
?> 

このコードのビットは私にエラーを与えています、そして私がやろうとしていることを達成しようとするより良い方法があれば、私はそれに本当に執着していません。

4

3 に答える 3

2

ワイルドカードを処理できるため、glob()を使用する方が簡単です。

// match all files that have either .html or .php extension
$file_matcher = realpath(dirname(__FILE__)) . '/../pages/*.{php,html}';

foreach( glob($file_matcher, GLOB_BRACE) as $file ) {
  $file_name = basename($file);
  $select .= "<option value='$file'>$file_name</option>\n";
}
于 2012-07-23T19:25:24.133 に答える
1

「ページ」だけでなく、フルパス参照(つまり、/ var / www / pages /)が必要です。

また、ディレクトリ情報を簡単に直接取得するためにDirectoryIteratorオブジェクトの使用を検討することもできます(PHP 5を使用している場合)。

于 2012-07-23T19:25:14.920 に答える
1

どのエラーが発生するかわかりません。$showただし、ファイルの最後の4文字を配列の内容と比較しているため、配列では機能しないと思います。代わりに、最後に出現した「。」の位置から文字列を取得するように$ext=substr($file,-4,4);書くことができます。$ext=substr($file, strrpos( $file, "."));

また、テスト上の理由から、パスが見つからないと思うので、ディレクトリを開く@を省略することをお勧めします。

于 2012-07-23T19:25:33.217 に答える