PHP: используя scandir (), папки обрабатываются как файлы - PullRequest
3 голосов
/ 28 июля 2010

Использование PHP 5.3.3 (стабильный) в Linux CentOS 5.5.

Вот моя структура папок:

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

Может кто-нибудь сказать мне, что здесь происходит, пожалуйста?

Ответы [ 5 ]

9 голосов
/ 28 июля 2010

Вам необходимо изменить каталог или добавить его в свой тест. is_dir возвращает false, если файл не существует.

$scan = scandir('myFolder');

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

Это должно делать правильно

2 голосов
/ 28 июля 2010

Уже сказал вам ответ здесь: http://bugs.php.net/bug.php?id=52471

2 голосов
/ 28 июля 2010

Разве is_dir () не принимает файл в качестве параметра?

$scan = scandir('myFolder');

foreach($scan as $file)
{
    if (!is_dir($file))
    {
        echo $file.'\n';
    }
}
1 голос
/ 28 июля 2010

Если бы вы отображали ошибки, вы бы увидели, почему это не работает:

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'; 
    } 
} 
0 голосов
/ 05 марта 2017

Если кто-то, кто приходит сюда, заинтересован в сохранении вывода в массив, вот быстрый способ сделать это (модифицированный, чтобы быть более эффективным:

$dirPath = 'dashboard';

$dir = scandir($dirPath);

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

$dir = array_values($dir);
...