Re: is_dir & is_file bugs?

From: Date: Tue, 08 Feb 2005 22:13:02 +0000
Subject: Re: is_dir & is_file bugs?
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-208300@lists.php.net to get a copy of this message
Yup! That's the one! I was missing PATH... :) Thank you very much for such a nice explanation! -afan M. Sokolewicz wrote:
Matt M. wrote:
$path = 'product_images'; $handle = opendir($path); while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..")
       {
echo $file;
           if (is_dir($file))
           {
               echo ' <-- folder<br>';
               $folders[] = $file;
           }
           elseif (is_file($file))
           {
               echo ' <-- image<br>';
               $images[] = $file;
           }
           else
           {
               echo ' <-- ???<br>';
           }
       }
}
try the absolute path in is_dir and is_file
or at least the correct one. Right now, what's hapenning is this: imagine you have this layout: / /product_images/ /product_images/dir1/ /product_images/file1.ext What your script is doing:
    $handle = opendir($path);
    while (false !== ($file = readdir($handle)))
    {
        // $file = '.' // on first run
        // $file = '..' // on 2nd run
        // $file = 'dir1' // on 3rd run
        // $file = 'file1.ext' // on 4th run
                if ($file != "." && $file != "..")
        {
        echo $file;
            if (is_dir($file))    // it's not, since that file doesn't exist in the place PHP is looking for it.
                // because, does ./dir1/ exist? no! does ./product_images/dir1/ exist? yes!
                // But that's not what you're checking ;)
            {
                echo ' <-- folder<br>';
                $folders[] = $file;
            }
            elseif (is_file($file))
                        // same thing as with is_dir()
            {
                echo ' <-- image<br>';
                $images[] = $file;
            }
            else
            {
                echo ' <-- ???<br>';
            }
        }
    }


« previous php.general (#208300) next »