如何使用RecursiveDirectoryIterator循环引用当前目录名称,文件名和文件内容?

时间:2011-03-22 16:37:06

标签: php spl recursive-datastructures

在下面的脚本中,我试图遍历$ 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 个答案:

答案 0 :(得分:2)

//How do I reference the file here to obtain its contents?
    $widget_text = file_get_contents(???); 

$files_widgetsSplFileInfo,因此您可以通过几种方式获取该文件的内容。

最简单的方法是使用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