2013-06-26 62 views
-6

如何遞歸運行到文件夾及其子目錄中,同時在每個目錄中添加包含當前目錄內容列表的xml文件?循環播放並在php中編寫xml內容文件

我已經試過這樣的事情:

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

編輯:

腳本應該這樣做:

打開目錄,然後在這裏創建XML文件的文件列表在座(不是dirs) 然後打開下一個dir,然後在這裏創建xml文件,並在此列出文件(不是dirs) 等等......

+1

我在這樣做的項目中使用了'RecursiveDirectoryIterator'和'RecursiveIteratorIterator'。你能縮小你的問題嗎?你如何定義「最好」? – complex857

+0

最適合你嘗試一下,並詢問\如果你卡住了 – 2013-06-26 20:39:58

+0

我有改變最好的方法是怎麼做? :) – MrSo

回答

1

如果你想要一個目錄結構的平面迭代,試試把RecursiveDirectoryIterator結合RecursiveIteratorIterator。這是迭代的骨架怎麼會是這樣的:

$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. 然而,因爲它實現了RecursiveIterator接口,您可以通過RecursiveIteratorIterator駕駛它,並保存自己的「有孩子?遞歸到......」在你的循環條件語句,這是什麼RecursiveIteratorIterator會爲你做,並給返回一個看起來平坦的迭代器,但它實際上會遞歸到子節點中。您可以使用getDepth來檢測何時啓動具有葉節點的子迭代,並且可以使用完整路徑名來檢測目錄如何更改。

+0

非常感謝! – MrSo