处理无限循环


Dealing with infinite loops

我试图通过尝试、错误和大量的实践来学习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进行比较。

这似乎也不必要地复杂,因为你正在从目录中读取文件,然后检查它们是否存在,如果存在,就跳出循环。

也许有了目录结构和您想要做的事情的清晰视图,我可以提供一个更详细的答案,但我认为您需要回到绘图板上。