【问题标题】:php scandir produces extra elements (2 dots)php scandir 产生额外的元素(2个点)
【发布时间】:2016-08-22 18:24:26
【问题描述】:

嗨,

我在名为 content 的目录中有以下文件:仅 index.php、page1.php、page2.php 和 page3.php。

然后我有这个代码:

 $column = scandir("content");
 foreach ($column as $value) {   
  $stvalue = str_replace(".php", "", $value);    
  echo "<div>$stvalue</div>";
}

不过,这就是我得到的:

<div>.</div>
<div>..</div>
<div>index</div>
<div>page1</div>
<div>page2</div>
<div>page3</div>

前两个元素是什么?我没有这样命名的文件,所以我不明白。

谢谢。

【问题讨论】:

  • 点(.)和双点(..)是Linux目录。它们存在于每个文件夹中。点(.)引用当前目录,而双点(..)引用父目录
  • 我可以弄清楚,但它们不应该出现,因为我不需要它们。我怎样才能摆脱它们?此外,我什至不在 linux 上,而是在 windows 上。
  • 您可以过滤特殊目录。使用 array_diff 或使用 if 语句显式检查它们。例如,您可以使用 glob() 函数仅获取 .php 文件。这样可以避免特殊目录,但要小心,因为只会显示 .php 文件。例如。 glob("*.php");
  • 你的意思是和 preg_match 一样?
  • 我能想到的一些选项:glob("*.php");或 $files = array_diff(scandir("content"), array('..', '.'));或 if($value != '.' and $value != '..') { ... }

标签: scandir


【解决方案1】:

。 - 是一个引用当前目录的特殊目录。

.. - 也是一个特殊目录,它引用父目录。

要删除特殊目录,我可以想到一些选项:

1.

foreach(glob("*.php") as $filename) {
    echo "<div>$filename</div>";
}

2.

$files = array_diff(scandir("content"), array('..', '.'));
foreach($files as $file) { ... }

3.

foreach ($files as $file) {    
    if($file != '.' and $file != '..') { ... } 
}

以上都是备选方案。如果您使用glob(),则不需要使用scandir(),反之亦然。 glob() - 需要一个模式。也可以为它提供这样的路径:
glob("[path]/*.php") - 这将列出位于路径中的任何 php 文件。 glob() 文档可以在这里找到 PHP - glob()

【讨论】:

  • 如果我使用 glob 那么我不需要 scandir?
  • 没有。这是另一种方式。 Glob 排除了一个模式,因此您可以指定列出您想要的任何模式。请参阅文档:php.net/manual/en/function.glob.php
  • 我查看了它,但我不知道如何将它与 scandir 一起使用。
  • 您不要将它与 scandir 一起使用。 Glob 是另一种列出目录中文件的方式。当你使用 glob 时。不要使用scandir。它的替代品。另外,请参阅我在答案中编写的示例。尝试像这样打印文件: print_r(glob("[path]/*.php"));
  • 可以指定目录名吗?
【解决方案2】:
$column = scandir("content");
foreach ($column as $value) {   
$stvalue = str_replace(".php", "", $value); 
if($stvalue != '.' || $stvalue != '..')   {
echo "<div>$stvalue</div>";
}
}

【讨论】:

  • 最好在纯代码答案中添加一些解释。
【解决方案3】:

. 指的是当前目录。 .. 指父目录。 这就是为什么在命令提示符下键入cd .. 将更改为父目录的原因。在 DOS、每个版本的 Windows、Mac OS X 中都是如此,不仅仅是 Linux 和 UNIX 变体。

如果您不想在页面上显示它们,只需使用 array_slice 跳过前两个条目。

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多