为什么isDot()在我身上失败?(PHP)


Why does isDot() fail on me? (PHP)

我正在完成一个列出目录中文件的代码段。我在目录中列出文件没有问题,但出于某种原因,我可以使用isDot()方法来确保文件不是"."或".."。以下导致了此错误:

Fatal error: Call to undefined method SplFileInfo::isDot() in ....

在我切换到使用递归迭代程序之前,我使用的是目录迭代程序,它运行得很好。下面的代码有什么问题吗?它应该起作用。

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathToFolder));
//if there is a subdirectory it makes sure the proper extension is passed
foreach($files as $name => $file){      
            if (!$file->isDot()) {    //this is where it shuts me down          
            $realfile = str_replace($pathToFolder, "", $file);
            $url = getDownloadLink($folderID, $realfile);
        $fileArray[] = $url;            
        }       
}

这是因为DirectoryIterator::current()(方法,即foreach循环中的调用)返回一个对象,该对象本身属于DirectoryIterator类型。FileSystemIteratorRecursiveDirectoryIterator扩展的)返回默认为SplFileInfo的对象。你可以影响,什么是回报,通过标志

$files = new RecursiveIteratorIterator(
  new RecursiveDirectoryIterator(
    $pathToFolder,
    FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_SELF));

但在您的情况下,如果项目是点文件,则不需要进行测试。只要设置FilesystemIterator::SKIP_DOTS,它们就不会出现。请注意,这也是默认行为。

另一个答案很好,但对于不同的方法,您可以设置SKIP_DOTS标志:

<?php
$o_dir = new RecursiveDirectoryIterator($pathToFolder);
$o_dir->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
$o_iter = new RecursiveIteratorIterator($o_dir);
foreach ($o_iter as $o_info) {
   echo $o_info->getPathname(), "'n";
}

https://php.net/filesystemiterator.setflags