Как сослаться на имя текущего каталога, имя файла и содержимое файла с помощью цикла RecursiveDirectoryIterator? - PullRequest
0 голосов
/ 22 марта 2011

В приведенном ниже сценарии я пытаюсь перебирать папки и файлы внутри папки $ base.Я ожидаю, что он будет содержать один уровень дочерних папок, каждая из которых содержит несколько файлов .txt (и не содержит подпапок).

Мне просто нужно понять, как ссылаться на элементы в комментариях ниже ...

Любая помощь высоко ценится.Я действительно близок к тому, чтобы обернуть это: -)

$base = dirname(__FILE__).'/widgets/';
$rdi = new RecursiveDirectoryIterator($base);
foreach(new RecursiveIteratorIterator($rdi) as $files_widgets) 
    {
     if ($files_widgets->isFile()) 
         {
            $file_name_widget = $files_widgets->getFilename(); //what is the filename of the current el?
            $widget_text = file_get_contents(???); //How do I reference the file here to obtain its contents?
            $sidebar_id = $files_widgets->getBasename(); //what is the file's parent directory name?
        }
    }

1 Ответ

2 голосов
/ 22 марта 2011
//How do I reference the file here to obtain its contents?
    $widget_text = file_get_contents(???); 

$files_widgets - это SplFileInfo , поэтому у вас есть несколько вариантов получения содержимого файла.

Самый простой способ - использовать file_get_contents, как и вы сейчас. Вы можете объединить вместе путь и имя файла:

$filename = $files_widgets->getPathname() . '/' . $files_widgets->getFilename();
$widget_text = file_get_contents($filename);

Если вы хотите что-то сделать смешно , вы также можете использовать openFile, чтобы получить SplFileObject . Досадно, что SplFileObject не имеет быстрого способа получить все содержимое файла, поэтому мы должны построить цикл:

$fo = $files_widgets->openFile('r');
$widget_text = '';
foreach($fo as $line)
    $widget_text .= $line;
unset($fo);

Это немного более многословно, так как мы должны циклически перебирать SplFileObject, чтобы построчно получать содержимое. Хотя это вариант, вам будет проще использовать file_get_contents.

...