为什么PHP在读取目录时会输出两个具有:.
和..
的子目录。
来自PHP.net:
<?php
$dir = "/etc/php5/";
// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
}
closedir($dh);
}
}
?>
输出:
filename: . : filetype: dir
filename: .. : filetype: dir
filename: apache : filetype: dir
filename: cgi : filetype: dir
filename: cli : filetype: dir
为什么这样做?
答案 0 :(得分:10)
因为“。”和“..”是实际目录(在* nix世界中)。
“”。指当前目录
“..”指的是父目录。
如果你做“ls”,你会看到完全相同的输出。
答案 1 :(得分:2)
.
和..
是当前和父目录的符号链接,它们存在于大多数文件系统中,因此如果您不希望这些在代码的dir列表中显示,请尝试这样:
$skipped = array('.', '..');
while (($file = readdir($dh)) !== false) {
if(in_array($file, $skipped)) continue;
echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
}
closedir($dh);
答案 2 :(得分:0)
如果您不需要glob()
和.
条目,请使用..
。