2016-07-27 104 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