Wenn Sie die neueste Version von ILIAS in einem Docker-Container betreiben und plötzlich feststellen, dass Sie keine Kursteilnehmer mehr verwalten können – was zu einer leeren Seite oder einem HTTP 500-Fehler führt – sind Sie nicht allein.
Da ILIAS derzeit die öffentliche Erstellung von Issues in ihrem GitHub-Repository nicht zulässt, bleiben viele Administratoren ohne Workaround stecken. Hier sind die Ursache und ein schneller 1-Minuten-Hotfix, um Ihr LMS wieder zum Laufen zu bringen.
Das Problem
Wenn Sie zum Tab Mitglieder oder zu den Mitgliedschafts-Einstellungen eines Kurses navigieren, wird die Seite nicht geladen. Wenn Sie Ihre Docker-Protokolle prüfen (docker logs ilias_app), wird der folgende PHP Fatal TypeError angezeigt:
facultyai_root.ERROR: Cannot assign ILIAS\Refinery\Factory to property ilCourseParticipantsTableGUI::$refinery of type ILIAS\Refinery in /var/www/html/components/ILIAS/Course/classes/class.ilCourseParticipantsTableGUI.php:71
Die Ursache
Die ILIAS-Codebasis weist einen strikten Typ-Konflikt auf. Die Eigenschaft $refinery ist als Typ ILIAS\Refinery deklariert, aber der globale Dependency-Injection-Container übergibt eine Instanz von ILIAS\Refinery\Factory. Aufgrund der strikten Typisierung in modernen PHP-Versionen führt dieser Konflikt zu einem sofortigen Absturz der Kurs-Mitgliedschafts-GUI.
Die Lösung (1-Minuten-Hotfix)
Sie können dies beheben, indem Sie die Datei direkt in Ihrem Docker-Container bearbeiten.
1. Greifen Sie auf die Shell Ihres Containers zu:
docker exec -it ilias_app bash
(Ersetzen Sie ilias_app durch den Namen Ihres ILIAS-Containers).
2. Öffnen Sie die problematische Datei in einem Texteditor:
nano /var/www/html/components/ILIAS/Course/classes/class.ilCourseParticipantsTableGUI.php
3. Aktualisieren Sie die Eigenschaftsdeklaration (ungefähr Zeile 33).
Finden Sie die Zeile, die die Eigenschaft $refinery deklariert. Aktuell sieht sie in etwa so aus (oder ihr fehlt der richtige Type-Hint vollständig):
protected \$refinery;
Ändern Sie dies in genau Folgendes:
protected ILIAS\Refinery\Factory $refinery;
Speichern und schließen Sie den Editor (in nano: Strg+O, Enter, dann Strg+X).
4. Leeren Sie den PHP OPcache (Entscheidend für Docker)
Wenn Sie den OPcache nicht leeren, wird PHP weiterhin die alte, fehlerhafte Version der Datei aus dem Speicher ausführen. Starten Sie den PHP-Handler in Ihrem Container neu:
service php8.1-fpm restart
(Hinweis: Passen Sie die PHP-Version im Befehl an, wenn Ihr Container 8.0 oder 8.2 verwendet. Wenn Sie Apache mit mod_php verwenden, nutzen Sie stattdessen service apache2 restart).
Wichtiger Hinweis zu Docker-Containern
Dieser Hotfix modifiziert die beschreibbare Schicht (Writable Layer) des Containers.
- Sicher: Wenn Sie den Container lediglich mit
docker stopunddocker startanhalten und starten, bleibt der Hotfix erhalten. - Nicht sicher: Wenn Sie den Container neu erstellen (z. B.
docker-compose downunddocker-compose up), wird der Hotfix gelöscht und Sie müssen ihn erneut anwenden, bis die ILIAS-Entwickler einen offiziellen Patch veröffentlichen.