# Modern Photo Gallery
แกลอรี่รูปภาพแบบโมเดิร์นที่สวยงาม พร้อมฟีเจอร์ครบครัน
## ฟีเจอร์หลัก
### 🎨 การออกแบบ
- **Modern UI Design** - ใช้ Gradient สีน้ำเงินเข้มที่สวยงาม
- **Glass Morphism Effect** - เอฟเฟกต์กระจกด้านขุ่นที่ทันสมัย
- **Google Fonts (Inter)** - ฟอนต์ที่อ่านง่ายและสวยงาม
- **Responsive Design** - รองรับทุกขนาดหน้าจอ
### 📸 การจัดการรูปภาพ
- **Album View** - แสดงรูปภาพเป็นอัลบัม
- **Grid Layout** - จัดเรียงรูปภาพแบบกริดที่สวยงาม
- **Infinite Scroll** - โหลดรูปภาพแบบค่อยเป็นค่อยไป
- **Image Caching** - แคชรูปภาพเพื่อการโหลดที่เร็วขึ้น
### 🎬 Slideshow
- **Full Screen Slideshow** - ดูรูปภาพแบบเต็มจอ
- **Keyboard Navigation** - ใช้ลูกศรซ้าย-ขวาเพื่อเปลี่ยนรูป
- **Mouse Navigation** - คลิกปุ่มเพื่อเปลี่ยนรูป
- **Image Counter** - แสดงหมายเลขรูปภาพปัจจุบัน
### ⚡ ประสิทธิภาพ
- **Lazy Loading** - โหลดรูปภาพเมื่อจำเป็น
- **Pagination** - แบ่งรูปภาพเป็นหน้า ๆ
- **Background Images** - ใช้ CSS background สำหรับการแสดงผลที่เร็ว
- **API Caching** - แคชข้อมูลเพื่อลดการเรียก API
## โครงสร้างไฟล์
```
album/
├── index.html # หน้าหลัก
├── styles.css # สไตล์ CSS
├── script.js # JavaScript หลัก
├── api.php # PHP API
├── install.php # สคริปต์ติดตั้งแบบ CLI
├── auth.php # ระบบ Authentication
├── check-upload-limits.php # ตรวจสอบ Upload Limits
├── classes/ # PHP Classes
│ ├── DataManager.php # จัดการข้อมูล
│ ├── ErrorHandler.php # จัดการข้อผิดพลาด
│ ├── FileUploadHandler.php # จัดการการอัปโหลด
│ ├── ImageProcessor.php # ประมวลผลรูปภาพ
│ ├── InputValidator.php # ตรวจสอบข้อมูลที่รับเข้ามา
│ ├── RSSGenerator.php # สร้าง RSS Feed
│ └── SimpleAuth.php # ระบบยืนยันตัวตน
├── data/ # ข้อมูลแอปพลิเคชัน (สร้างโดยอัตโนมัติ)
│ ├── config.json # การตั้งค่า
│ ├── albums.json # ข้อมูลอัลบัม
│ ├── tags.json # ข้อมูลแท็ก
│ ├── counters.json # ตัวนับ
│ └── cache/ # แคชข้อมูล
├── logs/ # ไฟล์ log (สร้างโดยอัตโนมัติ)
├── albums/ # โฟลเดอร์รูปภาพ
│ ├── 1/
│ ├── 2/
│ └── ...
└── README.md # ไฟล์นี้
```
## การติดตั้งและใช้งาน
### ความต้องการระบบ
- Web Server (Apache/Nginx)
- PHP 7.4+ พร้อม Extensions:
- GD Extension (สำหรับการประมวลผลรูปภาพ)
- JSON Extension (สำหรับการจัดเก็บข้อมูล)
- File Upload Support
- Browser ที่รองรับ ES6+
### วิธีการติดตั้ง
#### 1. การติดตั้งแบบ CLI (แนะนำ)
```bash
# เข้าไปยังโฟลเดอร์ของโปรเจค
cd /path/to/album
# รันสคริปต์ติดตั้ง
php install.php
# หรือใช้ตัวเลือกเพิ่มเติม:
php install.php --force # บังคับติดตั้งทับข้อมูลเดิม
php install.php --config-only # สร้างเฉพาะไฟล์ config
```
สคริปต์ติดตั้งจะทำการ:
- ✅ ตรวจสอบความต้องการระบบ
- 📁 สร้างโครงสร้างโฟลเดอร์ (`data/`, `logs/`, `albums/`)
- 📄 สร้างไฟล์ข้อมูลเริ่มต้น (JSON files)
- 🔍 สแกนและจัดระเบียบรูปภาพที่มีอยู่
- 🔐 ตั้งค่าสิทธิ์ไฟล์ให้เหมาะสม
#### 2. การติดตั้งแบบ Manual
1. วางไฟล์ทั้งหมดใน Web Server
2. สร้างโฟลเดอร์ `data/`, `data/cache/`, `logs/`
3. ตั้งค่าสิทธิ์โฟลเดอร์ให้เขียนได้ (755)
4. เปิดเว็บเบราว์เซอร์และไปที่ `http://localhost/album/`
### โครงสร้างอัลบัม
รูปภาพควรจัดเก็บในโฟลเดอร์ `albums/` ตามรูปแบบ:
```
albums/
├── 1/
│ ├── 0.webp
│ ├── 1.webp
│ └── ...
├── 2/
│ ├── 0.webp
│ ├── 1.webp
│ └── ...
```
**รูปแบบไฟล์ที่รองรับ:** `.jpg`, `.jpeg`, `.png`, `.gif`, `.webp`, `.bmp`, `.tiff`
**หมายเหตุ:** หากมีรูปภาพอยู่แล้วในโฟลเดอร์ `albums/` สคริปต์ติดตั้งจะสแกนและสร้างข้อมูลอัลบัมให้อัตโนมัติ
## การใช้งาน
### หน้าแรก
- แสดงรายการอัลบัมทั้งหมด
- คลิกที่อัลบัมเพื่อเข้าดูรูปภาพ
### หน้าอัลบัม
- แสดงรูปภาพในอัลบัมแบบกริด
- เลื่อนลงเพื่อโหลดรูปภาพเพิ่มเติม
- คลิกที่รูปภาพเพื่อเปิด Slideshow
## การปรับแต่ง
### เปลี่ยนสีธีม
แก้ไขไฟล์ `styles.css` ในส่วน:
```css
background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
```
### เปลี่ยนจำนวนรูปต่อหน้า
แก้ไขไฟล์ `script.js`:
```javascript
this.photosPerPage = 20; // เปลี่ยนเป็นจำนวนที่ต้องการ
```
## เทคโนโลยีที่ใช้
- **HTML5** - โครงสร้างหน้าเว็บ
- **CSS3** - การจัดรูปแบบและเอฟเฟกต์
- **Vanilla JavaScript** - ฟังก์ชันการทำงาน
- **PHP** - API สำหรับดึงข้อมูล
- **Google Fonts** - ฟอนต์ Inter
## Browser Support
- Chrome 60+
- Firefox 55+
- Safari 12+
- Edge 79+
## ข้อดี
✅ ไม่ใช้ Framework ภายนอก
✅ โหลดเร็ว เพราะใช้ Background Images
✅ รองรับ Mobile และ Desktop
✅ มี Infinite Scroll
✅ มีระบบ Caching
✅ UI/UX ที่สวยงามและทันสมัย
## การแก้ปัญหา
### รูปภาพไม่แสดง
- ตรวจสอบว่าชื่อโฟลเดอร์เก็บรูปภาพเป็นตัวเลข (1, 2, 3, ...)
- ตรวจสอบ path ของโฟลเดอร์ `albums/`
- ตรวจสอบสิทธิ์อ่านไฟล์และโฟลเดอร์
- ตรวจสอบรูปแบบไฟล์ (ต้องเป็น `.jpg`, `.jpeg`, `.png`, `.gif`, `.webp`, `.bmp`, `.tiff`)
### API ไม่ทำงาน
- ตรวจสอบว่า PHP ทำงานได้และมี Extension ที่จำเป็น
- ตรวจสอบ error log ของ web server
- ตรวจสอบ Console ใน Developer Tools
- ตรวจสอบไฟล์ `logs/api_error.log`
### ปัญหาการติดตั้ง
- รันคำสั่ง `php install.php --force` เพื่อติดตั้งใหม่
- ตรวจสอบสิทธิ์การเขียนไฟล์ในโฟลเดอร์
- ตรวจสอบ PHP version และ Extensions ที่จำเป็น
- ดูรายละเอียดข้อผิดพลาดจากการรันสคริปต์ติดตั้ง
## ระบบยืนยันตัวตน (Authentication)
ระบบนี้ใช้คลาส `SimpleAuth` สำหรับจัดการการเข้าสู่ระบบและรหัสผ่าน โดยรหัสผ่านจะถูกเข้ารหัส (hash) ด้วยฟังก์ชันมาตรฐานของ PHP เพื่อความปลอดภัย ค่าเริ่มต้นคือ username `admin` password `admin123`
### ตัวอย่างการเข้ารหัสรหัสผ่านใหม่
```php
require_once 'classes/SimpleAuth.php';
$auth = new SimpleAuth();
$plainPassword = 'mypassword';
$hashed = $auth->hashPassword($plainPassword);
echo $hashed; // นำค่า hash ที่ได้ไปแทนที่ใน adminCredentials
```
### การเปลี่ยนรหัสผ่าน (ในโค้ด)
```php
$result = $auth->changePassword('admin', 'รหัสผ่านเดิม', 'รหัสผ่านใหม่');
if ($result['success']) {
// เปลี่ยนรหัสผ่านสำเร็จ
}
```
> **หมายเหตุ:**
> - ค่าใน `$adminCredentials` จะต้องเป็น hash เท่านั้น ไม่ควรเก็บรหัสผ่านจริง
> - ใช้ `password_verify()` ในการตรวจสอบรหัสผ่านอัตโนมัติ
---
**สร้างด้วย ❤️ สำหรับการแสดงรูปภาพที่สวยงามและทันสมัย**