🛒 scripte-pay.de

Video Portal

Video Portal

# 🎬 Video Portal

Ein vollständiges selbst gehostetes Video-Portal ähnlich YouTube – gebaut mit PHP 8.4, MySQL und Video.js.

---

## ✨ Features

- **Video-Upload** – MP4-Dateien hochladen (max. 500 MB), mit Thumbnail (WebP-Konvertierung)
- **Video.js Player** – professioneller HTML5-Player mit Geschwindigkeitssteuerung
- **Nutzer & Kanäle** – Registrierung, Login, Kanal-Seiten, Abonnements
- **Likes & Dislikes** – per AJAX ohne Seitenneuladen
- **Kommentare** – unter jedem Video
- **Aufrufe** – Anti-Spam (max. 1x pro Stunde pro IP/Nutzer)
- **Kategorien & Tags** – Videos kategorisieren und taggen
- **Suche** – Volltextsuche in Titel und Beschreibung
- **Banner-Werbung** – Admin verwaltet Banner (3 Positionen: oben, sidebar, unter Video)
- **Admin-Panel** – Dashboard, Videos freischalten/sperren/löschen, Nutzer verwalten, Kategorien, Kommentare
- **WebP-Konvertierung** – alle Bilder (Thumbnails, Avatare, Banner) werden automatisch in WebP umgewandelt
- **Responsives Design** – Dark-Theme, optimiert für Desktop und Mobile

---

## 🛠 Systemanforderungen

- PHP **8.2+** (empfohlen: 8.4)
- MySQL **5.7+** oder MariaDB **10.3+**
- PHP-Erweiterungen: `pdo_mysql`, `gd`, `fileinfo`, `mbstring`
- Webserver: Apache (mit mod_rewrite) oder Nginx

---

## 🚀 Installation

### Schritt 1: Dateien hochladen

Lade alle Dateien in dein Webroot-Verzeichnis hoch (z. B. `public_html/` oder `/var/www/html/`).

### Schritt 2: Ordner-Berechtigungen setzen

```bash
chmod 755 uploads/
chmod 755 uploads/videos/
chmod 755 uploads/thumbnails/
chmod 755 uploads/avatars/
chmod 755 uploads/banners/
```

Oder unter Linux:
```bash
find uploads/ -type d -exec chmod 755 {} \;
```

### Schritt 3: Datenbank anlegen

Erstelle eine neue MySQL-Datenbank:
```sql
CREATE DATABASE videoportal CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

### Schritt 4: Installer aufrufen

Öffne im Browser:
```
https://deine-domain.de/install.php
```

Folge dem Assistenten:
1. **Datenbankdaten** eingeben (Host, Name, Benutzer, Passwort)
2. **Website-URL** eingeben (ohne abschließenden Schrägstrich)
3. **Admin-Account** erstellen (Benutzername, E-Mail, Passwort)
4. Auf **„Jetzt installieren"** klicken

Die `install.php` löscht sich nach erfolgreicher Installation selbst.

### Schritt 5: Fertig!

Öffne `https://deine-domain.de/` – das Portal ist einsatzbereit.

---

## ⚙️ Konfiguration (config.php)

Nach der Installation wird `config.php` automatisch erstellt. Wichtige Konstanten:

| Konstante | Beschreibung | Standard |
|-----------|-------------|---------|
| `MAX_VIDEO_SIZE` | Max. Video-Dateigröße | 500 MB |
| `MAX_THUMB_SIZE` | Max. Thumbnail-Größe | 5 MB |
| `MAX_AVATAR_SIZE` | Max. Avatar-Größe | 2 MB |
| `THUMB_QUALITY` | WebP-Qualität (1–100) | 85 |

---

## 🗂 Dateistruktur

```
/
├── install.php ← Installer (löscht sich selbst)
├── config.php ← Datenbankverbindung & Konstanten (wird erstellt)
├── functions.php ← Alle Hilfsfunktionen
├── header.php ← Seitenheader & Navigation
├── footer.php ← Seitenfooter
├── index.php ← Startseite
├── watch.php ← Video-Player
├── upload.php ← Video hochladen
├── channel.php ← Kanal-Seite
├── category.php ← Kategorie-Ansicht
├── search.php ← Suche
├── login.php ← Anmelden
├── register.php ← Registrieren
├── logout.php ← Abmelden
├── profile.php ← Profil bearbeiten
├── banner-click.php ← Banner-Klick-Tracking
├── admin/
│ ├── index.php ← Admin Dashboard
│ ├── videos.php ← Videos verwalten
│ ├── users.php ← Nutzer verwalten
│ ├── categories.php ← Kategorien verwalten
│ ├── comments.php ← Kommentare moderieren
│ ├── banners.php ← Banner-Werbung verwalten
│ └── inc/sidebar.php ← Admin-Navigation
├── ajax/
│ ├── like.php ← Like/Dislike AJAX
│ └── subscribe.php ← Abo AJAX
├── inc/
│ └── video-card.php ← Video-Karten-Template
├── uploads/
│ ├── videos/ ← MP4-Dateien
│ ├── thumbnails/ ← Vorschaubilder (WebP)
│ ├── avatars/ ← Profilbilder (WebP)
│ └── banners/ ← Banner-Bilder (WebP)
└── assets/
├── css/style.css ← Stylesheet
├── js/main.js ← JavaScript
└── img/ ← Platzhalter-Bilder
```

---

## 👤 Rollen & Berechtigungen

| Rolle | Kann | Kann nicht |
|-------|------|-----------|
| **Gast** | Videos ansehen, suchen | Hochladen, kommentieren |
| **User** | Videos hochladen, kommentieren, liken, abonnieren | Admin-Panel |
| **Admin** | Alles + Videos freischalten, Nutzer verwalten | – |

### Video-Status-Workflow:
```
Upload → pending → (Admin prüft) → active
→ blocked
```

---

## 📢 Banner-Positionen

| Position | Wo angezeigt |
|----------|-------------|
| `top` | Oben auf allen Seiten |
| `sidebar` | Sidebar auf der Watch-Seite |
| `below_video` | Unter dem Video-Player |

Banner rotieren zufällig. Klicks und Impressionen werden automatisch gezählt.

---

## 🔒 Sicherheitshinweise

- Alle Datenbankabfragen verwenden **PDO Prepared Statements**
- Ausgaben werden mit `htmlspecialchars()` escaped
- Upload-Ordner sind durch `index.php` geschützt
- Video-Uploads werden per MIME-Type validiert (`video/mp4` only)
- Passwörter werden mit **bcrypt (cost 12)** gehasht
- Session-IDs werden bei Login regeneriert

---

## 🆙 PHP-Limits für große Videos anpassen

In der `php.ini` oder `.htaccess`:

```ini
upload_max_filesize = 512M
post_max_size = 520M
max_execution_time = 300
max_input_time = 300
memory_limit = 256M
```

Per `.htaccess` (Apache):
```apache
php_value upload_max_filesize 512M
php_value post_max_size 520M
php_value max_execution_time 300
php_value memory_limit 256M
```

---

## 🐞 Troubleshooting

### „Video-Upload fehlgeschlagen"
- Prüfe PHP-Limits (`upload_max_filesize`, `post_max_size`)
- Prüfe Schreibrechte auf `uploads/videos/`
- Prüfe, ob die Datei wirklich MP4 ist

### „Thumbnails werden als 0-Byte gespeichert"
- Prüfe, ob die PHP-GD-Erweiterung installiert ist: `phpinfo()` → GD
- Prüfe Schreibrechte auf `uploads/thumbnails/`

### „install.php wurde nicht gelöscht"
- Lösche die Datei manuell per FTP/SSH
- Stelle sicher, dass der Webserver Schreibrechte auf das Verzeichnis hat

### „Datenbankfehler bei der Installation"
- Prüfe Datenbankhost, Name, Benutzer und Passwort
- Stelle sicher, dass der Datenbankbenutzer CREATE-Rechte hat
- MariaDB < 10.5: `ADD COLUMN IF NOT EXISTS` wird nicht unterstützt (irrelevant hier)

### „Bilder werden nicht als WebP angezeigt"
- Browser prüfen: alle modernen Browser unterstützen WebP
- GD-Erweiterung muss mit WebP-Support kompiliert sein

### „Admin-Panel zeigt 403"
- Stelle sicher, dass du mit einem Admin-Account eingeloggt bist
- Prüfe Session-Konfiguration in `config.php`

---

## 🗄 Datenbankstruktur

Tabellen-Präfix: `vp4x_`

| Tabelle | Inhalt |
|---------|--------|
| `vp4x_users` | Nutzerkonten |
| `vp4x_videos` | Video-Einträge |
| `vp4x_categories` | Kategorien |
| `vp4x_tags` | Tags |
| `vp4x_video_tags` | Video-Tag-Zuordnung |
| `vp4x_likes` | Likes & Dislikes |
| `vp4x_comments` | Kommentare |
| `vp4x_views` | Aufrufe (Anti-Spam) |
| `vp4x_subscriptions` | Kanal-Abonnements |
| `vp4x_banners` | Werbebanner |

---

## 📄 Lizenz

Eigenentwicklung – alle Rechte vorbehalten.

---

*Video Portal v1.0 | PHP 8.4 | Video.js 8.6 | Dark Theme*

🔗 Unsere Partner

Scriptworld.de Zahnzusatzversicherung_Fullsize