ownCloud Login-Loop mit PHP 7.0.6

Lesedauer: ~1 Minute

Vor ein paar Tagen gab es ein Update von PHP zu Version 7.0.6. Hierbei hat sich die Funktionalität der PHP-Funktion isset() geändert, welches verschiedene Auswirkung auf ownCloud hat. Ein Problem, welches hierbei auftritt ist, dass man sich nicht mehr bei bei ownCloud anmelden kann. Entweder befindet man sich in einem Login-Loop und man wird immer wieder zur Login-Maske weitergeleitet, oder, falls noch ein gültiger Cookie existiert, wird man immer auf localhost weitergeleitet.

Ein offizieller Fix für das Problem soll laut den ownCloud-Entwicklern erst mit ownCloud 9.0.3 erscheinen. Bis dahin kann man sich mit einem Workaround helfen, indem man selbst eine Änderung am ownCloud-Code vornimmt. Hierfür bearbeitet man die Datei lib/private/appframework/http/request.php und sucht nach public function __isset($name). Diese sieht ursprünglich folgendermaßen aus.

public function __isset($name) {
    return isset($this->items['parameters'][$name]);
}

Diese wird nun angepasst, sodass sie folgendermaßen aussieht. Insgesamt wird die Funktion um eine If-Klausel ergänzt.

public function __isset($name) {
    if (in_array($name, $this->allowedKeys, true)) {
        return true;
    }
    return isset($this->items['parameters'][$name]);
}

Nach den Änderungen ist ownCloud direkt wieder erreichbar und man kann sich wie gewohnt einloggen.