2014-06-05 83 views
1

嗨,我使用以下函数列出目录中的所有文件和文件夹。php - 在一个目录中列出文件夹和文件

<?php 

    function listFolderFiles($dir){ 

     $ffs = scandir($dir); 

      foreach($ffs as $ff){ 

       echo $ff . "<br/>"; 

      } 

    } 

?> 

但问题似乎是我得到的所有文件夹目录中的正常的,但我也得到一个...。像下面的那样。

. 
.. 
direc 
img 
music 
New Text Document.txt 

,我使用下面的函数,如:listFolderFiles('MyFolder');

我想要做的就是让所有的文件夹和文件,但不...,我做了什么错了,我怎样才能得到我想要的。谢谢!

+0

你没有做错任何事,你知道'.'和'..'是什么吗? –

+0

可能的重复:http://stackoverflow.com/questions/7132399/why-is-it-whenever-i-use-scandir-i-receive-periods-at-the-beginning-of-the-arr –

回答

1

简单的方法来摆脱这些点是scandir()拾起在Linux环境中的:

<?php 
$ffs = array_diff(scandir($dir), array('..', '.')); 
?> 
2

您可以很方便地使用水珠,这使文件名到一个数组:

print_r(glob("*.*")); 

例子:

// directory name 
$directory = "/"; 

// get in directory 
$files = glob($directory . "*"); 

$d = 0; // init dir array count 
$f = 0; // init file array count 

// directories and files 
foreach($files as $file) { 
    if(is_dir($file)) { 
     array($l['directory'][$d] = $file); 
     $d++; 
    } else { 
     array($l['file'][$f] = $file); 
     $f++; 
    } 
} 

print_r($l); 

注意scandir也会选取隐藏文件,如.htaccess等。这就是为什么应该考虑glob方法,除非你想显示它们。

0

这应该做到!

<?php 

function listFolderFiles($dir){ 
    $ffs = scandir($dir); 
    foreach($ffs as &$ff){ 

     if ($ff != '.' && $ff != '..') { 
      echo $ff . "<br/>"; 
     } 
    } 
} 

?> 
相关问题