我试图通过尝试、错误和大量的实践来学习PHP编程。在过去的几天里,我一直在做一个基于目录的图像库,它似乎工作得很好。我可以上传图片并创建新相册。此外,每当我看到全尺寸图片时,我都会链接到目录中的上一张和下一张图片。
这就是我遇到问题的地方。一旦到达目录的末尾,代码就会开始一个无限循环,同时搜索不存在的下一个文件。
所以我修改了我的代码,现在看起来像这样:
$x = 1;
$dir = opendir($base.'/'.$get_album);
while ((($file = readdir($dir)) !== FALSE) && ($x == 1)) {
while ($img < $file) {
$img++;
$image_exists = file_exists($base.'/'.$get_album.'/'.$img);
if ($image_exists) {
echo "<a href='member.php?album=$get_album&imgID=$img'>
<img src='$base/$get_album/$img' width='70' align='right'>
</a>";
break;
}
$x++;
}
}
当我到达目录中的最后一张图片时,这就起作用了。所以我想,当我看到第一张照片时,我也会这样做,只是反转操作符,就像这样:
$x = 1;
$dir = opendir($base.'/'.$get_album);
while ((($file = readdir($dir)) !== FALSE) && ($x == 1)) {
while ($img > $file) {
$img--;
$image_exists = file_exists($base.'/'.$get_album.'/'.$img);
if ($image_exists) {
echo "<a href='member.php?album=$get_album&imgID=$img'>
<img src='$base/$get_album/$img' width='70' align='right'>
</a>";
break;
}
$x++;
}
}
但是,这不起作用。我不明白为什么会这样,我已经试着改变了几十次,但我似乎无法让它停止循环。
我做错了什么?
提前感谢您的帮助(以及阅读所有这些)。
这个问题可能与readdir返回一个字符串有关,而您将其视为一个数字。您可能会发现它在开始或结束时向您返回了一些内容,例如父目录".."作为字符串或当前目录作为字符串"."。
如果您想遍历目录,您应该检查readdir的返回值是否不是"或".."明确地
请使用更好的代码格式(读起来真的很痛苦),例如,在netbeans中,您可以使用shiftalt121自动格式化。
我想提请您注意这一行:
$image_exists= file_exists($base.'/'.$get_album.'/'.$img);
这可能是错误的根源。如果仅存在$base.'/'.$get_album.'/'
,则:
$image_exists= file_exists($base.'/'.$get_album.'/'.$img); // is true even if $img is empty!!!
此外:
什么是$img
?在执行$img++
时,您将其视为一个数字,然后再将其作为一个字符串。那对你的健康不好。
一个好的开始应该是在代码开始时初始化vars。然后用它们来协调。
我认为设计有根本问题,您正在将未初始化的整数$img
与字符串$file
进行比较。
这似乎也不必要地复杂,因为你正在从目录中读取文件,然后检查它们是否存在,如果存在,就跳出循环。
也许有了目录结构和您想要做的事情的清晰视图,我可以提供一个更详细的答案,但我认为您需要回到绘图板上。