PHP图片画廊分页异常:无法显示文件夹内全部图片
图片画廊分页功能的问题排查与修复
问题现象
- 206张图片按每页18张分页,实际只显示11页共196张,少了10张
- 35张图片的文件夹仅显示前18张,无“下一页”按钮,无法查看剩余图片
核心错误点
1. 最后一页数量计算错误
你用(int)($total / $per_page)计算总页数,这种写法会直接砍掉小数部分:
- 比如35张图片,35÷18≈1.94,转成整数后变成1页,但实际需要2页才能装下所有图片
- 这导致分页按钮的判断条件
$current_page < $last_page不成立(第1页时1<1为假),所以不会显示“下一页”按钮,没法翻页看剩下的内容
2. 每页起始位置计算错误
你写的$offset = ($per_page + 1)*($page - 1)多算了1个位置:
- 正常第2页应该从第18张(数组索引18,因为数组从0开始计数)开始,但你的公式算出来是19,等于每页都跳过了1张图片
- 11页下来就少了10张,最后一页的起始位置也错了,导致显示的图片总数不对
修复后的完整代码
<div> <?php $folder = './././'; $filetype = '*.jpg*'; $files = glob($folder.$filetype); $total = count($files); $per_page = 18; // 修复:用ceil向上取整计算总页数,确保所有图片都能分到页 $last_page = ceil($total / $per_page); if(isset($_GET["page"]) && ($_GET["page"] <=$last_page) && ($_GET["page"] > 0) ){ $page = $_GET["page"]; // 修复:去掉+1,正确计算每页起始索引 $offset = $per_page * ($page - 1); }else{ $page=1; $offset=0; } $max = $offset + $per_page; if($max>$total){ $max = $total; } for ($i = $offset; $i< $max; $i++) { $image = $files[$i]; $info = pathinfo($image); $resolution = getimagesize($image); $file = $files[$i]; $path_parts = pathinfo($file); $filename = $path_parts['filename']; echo '<div class="thumbs">'; echo '<a target="_blank" href="'.$file.'"><img src="'.$image.'"></a><br>'; echo '<span class="thumb_size">' . strval($resolution[0]) . 'x' . strval($resolution[1]) . '</span>'; echo '</div>'; } show_pagination($page, $last_page); ?> </div> <?php function show_pagination($current_page, $last_page){ echo '<div class="pagination">'; if( $current_page > 1 ){ echo '<span class="button-14"><a href="?page='.($current_page-1).'"> <<Previous Page</a></span> '; } if( $current_page < $last_page ){ echo '<span class="button-14"><a href="?page='.($current_page+1).'"> Next Page>></a></span>'; } echo '</div>'; }?>
内容的提问来源于stack exchange,提问作者user23556208
相关产品推荐
相关产品推荐

