我创建了一个列出当前目录
目录的脚本<?php
$dir = getcwd();
if($handle = opendir($dir)){
while($file = readdir($handle)){
if(is_dir($file)){
echo "<a href=\"$file\">$file</a><br />";
}
}
?>
但问题是,我看到这个“......”和“。”在目录列表的正上方,当有人点击它时,它们被重定向到目录的一个级别..有人可以告诉我如何删除那些“..”和“。” ?
答案 0 :(得分:8)
如果使用opendir / readdir / closedir函数,则必须手动检查:
<?php
if ($handle = opendir($dir)) {
while ($file = readdir($handle)) {
if ($file === '.' || $file === '..' || !is_dir($file)) continue;
echo "<a href=\"$file\">$file</a><br />";
}
}
?>
如果您想使用 DirectoryIterator ,则有isDot()方法:
<?php
$iterator = new DirectoryIterator($dir);
foreach ($iterator as $fileInfo) {
if ($fileInfo->isDot() || !$fileInfo->isDir()) continue;
$file = $fileinfo->getFilename();
echo "<a href=\"$file\">$file</a><br />";
}
?>
注意:我认为continue可以通过减少缩进级别来简化这种循环。
答案 1 :(得分:3)
或使用glob:
foreach(glob('/path/*.*') as $file) {
printf('<a href="%s">%s</a><br/>', $file, $file);
}
如果您的文件不遵循文件名点扩展名模式,请使用
array_filter(glob('/path/*'), 'is_file')
仅获取(非隐藏)文件名数组。
答案 2 :(得分:2)
<?php
if($handle = opendir($dir)){
while($file = readdir($handle)){
if(is_dir($file) && $file !== '.' && $file !== '..'){
echo "<a href=\"$file\">$file</a><br />";
}
}
}
?>
答案 3 :(得分:2)
跳过所有隐藏的和“点目录”:
while($file = readdir($handle)){
if (substr($file, 0, 1) == '.') {
continue;
}
跳过点目录:
while($file = readdir($handle)){
if ($file == '.' || $file == '..') {
continue;
}