2011-10-07 140 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