我在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的文件夹。
答案 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
的特殊情况。