2011-10-07 189 views
10

這是我的代碼的開始部分在目錄列表文件:PHP:如何列出目錄中的文件,而不列出子目錄

$files = scandir($dir); 
$array = array(); 
foreach($files as $file) 
{ 
    if($file != '.' && $file != '..' && !is_dir($file)){ 
      .... 

我試圖列出目錄中的所有文件,而無需上市子文件夾。代碼正在工作,但顯示文件和文件夾。我在上面的代碼中看到!is_dir($file),但結果仍然相同。

回答

18

它應該是這樣的,我想:

$files = scandir($dir); 
foreach($files as $file) 
{ 
    if(is_file($dir.$file)){ 
     .... 
+0

ahhh,就是這樣。 Thanksss – Pinkie

+1

自'。'和'..'是目錄,「$ file!='。' && $ file!='..'&&「在表達式中是多餘的。後面的目錄分隔符沒有區別。 – symcbean

+0

謝謝@symcbean。你是對的。我刪除了它們。 – Pinkie

8

只需使用is_file

例子:

foreach($files as $file) 
{ 
    if(is_file($file)) 
    { 
     // Something 
    } 
} 
+0

我可以,但我的具體的例子我想知道爲什麼is_dir()不能正常工作。謝謝+1 – Pinkie

1

什麼東西這麼看似簡單的一個痛!沒有爲我工作... 爲了得到一個結果,我認爲文件名有一個擴展名,它必須在我的情況。

if ($handle = opendir($opendir)) { 
    while (false !== ($entry = readdir($handle))) { 
     $pos = strpos($entry, '.'); 
     if ($entry != "." && $entry != ".." && is_numeric($pos) ) { 

............不錯的入門

+0

好吧,你指出了,但是,仍然有每天的日常文件名稱中沒有點。 – dachi

1

這將掃描文件然後再檢查。或..在一個數組中。然後推送排除的文件。並在新文件[]數組中。

試試這個:

$scannedFiles = scandir($fullPath); 
$files = []; 

foreach ($scannedFiles as $file) { 
    if (!in_array(trim($file), ['.', '..'])) { 
     $files[] = $file; 
    } 
} 
+0

你好,歡迎來到Stack Overflow。請在代碼中添加一些解釋。 – Chaithanya