PHP DirectoryIterator和.DS_Store文件

时间:2016-07-27 17:19:56

标签: php directory dotfiles

我在Mac上安装了本地XAMP。我有这段代码:

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的文件夹。

2 个答案:

答案 0 :(得分:4)

您的过滤器正在说&#34;如果它是点文件且不是.DS_Store,请跳过它&#34;这与我认为你想要的相反。试试这个:

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

其中说&#34;如果是点文件(...)或.DS_Store,则跳过它。&#34;

答案 1 :(得分:2)

.DS_Store是一个文件,而不是文件夹。

您的代码不恰当地假设目录迭代器返回的任何内容都是文件夹并在其中查找content.xml文件;这对常规文件失败了。 .DS_Store恰好是一个文件,但是恰好在此目录中的任何其他文件都会出现同样的问题。

在尝试打开其中的文件之前,使用the isdir method of DirectoryIterator检查当前项目是否为目录。完成此操作后,您将不再需要.DS_Store的特殊情况。