本文實作一個完整的 PHP 圖片輪播頁面,功能包含:目錄掃描圖片、Session 記錄當前索引、上一張/下一張/首張/末張導航、圖片標題自動生成。適用於簡易相簿、產品展示。
<?php
class Slideshow {
private array $files = [];
private string $imgDir;
private string $webImgDir;
private string $sessionName;
public function __construct(string $imgDir, string $webImgDir, string $sessionName = 'slideshow_sess') {
$this->imgDir = rtrim($imgDir, '/');
$this->webImgDir = rtrim($webImgDir, '/');
$this->sessionName = $sessionName;
session_name($sessionName);
session_start();
}
public function init(): string {
if (!is_dir($this->imgDir)) {
return '圖片目錄不存在: ' . $this->imgDir;
}
return '';
}
public function getImages(): void {
if (isset($_SESSION['imgarr'])) {
$this->files = $_SESSION['imgarr'];
return;
}
$files = [];
$iterator = new DirectoryIterator($this->imgDir);
foreach ($iterator as $fileInfo) {
if ($fileInfo->isFile() && preg_match('/\.(jpg|jpeg|gif|png)$/i', $fileInfo->getFilename())) {
$files[] = $fileInfo->getFilename();
}
}
// 自然排序(img1, img2, img10)
natsort($files);
$this->files = array_values($files);
$_SESSION['imgarr'] = $this->files;
}
public function run(): array {
$total = count($this->files);
if ($total === 0) return ['', '', 1, 1, 1, 1];
$curr = 1;
if (isset($_GET['img']) && ctype_digit($_GET['img'])) {
$curr = (int)$_GET['img'];
$curr = max(1, min($curr, $total));
}
$first = 1;
$last = $total;
$prev = $curr > 1 ? $curr - 1 : 1;
$next = $curr < $total ? $curr + 1 : $total;
$filename = $this->files[$curr - 1];
$caption = $this->generateCaption($filename);
return [$filename, $caption, $first, $prev, $next, $last];
}
private function generateCaption(string $filename): string {
$caption = pathinfo($filename, PATHINFO_FILENAME);
$caption = str_replace(['-', '_'], ' ', $caption);
$caption = ucwords(strtolower($caption));
return $caption;
}
}
// 使用範例
define('IMGDIR', '/home/user/public_html/images/slideshow/');
define('WEBIMGDIR', '/images/slideshow/');
$ss = new Slideshow(IMGDIR, WEBIMGDIR);
if ($err = $ss->init()) {
http_response_code(500);
exit($err);
}
$ss->getImages();
[$curr, $caption, $first, $prev, $next, $last] = $ss->run();
?>
Slideshow
= htmlspecialchars($caption) ?>
img1, img10, img2 排序錯誤。htmlspecialchars()。setInterval 切換 ?img=)。PHP 圖片輪播核心為「目錄掃描 → Session 快取 → 索引導航 → 標題生成」。本實作結構清晰、易於擴充,可作為簡易相簿基礎。希望本文對您的 PHP 程式設計有所幫助。