【问题标题】:DirectoryIterator scan to exclude '.' and '..' directories still including them?DirectoryIterator 扫描以排除“。”和“..”目录仍然包括它们?
【发布时间】:2011-03-24 18:36:55
【问题描述】:

在下面的脚本中,我试图将 $base 目录中存在的文件夹复制到 $target 目录。然而,在我最初的回声测试中,它返回了 .和 .. 目录,即使我试图在条件中处理该异常。

我错过了什么?

    $base = dirname(__FILE__).'/themes/';
    $target = dirname( STYLESHEETPATH );
    $directory_folders = new DirectoryIterator($base); 
    foreach ($directory_folders as $folder) 
    {
         if ($folder->getPath() !== '.' && $folder->getPath() !=='..' ) 
         {
            echo '<br>getPathname: '. $folder->getPathname();
            //copy($folder->getPathname(), $target);
         }
    }die;

但是,这对我来说毫无意义,如果我将条件更改为...

         if (!is_dir($folder) && $folder->getPath() !== '.' && $folder->getPath() !=='..' ) 

它返回 $base 中的正确文件夹。什么?

【问题讨论】:

    标签: php spl recursive-datastructures


    【解决方案1】:

    DirectoryIterator::getPath() 返回目录的完整路径 -- 而不仅仅是它的最后一部分。

    如果您只想要该路径的最后一部分,您可能应该在您的条件下使用SplFileInfo::getBasename()

    或者,对于您的特定测试,您可能想查看DirectoryIterator::isDot() 方法(引用)

    确定是否当前 DirectoryIterator 项目是 '.''..'

    【讨论】:

      【解决方案2】:

      您可以改用DirectoryIterator::isDot

      if (!$folder->isDot()) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        • 2020-06-02
        • 2012-10-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多