ID:               39087
 Comment by:       judas dot iscariote at gmail dot com
 Reported By:      scottayy at gmail dot com
 Status:           Open
 Bug Type:         Directory function related
 Operating System: Windows XP Pro SP2 Build 2600
 PHP Version:      5.1.6
 New Comment:

Please, go and get a couple of cofee :) this is of course not a bug,
but the expected behaviuor.

your code is checking if the $file dir, exists in the **current
directory** and **not** in the "themes" directory ;P
you need to prepend the **base directory** name in the loop.

I suggest you try something like
http://www.php.net/~helly/php/ext/spl/directoryfilterdots_8inc-source.html
for your work.


Previous Comments:
------------------------------------------------------------------------

[2006-10-09 05:47:59] scottayy at gmail dot com

Sorry, I forgot to mention that when looping through, '.' and '..' are
recognized as directories with filetype() and is_dir(), but the
directories I created are not.

------------------------------------------------------------------------

[2006-10-09 05:41:27] scottayy at gmail dot com

Description:
------------
PHP fails to recognize directories when looping through a directory. 
filetype() says lstat() fails, and is_dir() returns false.

I have the following directory structure.

/
/themes/
/themes/crap/
/themes/default/

Using this simple script to loop through the themes directory and get
directory names:

Reproduce code:
---------------
<?php
//gather available themes
function get_available_themes()
{
        if($handle = @opendir('themes'))
        {
                $themes = array();
                while(false !== ($file = readdir($handle)))
                {
                        if(is_dir($file) && ($file != '.' && $file != '..'))
                        {
                                $themes[] = $file;
                        }
                }
                
                if(empty($themes))
                {
                        return false;
                }
        } else
        {
                return false;
        }
        
        return $themes;
}


if($themes = get_available_themes())
{
        echo '<pre>';
        print_r(get_available_themes());
        echo '</pre>';
} else
{
        echo 'No themes could be found.';
}
?>

Expected result:
----------------
Array
(
   [0] => crap,
   [1] => default
)

Actual result:
--------------
The function returns false because the array actually contains:

Array
(
)

If I echo out $file during the while() loop, I see

.
..
crap
default


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=39087&edit=1

Reply via email to