我正在尝试通过试用,错误和大量练习来学习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++;
}
}
然而,这不起作用。我无法理解为什么会出现这种情况,我试图改变几十次,但我似乎无法让它停止循环。
我做错了什么?
提前感谢您的帮助(并阅读所有这些内容)。
答案 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
(字符串)进行比较。
当你正在从一个目录中读取文件时,它似乎也是不必要的复杂,然后检查它们是否存在并且如果它们存在则突破你的循环。
也许清楚地看到目录结构和你想要做的事情,我可以提供更详细的答案,但我认为你需要回到绘图板。