PHP DirectoryIterator和.DS_存储文件
我在Mac上安装了一个本地XAMP。我有以下代码: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() . "
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,就这样。