0

我编写了这个简单的脚本,将目录中的所有文件显示为一组按钮。

此代码从上传目录中读取并显示表单中提交按钮内的所有文件。

$handle = opendir("upload");
echo '<form name="form" method="post" action="download.php">';
while($name = readdir($handle)) {
  echo '<input type="submit" name="file" value='.$name.' />';
}
echo '</form>';

现在这里的问题是;每次我运行脚本时,我都会在开头找到两个按钮,其中包含内容...

我一直无法弄清楚导致此问题的原因。

4

3 回答 3

3

您遇到的是文件系统使用的两个特殊文件。

  • .代表你所在的当前目录。1

  • ..表示当前目录的父目录。2

脚注:1. 路径如"/my_dir/././././././file"等价于"/my_dir/file"2.诸如“/my_dir/../my_dir/../my_dir/file”之类的路径等价于“/my_dir/file”,因为它将使您“向上”移动一级。
   
    ..


要解决向用户显示这两个的问题,请使用以下内容过滤返回的内容readdir

while  ($name = readdir ($handle)) {
  if ($name == '.' || $name == '..')
    continue; /* don't echo anything, skip to next read */

   echo '<input type="submit" name="file" value='.$name.' />';
}
于 2012-07-17T19:13:11.977 回答
0

目录列表包括 . 对于当前目录和 .. 对于父目录。

我通常使用从 PHP 手册 (http://php.net/manual/en/function.readdir.php) 获得的这个

if ($handle = opendir('.')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            echo "$entry\n";
        }
    }
    closedir($handle);
}

所以你需要做的是排除 . 和..来自输出。

于 2012-07-17T19:14:59.270 回答
0

另一种解决方案是使用这样的 FilesystemIterator:

foreach(new FilesystemIterator('upload') as $file){
    echo $file;
}

它会自动跳过。和 .. 文件系统中的条目。

于 2012-07-17T19:16:02.780 回答