0

私はこのスクリプトを持っています:

 <?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>";
        ?>

フォルダーから画像(この場合は「画像」)を取得し、それらを3行に表示することになっています。しかし、それは 1 つの画像を 1000000 回表示します。これを修正するにはどうすればよいですか? 私はそれを修正しようとしましたが、私が知っているのは、問題が「while」行にあるということだけです。

4

3 に答える 3

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>";
?>
于 2013-02-25T15:52:53.523 に答える
0

問題は$image、while ループ中に変更されないことです。したがって、内部に無限ループが作成されます。foreachなぜなら$image、true に評価され続けます。

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>";

それ以外の場合は、コードの次の直接行のみをループします。

于 2013-02-25T15:53:00.273 に答える
0

あなたは で非常に悪い論理を持っているようですwhile. あなたは次のように言っwhile $image existsています。まあ$image変わらないwhileから永遠に続く。スクリプトがmax_execution_time.

現在のコードは、画像を繰り返すように設計されています。これを行いたくない場合は、 のwhileループを削除する必要がありますforeach

また、中かっこがないため、 のみwhileが実行されforeachifステートメントは完了時に 1 回実行されることに注意してください。繰り返さない場合は、中括弧を使用して、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>";
于 2013-02-25T15:54:42.243 に答える