【问题标题】:php using scandir to get folder contentsphp使用scandir获取文件夹内容
【发布时间】:2013-10-17 08:22:43
【问题描述】:

我目前正在使用 scandir 来获取上传文件夹的内容。这是我指定目录的代码:

$dir    = /var/www/vhosts/mywebsite.com/httpdocs/admin/newsletters/1234-16-10-2013/
$files = scandir($dir);

然后我会像这样遍历结果:

foreach($files as $file) {

  echo '<option value="'.$file.'">'.$file.'</option>';    

}

以上工作正常并正确填充我的选择菜单。但是由于某种原因,选择菜单中的选项如下所示:

<option value=".">.</option>
<option value="..">..</option>
<option selected="selected" value="header.jpg">header.jpg</option>
<option value="sale.jpg">sale.jpg</option>
<option value="show-now.jpg">show-now.jpg</option>

前 2 个选项包含句号。第一个有 1,第二个有 2。

有人知道这是为什么吗?是因为目录的深度吗?

任何帮助将不胜感激!

【问题讨论】:

  • 这些是对current directory (.) 和parent directory (..) 的标准引用。
  • if($file === '.' || $file === '..') {继续;}
  • @leuchtdiode,完美的简单修复!谢谢!
  • 没有问题,但如果您只想显示文件而不显示目录,您应该使用 Alma Do Mundos 解决方案“is_file($file)”

标签: php scandir


【解决方案1】:

这是因为系统条目... 是指向“当前目录”和“父目录”的指针。如果您不想在输出中看到它们,则需要过滤它们。

您可能希望使用 is_file() 过滤您的条目 - 然后 ... 将被跳过,因为它们实际上是目录(指向它们的指针)

【讨论】:

    【解决方案2】:

    Scandir 比较慢。

            foreach (new DirectoryIterator($path) as $file)
            {
                if($file->isDot()) continue;
    
                if($file->isDir()))
                {
                    print $file->getFilename() . '<br />';
                }
            }
    

    【讨论】:

    • 感谢您的回答,速度不是问题,因为最多需要加载 3 个文件。
    猜你喜欢
    • 2018-09-09
    • 2019-05-23
    • 2010-10-11
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多