2016-07-27 26 views
0

我在我的Mac上安裝了本地XAMP。我有這樣的代碼:PHP DirectoryIterator和.DS_Store文件

foreach (new DirectoryIterator('test') as $fileInfo) { 
    if ($fileInfo->isDot() && $fileInfo->getBasename() !== '.DS_Store') { 
     continue; 
    } 

    $xmlFile = "test/" . $fileInfo->getFilename() . "/content.xml"; 

    if (file_exists($xmlFile)) { 
     $xml = simplexml_load_file($xmlFile); 
     foreach ($xml->infos as $infos) { 
      echo "<li><a href='#tab_3' data-toggle='tab'>$infos->bezeichnung</a></li>"; 
     } 
    } 
} 

的問題是,我得到的是說,文件.DS_Store無法打開的錯誤。我認爲我的代碼過濾了.DS_Store目錄。很明顯,這個文件不能打開。這是一個mac特定的文件夾。

回答

4

你的過濾器是說「如果它是一個點文件,它不是.DS_Store,跳過它」,這是我相信你想要的相反。試試這個:「如果它是一個點文件(...),或者是.DS_Store,跳過它」

if ($fileInfo->isDot() || $fileInfo->getBasename() === '.DS_Store') { 
    continue; 
} 

它說

+0

也許這是一個'||'邏輯或者,而不是和,過濾所有的'.','..'和'.DS_Store'。 –

+0

我已更新我的回答 –

+0

謝謝肖恩,就是這樣。 – DragonStyle

2

.DS_Store是一個文件,而不是文件夾。

您的代碼錯誤地認爲目錄迭代器返回的任何內容都將是一個文件夾,並在其中查找content.xml文件;這對於常規文件而言失敗。 .DS_Store恰好是一個文件,但是碰巧發生在這個目錄中的任何其他文件都會出現同樣的問題。

使用the isdir method of DirectoryIterator在嘗試打開其中的文件之前檢查當前項目是否是目錄。一旦你這樣做,你將不需要特殊的案例.DS_Store

+0

感謝您的提示。 – DragonStyle