5

在 Linux CentOS 5.5 上使用 PHP 5.3.3(稳定版)。

这是我的文件夹结构:

www/myFolder/
www/myFolder/testFolder/
www/myFolder/testFile.txt

对“myFolder”文件夹使用 scandir() 我得到以下结果:

.
..
testFolder
testFile.txt

我试图从结果中过滤掉文件夹,只返回文件:

$scan = scandir('myFolder');

foreach($scan as $file)
{
    if (!is_dir($file))
    {
        echo $file.'\n';
    }
}

预期结果是:

testFile.txt

但是我实际上看到:

testFile.txt
testFolder

谁能告诉我这里出了什么问题?

4

5 回答 5

10

您需要更改目录或将其附加到您的测试中。is_dir当文件不存在时返回 false。

$scan = scandir('myFolder');

foreach($scan as $file)
{
    if (!is_dir("myFolder/$file"))
    {
        echo $file.'\n';
    }
}

那应该做正确的事

于 2010-07-28T14:31:25.173 回答
2

is_dir() 不是将文件作为参数吗?

$scan = scandir('myFolder');

foreach($scan as $file)
{
    if (!is_dir($file))
    {
        echo $file.'\n';
    }
}
于 2010-07-28T14:29:42.753 回答
2

已经在这里告诉你答案:http: //bugs.php.net/bug.php ?id=52471

于 2010-07-28T14:32:21.820 回答
1

如果您显示错误,您会看到为什么这不起作用:

Warning: Wrong parameter count for is_dir() in testFile.php on line 16

现在尝试将 $file 传递给 is_dir()

$scan = scandir('myFolder'); 

foreach($scan as $file) 
{ 
    if (!is_dir($file)) 
    { 
        echo $file.'\n'; 
    } 
} 
于 2010-07-28T14:30:55.363 回答
0

如果来这里的人有兴趣将输出保存到数组中,这是一种快速的方法(修改为更有效):

$dirPath = 'dashboard';

$dir = scandir($dirPath);

foreach($dir as $index => &$item)
{
    if(is_dir($dirPath. '/' . $item))
    {
        unset($dir[$index]);
    }
}

$dir = array_values($dir);
于 2017-03-05T00:38:00.823 回答