is_dir不适用于for循环

时间:2012-09-20 17:28:50

标签: php mysql

我想从文件夹中循环显示图像和缩略图,然后将它们插入到数据库中。 我想使用is_dir来过滤掉目录。

我有:

$images = scandir('./images/all_comics/');
$thumbs = scandir('./images/thumbnails/');

for($x=0; $x<count($images); $x++) 
   {
    if(!is_dir($images[$x]))
       {
        //This shows all images WITHOUT directories
        echo $images[$x]; 

        //This is STILL adding images AND directories to database
        mysql_query("INSERT INTO images (imgpath, thumbpath) VALUES ('$images[$x]', '$thumbs[$x]')");
       }
   }

我直接在那里检查了!is_dir, echo $ images [$ x] ,根据需要回显没有目录的所有图片。

但是当我检查数据库中的插入时,我看到目录已被添加为记录。这是为什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

(删除旧答案,因为问题是拼写错误)

scandir返回给定目录中的文件列表。当您使用is_dir时,它会在当前目录中查找这些文件。我想你需要做的是:

if(!is_dir("./images/all_comics/" . $images[$x])) {
....

答案 1 :(得分:2)

您的echoif内执行,但查询未执行:

for($x=0; $x<count($images); $x++) 
{
       if(!is_dir($images[$x]))
       {
        echo $images[$x]; //This shows all images WITHOUT directories
        mysql_query("INSERT INTO images (imgpath, thumbpath) VALUES ('$images[$x]', '$thumbs[$x]')");
       }
}

另外,为PDO删除mysql_*,并将glob视为浏览目录以外的文件的方法。

答案 2 :(得分:0)

你也可以使用glob

$files = glob('./images/all_comics/*');
    foreach ($files as $file) {
        if (!is_dir($file)) {
            //Do Insert
        }
    }