3

在下面的脚本中,我试图将 $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 中的正确文件夹。什么?

4

2 回答 2

3

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

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

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

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

于 2011-03-24T18:42:45.400 回答
1

您可以DirectoryIterator::isDot改用:

if (!$folder->isDot()) 
于 2011-03-24T18:44:49.003 回答