Сканирование DirectoryIterator для исключения '.' и каталоги ".." все еще включают их? - PullRequest
3 голосов
/ 24 марта 2011

В приведенном ниже сценарии я пытаюсь скопировать папки, существующие в каталоге $ 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. Что?

Ответы [ 2 ]

3 голосов
/ 24 марта 2011

DirectoryIterator::getPath() возвращает полный путь к каталогу, а не только его последнюю часть.

Если вам нужна только последняя часть этого пути, вам, вероятно, следует использовать SplFileInfo::getBasename() в вашем состоянии.

Или, для вашего конкретного теста, вы можете взглянуть на DirectoryIterator::isDot() метод (цитирование) :

Определить ток DirectoryIterator элемент '.' или '..'

1 голос
/ 24 марта 2011

Вы можете использовать DirectoryIterator::isDot вместо:

if (!$folder->isDot()) 
...