【问题标题】:Where does "." (dot) come from when using PHP ´scandir´“。”在哪里? (点)来自使用 PHP 'scandir' 时
【发布时间】:2016-07-09 01:22:38
【问题描述】:

我有点困惑。
我正在构建一个 PHP 函数来循环输出指定目录中的图像。

PHP

$dir = "bilder/".$objekt[0]['objekt_nr']."/thumbnail/";
$thumbnails = scandir($dir);

print_r($thumbnails);

foreach ($thumbnails as $value) {
   echo "<img src='".$dir.$value. "'>";
}

数组

(
[0] => .
[1] => ..
[2] => bjornc.jpg
[3] => test_bild3.jpg
)

HTML

<img src='bilder/22159/thumbnail/.'>
<img src='bilder/22159/thumbnail/..'>
<img src='bilder/22159/thumbnail/bjornc.jpg'>
<img src='bilder/22159/thumbnail/test_bild3.jpg'>

我怎样才能摆脱这些点?
我猜是导演点..

更新

在php.net手册中找到了最简单的方法

$thumbnails = array_diff(scandir($dir), array('..', '.'));

【问题讨论】:

  • 在 UNIX / Linux 中,. 代表当前目录(而.. 代表父目录)。它们存在于每个文件夹中。随意过滤它们,如 PHP 手册中所述。

标签: php scandir


【解决方案1】:

点目录是当前目录。点-点是目录。

如果你想在一个目录中创建一个文件列表,你真的应该跳过这两个,或者真的 any 以前导点开头的目录(在 Linux 和 OSX 等 POSIX 系统上应该是隐藏目录)。

你可以通过简单地检查文件名中的第一个字符是否是一个点来做到这一点,如果它只是跳过它(即你continue循环)。

【讨论】:

  • 谢谢。我发现 'array_diff(scandir($dir), array('..', '.'));' 很有帮助。
【解决方案2】:

您可以使用in_array as 跳过它

foreach ($thumbnails as $value) {
    if (!in_array($value, array(".", ".."))) {
        echo "<img src='" . $dir . $value . "'>";
    }
}

【讨论】:

【解决方案3】:

你也可以用这个

foreach ($thumbnails as $value) {
   if ( $value !='.' && $value !='..')
   {
     echo "<img src='".$dir.$value. "'>";
   }  
}

【讨论】:

    【解决方案4】:

    如果您要查找特定的文件类型,例如图片,最好使用glob
    它允许您传递扩展模式。
    这样您就可以确保只获取您正在寻找的文件。

    多个文件类型的示例,.jpg.png

    $dir = "bilder/".$objekt[0]['objekt_nr']."/thumbnail/";
    $files = glob("*.{jpg,png}", GLOB_BRACE);
    
    print_r($files);
    

    GLOB_BRACE - 扩展 {a,b,c} 以匹配“a”、“b”或“c”

    单个文件类型的示例,.jpg

    $dir = "bilder/".$objekt[0]['objekt_nr']."/thumbnail/";
    $files = glob("*.jpg");
    
    print_r($files);
    

    【讨论】:

      【解决方案5】:

      它们是目录和父目录,可以用以下代码删除:

          <?php
          $dir = "downloads/";
          if (is_dir($dir)){
              if ($dir_handler = opendir($dir)){
                  while (($file = readdir($dir_handler)) !== false){
                      if ($file!="."&&$file!="..") {
                          //your code
                      }
                  }
              closedir($dir_handler);
              }
          }
          ?>
      

      【讨论】:

      • 谢谢。我发现 'array_diff(scandir($dir), array('..', '.'));' 很有帮助。
      • 这也是正确的,请从您的代码中删除 NOTE 部分!!
      • @Saty 删除了该注释部分
      【解决方案6】:

      @joachim Pileborg 回答正确,顺便你也可以使用 glob()

      $thumbnails = glob("$dir/*.jpg");
      
      foreach ($thumbnails as $value) {
         echo "<img src='$value'/>";
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        • 1970-01-01
        • 2012-09-03
        • 2017-12-21
        相关资源
        最近更新 更多