【问题标题】:Loop dirs and write xml of content files in php [closed]循环目录并在php中写入内容文件的xml [关闭]
【发布时间】:2013-06-24 04:15:42
【问题描述】:

如何递归运行到一个文件夹及其子目录,同时在每个目录中添加一个带有当前目录内容列表的xml文件?

我尝试过类似的方法:

$dir = new DirectoryIterator($folder);
foreach ($dir as $fileinfo) {
    $fd=fopen('index.xml','wb');
    if (!$fileinfo->isDot() && !is_dir($fileinfo)) {
        fwrite($fd,'Something');
    }
}

编辑:

脚本应该这样做:

打开目录然后在这里创建带有文件列表的xml文件(不是目录) 然后打开下一个目录,然后使用此处存在的文件列表(不是目录)在此处创建 xml 文件 等等……

【问题讨论】:

  • 我在一个项目中使用了RecursiveDirectoryIteratorRecursiveIteratorIterator。你能缩小你的问题范围吗?您如何定义“最佳”?
  • 最适合你尝试一些东西,并询问何时\如果你卡住了
  • 我有改变 最好的方法是如何? :)
  • 我想这就是你想要的:stackoverflow.com/questions/6837479
  • 这不是编程问题。您要求其他人编写整个程序(不是逐字逐句,而是看您的问题,您一次要问五件事左右)。所以最好从 one 子问题开始并解决它。对于我通过快速扫描您的问题发现的每个子问题,我知道答案存在:1.)递归目录遍历 2.)平面目录遍历(用于创建 XML 的列表) 3.)根据提供的数据创建 XML来自 Interator(如数据库结果、数组或所述平面目录列表)。解决了。​​

标签: php xml


【解决方案1】:

如果您想要目录结构的平面迭代,请尝试组合由RecursiveIteratorIterator 驱动的RecursiveDirectoryIterator。这就是迭代骨架的样子:

$start_dir =  '/some/path';
$rit = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator(
        $start_dir,
        FilesystemIterator::KEY_AS_PATHNAME |
        FilesystemIterator::CURRENT_AS_FILEINFO |
        FilesystemIterator::SKIP_DOTS
    ),
    RecursiveIteratorIterator::SELF_FIRST
);

foreach ($rit as $path => $fileinfo) {
    $level = $rit->getDepth();
    if ($fileinfo->isDir()) {
        print "[{$level}] in dir:{$path}\n";
    } else {
        print "[{$level}] file: {$path}\n";
    }
}

这可能看起来有点吓人,但实际上相对简单:

  1. RecursiveDirectoryIterator 将完成大部分工作,但是如果您对其进行迭代,您将获得所选目录的节点,就像通过简单的 DirectoryIterator 获得的一样。

  2. 1234563 @ 会为你做,并返回一个看起来平坦的迭代器,但它实际上递归到子节点。您可以使用getDepth 来检测带有叶节点的子迭代何时开始,您可以使用完整路径名来检测目录的变化情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多