PHP图像显示

时间:2013-02-25 15:49:19

标签: php image

我有这个脚本:

 <?php 
                $count = 0;
        foreach(glob("images/{*.gif,*.jpg,*.png,*.jpeg,*.bmp}", GLOB_BRACE) as $image)
        while ($image)
        {
            if($count==3)
            {
               print "</tr>";
               $count = 0;
            }
            if($count==0)
               print "<tr>";
               print "<td>";
            ?>
               <img src="<?php echo $image;?>" width="80" height="80"/>
                <?php
            $count++;
            print "</td>";
        }
        if($count>0)
           print "</tr>";
        ?>

它应该从文件夹中获取图像(在这种情况下为“图像”)并将它们显示在一行中。但它显示一张图片1000000次。我该怎么做才能解决这个问题?我试图修复它,我所知道的是问题出在“while”行。

3 个答案:

答案 0 :(得分:0)

尝试删除该行

while($image)

注意该行

foreach(glob("images/{*.gif,*.jpg,*.png,*.jpeg,*.bmp}", GLOB_BRACE) as $image)

已经在图像中循环,并且在目录中没有其他内容时将完成。

我清理了一下代码:

<?php 
    $count = 0;
    foreach(glob("images/{*.gif,*.jpg,*.png,*.jpeg,*.bmp}", GLOB_BRACE) as $image)
    {
        if($count==3)
        {
           print "</tr>";
           $count = 0;
        }
        if($count==0)
           print "<tr>";

        print "<td>";
        print "<img src=$image width=\"80\" height=\"80\"/>";
        print "</td>";
        $count++;
    }
    print "</tr>";
?>

答案 1 :(得分:0)

问题是$image在while循环期间不会改变。因此,您在foreach内创建了一个无限循环,因为$image继续评估为真。

您的代码中不需要while循环,可以将其删除。您已使用foreach语句循环覆盖图像。

确保将所有foreach逻辑包含在大括号中,如下所示:

foreach(glob("images/{*.gif,*.jpg,*.png,*.jpeg,*.bmp}", GLOB_BRACE) as $image)
{
    if($count==3)
    {
       print "</tr>";
       $count = 0;
    }
    if($count==0)
       print "<tr>";
       print "<td>";
    ?>
       <img src="<?php echo $image;?>" width="80" height="80"/>
    <?php
    $count++;
    print "</td>";
}
if($count>0)
   print "</tr>";

否则它只会循环下一行代码。

答案 2 :(得分:0)

你似乎在while有非常糟糕的逻辑。您说while $image exists执行以下操作。好$image不会改变,这会导致while永远继续。最有可能在脚本到达max_execution_time时出现。

您当前的代码旨在重复图像。如果您不希望这样做,则必须删除while中的foreach循环。

另请注意,由于您没有大括号,while只会在foreach中执行,而if语句将在完成后执行一次。如果不重复,请使用foreach的大括号以确保一切都在您希望的时候运行。

因此:

foreach(glob("images/{*.gif,*.jpg,*.png,*.jpeg,*.bmp}", GLOB_BRACE) as $image)
{
        if($count==3)
        {
           print "</tr>";
           $count = 0;
        }
        if($count==0)
           print "<tr>";
        print "<td>";
        ?>
        <img src="<?php echo $image;?>" width="80" height="80"/>
        <?php
        $count++;
        print "</td>";
}
if($count > 0)
    print "</tr>";