6

RecursiveDirectoryIterator seems to give me two different results from my localhost and live server,

define ('WEBSITE_DOCROOT', str_replace('\\', '/', dirname(__FILE__)).'/');

print_r(WEBSITE_DOCROOT);

// List all the class directories in the array.
$main_directories = array(
    'core/model/',
    'core/helper/',
    'core/ext/'
);

// Set other vars and arrays.
$sub_directories = array();

// List any sub dirs in the main dirs above and store them in an array.
foreach($main_directories as $path_directory)
{
    $iterator = new RecursiveIteratorIterator
    (
        new RecursiveDirectoryIterator(WEBSITE_DOCROOT.$path_directory), // Must use absolute path to get the files when ajax is used.
        RecursiveIteratorIterator::SELF_FIRST
    );

    foreach ($iterator as $fileObject) 
    {
        if ($fileObject->isDir()) 
        {
            //if($fileObject->isDir() === '.' || $fileObject->isDir() === '..') {continue;} 

            // Must trim off the WEBSITE_DOCROOT. 
            $sub_directories[] = preg_replace('~.*?(?=core|local)~i', '', str_replace('\\', '/', $fileObject->getPathname())) .'/';
        }
    }
}

// Mearge the main dirs with any sub dirs in them.
$merged_directories = array_merge($main_directories,$sub_directories);
print_r($merged_directories);

localhost,

(
    [0] => core/model/
    [1] => core/helper/
    [2] => core/ext/
)

live server,

(
    [0] => core/model/
    [1] => core/helper/
    [2] => core/ext/
    [3] => core/model/./
    [4] => core/model/../
    [5] => core/helper/./
    [6] => core/helper/../
    [7] => core/ext/./
    [8] => core/ext/../
)

So, how can I exclude the directory paths with a dot and double dots?

EDIT:

Live server - PHP version 5.3.27 Localhost - PHP version 5.5

Run
  • 54,938
  • 169
  • 450
  • 748

1 Answers1

30

Try with :

new RecursiveDirectoryIterator(WEBSITE_DOCROOT.$path_directory, RecursiveDirectoryIterator::SKIP_DOTS);

See http://us1.php.net/manual/en/class.filesystemiterator.php

Brice
  • 1,026
  • 9
  • 20
  • 1
    Great! I was looking for the same thing, I was excluding them by hand (if dot/dotdot continue) – Ion Nov 01 '13 at 12:45
  • Then I guess we'll need more information about your server, the version of PHP you are running, etc. (update your question consequently) – Brice Nov 01 '13 at 17:09
  • php.net states PHP 5 >= 5.3.0. I tried with PHP 5.3.26 and it works. Could you may be try again? :/ – Brice Nov 04 '13 at 14:58
  • it works - avoids dots, problems may be in other places of code (I am trying to zip a dir recursively - but it is other topic) – NoWomenNoCry Feb 09 '18 at 12:37