Php scandir返回[0]=>;。和[1]=>;。。排列

Php scandir返回[0]=>;。和[1]=>;。。排列,php,Php,我有一个简单的PHP脚本,其中包含以下代码片段: $files = scandir($dir); print_r($files); 在我的阵列中,我注意到: [0] => . [1] => .. [2] => assets.php [3] => loader.php 这是我的服务器上的错误还是预期的行为,它们是什么?如果是后者,有没有办法把他们排除在扫描之外?因为我只希望从目录中获取脚本文件,而不希望获取其他文件。有没有办法将

我有一个简单的PHP脚本,其中包含以下代码片段:

$files  = scandir($dir);    
print_r($files);
在我的阵列中,我注意到:

    [0] => .
    [1] => ..
    [2] => assets.php
    [3] => loader.php

这是我的服务器上的错误还是预期的行为,它们是什么?如果是后者,有没有办法把他们排除在扫描之外?因为我只希望从目录中获取脚本文件,而不希望获取其他文件。有没有办法将它们从扫描中排除?

没有,这不是一个bug
是当前目录,
是父目录

用户贡献的注释显示了排除它们的一种方法:

$directory = '/path/to/my/directory';
$scanned_directory = array_diff(scandir($directory), array('..', '.'));
如果您使用scandir之外的其他选项,例如SPL的DirectoryIterator,则有一些选项可以排除它们(例如将其与RegexIterator组合),或者在迭代时测试它们:

$iterator = new DirectoryIterator(dirname(__FILE__));
foreach ($iterator as $fileinfo) {
    if (!$fileinfo->isDot()) {
        echo $fileinfo->getFilename() . "\n";
    }
}

谢谢,这已经解决了我的问题:)使用SPL到scandir有什么有利的理由吗?这在*NIX操作系统上很常见,并且是为相对文件夹浏览而设计的(就像你在css/img:
src=“../img/myimg.png”
)@Blag-不仅仅是*NIX,它也一直存在于Windows中,还有以前要做的事that@Dave-SPL的理解有点复杂,但它允许您执行更复杂的筛选和递归文件夹搜索;如果是这样的话,那就太糟糕了matters@MarkBaker是的,刚才看到的DOS&W$,对于控制台浏览是有意义的。