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, "."));which 给你从“。”最后一次出现的位置开始的字符串。

另外,出于测试原因,我建议您省略 @ 打开目录,因为我认为找不到路径。

于 2012-07-23T19:25:33.217 回答