2014-06-05 135 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/>"; 
     } 
    } 
} 

?> 
相關問題