簡體   English   中英

PHP:使用scandir(),文件夾被視為文件

[英]PHP: Using scandir(), folders are treated as files

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

這是我的文件夾結構:

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

使用scandir()對“myFolder”文件夾我得到以下結果:

.
..
testFolder
testFile.txt

我正在嘗試從結果中過濾掉文件夾,只返回文件:

$scan = scandir('myFolder');

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

預期結果是:

testFile.txt

但是我實際上看到了:

testFile.txt
testFolder

誰能告訴我這里出了什么問題?

您需要更改目錄或將其附加到測試中。 當文件不存在時, is_dir返回false。

$scan = scandir('myFolder');

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

那應該做對了

不是is_dir()將文件作為參數嗎?

$scan = scandir('myFolder');

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

已經在這里告訴你答案: http//bugs.php.net/bug.php?id = 52771

如果您顯示錯誤,您會看到為什么這不起作用:

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'; 
    } 
} 

如果有人來這里是有興趣將輸出保存到數組,這是一個快速的方法(修改為更高效):

$dirPath = 'dashboard';

$dir = scandir($dirPath);

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

$dir = array_values($dir);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM