首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 圖片輪播(幻燈片)自動播放實作:Session 記錄進度與目錄掃描

     編輯:PHP 相關知識

前言

本文實作一個完整的 PHP 圖片輪播頁面,功能包含:目錄掃描圖片、Session 記錄當前索引、上一張/下一張/首張/末張導航、圖片標題自動生成。適用於簡易相簿、產品展示。

核心類別:Slideshow

<?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
    


    


關鍵設計點

  • Session 快取檔案列表:避免每請求掃描目錄,效能佳。
  • natsort() 自然排序:解決 img1, img10, img2 排序錯誤。
  • 標題自動生成:檔名去副檔名、替換分隔符、單字首大寫。
  • 邊界處理:首張無上一張、末張無下一張,導航連結指向自身。
  • XSS 防護:輸出標題與檔名均經 htmlspecialchars()。

進階擴充建議

  • 加入自動播放 JavaScript(setInterval 切換 ?img=)。
  • 支援鍵盤左右鍵導航。
  • 整合 Lightbox/PhotoSwipe 彈出大圖。
  • 資料庫儲存圖片中繼資料(標題、描述、標籤),脫離檔名依賴。

總結

PHP 圖片輪播核心為「目錄掃描 → Session 快取 → 索引導航 → 標題生成」。本實作結構清晰、易於擴充,可作為簡易相簿基礎。希望本文對您的 PHP 程式設計有所幫助。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved