处理无限循环

时间:2012-01-28 13:52:05

标签: php

我正在尝试通过试用,错误和大量练习来学习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++;
  }
}

然而,这不起作用。我无法理解为什么会出现这种情况,我试图改变几十次,但我似乎无法让它停止循环。

我做错了什么?

提前感谢您的帮助(并阅读所有这些内容)。

3 个答案:

答案 0 :(得分:1)

请为您的代码使用更好的格式(这真的很难读),例如,在netbeans中你可以使用 shift alt F 自动格式化。

我希望你注意这一行:

$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++时将其视为数字,然后将其视为字符串。这对你的健康没有好处。

一个好的开始它应该在代码的开头初始化你的变量。然后一致地使用它们。

答案 1 :(得分:1)

这个问题可能与readdir返回一个字符串的事实有关,而你正在将它视为知道它的数字。您可能会发现它在开头或结尾返回一些内容,例如父目录'..'作为字符串或当前目录作为字符串'。'。

如果要遍历目录,则应检查readdir的返回值是否为“。”。或者'..'具体。

答案 2 :(得分:0)

我认为设计存在根本性的错误,您将$img(未初始化的整数)与$file(字符串)进行比较。

当你正在从一个目录中读取文件时,它似乎也是不必要的复杂,然后检查它们是否存在并且如果它们存在则突破你的循环。

也许清楚地看到目录结构和你想要做的事情,我可以提供更详细的答案,但我认为你需要回到绘图板。