= 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
Logo

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):

  1. Verbinde dich mit dem Server per FTP
  2. Navigiere zum Installationsordner
  3. Rechtsklick auf den Ordner „storage“ → „Dateiberechtigungen“
  4. Setze die Berechtigungen auf 775
  5. Aktiviere „In Unterverzeichnisse einsteigen“
  6. Wiederhole dies fuer den Ordner „bootstrap/cache“

Loesung per Hosting-Panel (cPanel / Plesk):

  1. Oeffne den „Dateimanager“ in deinem Hosting-Panel
  2. Navigiere zum Installationsordner
  3. Klicke auf „storage“ → „Berechtigungen aendern“
  4. Setze die Berechtigungen auf 775 (rekursiv)
  5. Wiederhole dies fuer „bootstrap/cache“

Fehlende Dateien

handleRequest(\Illuminate\Http\Request::capture()); } catch (\Throwable $e) { // 503 statt 500: Einige Hoster (ProxyErrorOverride) ersetzen bei 500 // die Antwort mit einer eigenen Fehlerseite, die unsere Ausgabe versteckt. http_response_code(503); // Nur vor Installation Fehlerdetails anzeigen if (!file_exists(__DIR__ . '/../storage/installed')) { echo ''; echo ''; echo 'Startfehler'; echo ''; echo ''; echo '
'; echo '

Fehler beim Starten der Anwendung

'; echo '
'; // Urspruenglichen Fehler anzeigen (nicht den kaskadierenden Folgefehler) $rootCause = $e; while ($rootCause->getPrevious() !== null) { $rootCause = $rootCause->getPrevious(); } echo '

' . htmlspecialchars($rootCause->getMessage()) . '

'; echo '

Datei: ' . htmlspecialchars($rootCause->getFile()) . ':' . $rootCause->getLine() . '

'; echo '
'; if ($rootCause !== $e) { echo '
'; echo '

Folgefehler: ' . htmlspecialchars($e->getMessage()) . '

'; echo '
'; } echo '
Stack-Trace anzeigen'; echo '
';
        echo htmlspecialchars($rootCause->getTraceAsString());
        echo '
'; echo 'Erneut versuchen'; echo '
'; } }