我有这个脚本:
<?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”行。
答案 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>";