PHP列表目录并删除..和

时间:2010-03-10 10:36:29

标签: php

我创建了一个列出当前目录

目录的脚本
<?php
   $dir = getcwd(); 
   if($handle = opendir($dir)){
       while($file = readdir($handle)){
          if(is_dir($file)){
             echo "<a href=\"$file\">$file</a><br />";
            }
       }
?>

但问题是,我看到这个“......”和“。”在目录列表的正上方,当有人点击它时,它们被重定向到目录的一个级别..有人可以告诉我如何删除那些“..”和“。” ?

4 个答案:

答案 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;
    }