PHP DirectoryIterator和.DS_存储文件

PHP DirectoryIterator和.DS_存储文件,php,directory,dotfiles,Php,Directory,Dotfiles,我在Mac上安装了一个本地XAMP。我有以下代码: foreach (new DirectoryIterator('test') as $fileInfo) { if ($fileInfo->isDot() && $fileInfo->getBasename() !== '.DS_Store') { continue; } $xmlFile = "test/" . $fileInfo->getFilename() . "

我在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>";
        }
    }
}
foreach(作为$fileInfo的新目录迭代器('test')){
如果($fileInfo->isDot()&&$fileInfo->getBasename()!=='.DS_Store'){
继续;
}
$xmlFile=“test/”$fileInfo->getFilename()。“/content.xml”;
如果(文件_存在($xmlFile)){
$xml=simplexml\u加载文件($xmlFile);
foreach($xml->infos作为$infos){
回声“
  • ”; } } }
    问题是,我收到一个错误,该错误表示无法打开文件
    .DS\u Store
    。我想我的代码过滤掉了
    .DS\u存储
    目录。很明显,此文件无法打开。这是一个特定于mac的文件夹。

    您的过滤器会说“如果它是一个点文件,而不是
    。请跳过它”,这与我认为您想要的正好相反。试试这个:

    if ($fileInfo->isDot() || $fileInfo->getBasename() === '.DS_Store') {
        continue;
    }
    
    它说“如果它是一个点文件(
    )或它是
    .DS\u Store
    ,跳过它。”

    你的过滤器说的是“如果它是一个点文件而不是
    。DS\u Store
    ,跳过它”,这与我相信你想要的正好相反。试试这个:

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

    上面写着“如果它是一个点文件(
    .
    ),或者它是
    .DS\u Store
    ,请跳过它。”

    。DS\u Store
    是一个文件,而不是文件夹

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


    用于在尝试打开当前项中的文件之前检查当前项是否为目录。一旦您这样做了,您就不需要为
    .DS\u Store

    .DS\u Store
    设置特殊情况。它是一个文件,而不是一个文件夹

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


    用于在尝试打开当前项中的文件之前检查当前项是否为目录。一旦你这样做了,你就不需要为
    .DS\u Store

    设置一个特例,也许这是一个
    |
    逻辑的,或者,代替and,过滤所有
    .DS\u Store
    。谢谢Sean,就是这样。也许这是一个
    |
    逻辑的,而不是and,要过滤所有
    .DS\u Store
    。谢谢Sean,就这样。