= 8.2)
if (version_compare(PHP_VERSION, '8.2.0', '<')) {
$phpErrors[] = 'PHP 8.2 oder hoeher wird benoetigt. Aktuell installiert: PHP ' . PHP_VERSION;
}
// 2. Pflicht-Extensions pruefen
$requiredExtensions = [
'pdo' => 'Datenbankanbindung',
'mbstring' => 'Zeichenkodierung (Unicode)',
'openssl' => 'Verschluesselung',
'tokenizer' => 'PHP-Code-Analyse',
'xml' => 'XML-Verarbeitung',
'ctype' => 'Zeichentyp-Pruefung',
'fileinfo' => 'Dateityp-Erkennung',
'dom' => 'HTML/XML-Verarbeitung',
];
foreach ($requiredExtensions as $ext => $desc) {
if (!extension_loaded($ext)) {
$extensionErrors[] = $ext . ' (' . $desc . ')';
}
}
// 3. Verzeichnisse anlegen und Berechtigungen pruefen/reparieren
$writableDirs = [
'storage',
'storage/app',
'storage/framework',
'storage/framework/cache',
'storage/framework/cache/data',
'storage/framework/sessions',
'storage/framework/views',
'storage/logs',
'bootstrap/cache',
];
foreach ($writableDirs as $relDir) {
$fullPath = $basePath . '/' . $relDir;
// Verzeichnis erstellen, falls es nicht existiert
if (!is_dir($fullPath)) {
@mkdir($fullPath, 0775, true);
}
// Berechtigungen reparieren, falls nicht beschreibbar
if (is_dir($fullPath) && !is_writable($fullPath)) {
@chmod($fullPath, 0775);
}
// Immer noch nicht beschreibbar? → Fehler melden
if (!is_dir($fullPath) || !is_writable($fullPath)) {
$permissionErrors[] = $relDir;
}
}
// 4. .env-Datei erstellen (aus .env.example kopieren)
$envPath = $basePath . '/.env';
if (!file_exists($envPath) && file_exists($basePath . '/.env.example')) {
@copy($basePath . '/.env.example', $envPath);
}
if (!file_exists($envPath)) {
$fileErrors[] = 'Die Konfigurationsdatei .env konnte nicht erstellt werden.';
}
// 5. APP_KEY generieren, falls leer — MUSS vor Laravel-Bootstrap passieren,
// weil der EncryptionServiceProvider (eager Index 3) den Key beim Booten braucht,
// aber AppServiceProvider (eager Index 14) ihn sonst zu spaet setzen wuerde.
if (file_exists($envPath)) {
$envContent = file_get_contents($envPath);
if (preg_match('/^APP_KEY=\s*$/m', $envContent)) {
$key = 'base64:' . base64_encode(random_bytes(32));
$envContent = preg_replace('/^APP_KEY=\s*$/m', 'APP_KEY=' . $key, $envContent);
file_put_contents($envPath, $envContent);
}
}
// 6. Veralteten Config-/Routen-Cache loeschen (enthalten absolute Pfade
// vom Entwicklungsrechner). services.php und packages.php bleiben —
// diese enthalten nur Klassennamen und sind umgebungsunabhaengig.
foreach (['config.php', 'routes-v7.php'] as $cacheFile) {
$cachePath = $basePath . '/bootstrap/cache/' . $cacheFile;
if (file_exists($cachePath)) {
@unlink($cachePath);
}
}
// 7. vendor/-Ordner pruefen
if (!file_exists($basePath . '/vendor/autoload.php')) {
$fileErrors[] = 'Der Ordner "vendor/" fehlt oder ist unvollstaendig. Bitte alle Dateien erneut hochladen.';
}
// Alle Fehler sammeln
if (!empty($phpErrors)) $errors = array_merge($errors, $phpErrors);
if (!empty($extensionErrors)) $errors[] = '__extensions__';
if (!empty($permissionErrors)) $errors[] = '__permissions__';
if (!empty($fileErrors)) $errors = array_merge($errors, $fileErrors);
// Bei Fehlern: Eigenstaendige HTML-Seite anzeigen (kein Laravel noetig)
if (!empty($errors)) {
http_response_code(503);
?>
Installation — Systemcheck
Installation
Systemvoraussetzungen nicht erfuellt
Bevor die Installation starten kann, muessen folgende Probleme behoben werden:
PHP-Version
Loesung: Wechsle in deinem Hosting-Panel (z.B. cPanel, Plesk)
auf PHP 8.2 oder hoeher. Die Einstellung findest du meistens unter
„PHP-Version“ oder „PHP Selector“.
Fehlende PHP-Extensions
Folgende PHP-Erweiterungen werden benoetigt, sind aber nicht aktiviert:
Loesung: Aktiviere die fehlenden Extensions in deinem Hosting-Panel
unter „PHP-Extensions“ oder „PHP Modules“.
Fehlende Schreibberechtigungen
Folgende Verzeichnisse muessen beschreibbar sein (Berechtigungen: 775):
/
Loesung per FTP-Programm (z.B. FileZilla, WinSCP):
Verbinde dich mit dem Server per FTP
Navigiere zum Installationsordner
Rechtsklick auf den Ordner „storage“ → „Dateiberechtigungen“