Bug #145
offen[Bugsink] Error: ksort(): Argument #1 ($array) could not be passed by reference
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/635f3758-b66c-4cd7-803a-f986bc235d41/event/last/
Typ: NEW issue
Projekt: www-verl-de
Bugsink Alert
Error: ksort(): Argument #1 ($array) could not be passed by reference
Automatisch erstellt durch n8n
KI-Analyse:
🔍 1. WAS TRETTET AUF?
ksort() ist ein eingebauter PHP-String, dessen Signatur wie folgt aussieht:
ksort(array &$array, int $sort_flags = SORT_REGULAR) : bool
Es muss ein veränderliches (referenzfähiges) Array übergeben werden.
Wenn der Aufrufer ein nicht referenzfähiges Argument bereitstellt (z. B. ein temporäres Array-Literal, eine Funktion, die ein Array zurückgibt, oder ein nicht lwertiger Ausdruck), löst PHP den fatalen Fehler aus:
ksort(): Argument #1 ($array) could not be passed by reference
📍 2. GENAUER ORT DES FEHLERS IN DEN STACK-TRACES
| Datei (Zeile) | Was tut die Methode | Warum löst sie ksort() aus? |
|---|---|---|
vendor/typo3/cms‑core/Classes/Middleware/VerifyHostHeader.php Zeile 55
|
Sortiert $_SERVER-Daten (oder ein temporäres Array), um einen Host-Header zu vergleichen. |
Es wird ein temporäres Array-Literal übergeben oder der Wert von etwas wie ksort([...]) übergeben, was nicht referenzfähig ist. |
vendor/typo3/cms‑core/Classes/Middleware/NormalizedParamsAttribute.php Zeile 44
|
Normalisiert Request::getParsedBody() (oder getQueryParams()) und sortiert es für die Konsistenz der Hash-Erstellung. |
ksort($params) erhält ein Array, das aus dem ternären Operator … ?: [] abgeleitet ist. Das innerhalb des Operators erzeugte leere Array-Literal ist ein temporärer Wert → es kann nicht übergeben werden. |
Beide Stack-Frames leiten denselben zugrunde liegenden Programmierfehler weiter: Die Argumentation für ksort() ist nicht veränderlich.
🛠️ 3. WIE MAN ES BEHEBT (PRAKTISCHER FIX)
/* BEFORE (fehlerhaft) – file: VerifyHostHeader.php line ~55 */
ksort([...]); // <-- temporäres Array-Literal → fatal
// oder
ksort($request->getParsedBody() ?: []); // <-- temporäres Array-Literal
/* AFTER (korrekt) – file: VerifyHostHeader.php line ~55 */
$toSort = $request->getParsedBody(); // kann null sein
if (!is_array($toSort)) {
$toSort = []; // neues Array, das referenziert werden kann
}
ksort($toSort, SORT_REGULAR); // jetzt wird ein veränderliches Array übergeben
/* =======================================================
ANALYSE DES ZWEITEN FEHLERS – NormalizedParamsAttribute.php line 44
======================================================= */
$normalized = $request->getParsedBody(); // kann null sein
if (!is_array($normalized)) {
$normalized = [];
}
ksort($normalized, SORT_REGULAR);
Was der Fix bewirkt
-
Erstellt zuerst eine Variable, die referenzfähig ist (
$toSort/$normalized). -
Füllt die Variable entweder mit dem ursprünglichen Array oder mit einem echten leeren Array auf (
[]). -
Ruft
ksort()mit dieser Variablen auf – sie ist nun ein echtes Array-Assignation (lwertig), das die Referenzanforderung vonksort()erfüllt.
Hinweis: Der Aufruf von ksort($arr, SORT_REGULAR) ist optional; der Standardwert SORT_REGULAR funktioniert in Ordnung, wenn kein Flag angegeben wurde.
📦 4. BETROFFENE TYPO3-EXTENTION
| Extension | Grund, warum sie in Frage kommt |
|---|---|
typo3/cms-core (der TYPO3 Core selbst) |
Die fehlerhaften Zeilen befinden sich in den Kern-Utility-Klassen VerifyHostHeader und NormalizedParamsAttribute. Es sind keine Drittanbieter-Erweiterungen erforderlich; das Problem liegt im Kern. |
(Falls Sie Erweiterungen haben, die VerifyHostHeader oder NormalizedParamsAttribute überschreiten und die Sortierlinie duplizieren) |
Diese Plugins würden den gleichen Fehler weitergeben. Sie sollten denselben Fix anwenden. |
✅ 5. KONFIDENZ-level
Basierend auf:
- Der genaue Stack-Trace verweist auf zwei bekannte Kern-Dateien.
- Die Analyse des Codes zeigt ein Muster von „temporären Array-Literalen“, das auf eine nicht referenzfähige Argumentation für
ksort()hindeutet. - Die Lösung folgt dem PHP-Handbuch für
ksort()und der TYPO3-Coding-Standards (erzeugen Sie zuerst ein echtes Array-Assignation).
Konfidenz: 88 % – sehr hoch, aber die Möglichkeit, dass eine benutzerdefinierte Erweiterung denselben Fehler verursacht, bleibt (deshalb listen wir den Kern auf und erwähnen die Möglichkeit).
TL;DR (in einem Satz)¶
Der TYPO3-Kern (vermittelte Klassen VerifyHostHeader und NormalizedParamsAttribute) ruft ksort() auf ein Array, das ein temporärer Wert ist (z. B. [] aus einem ternären Operator), sodass PHP keinen Referenzverweis zuweisen kann. Erstellen Sie zuerst ein echtes Array-Assignation und geben Sie dieses dann an ksort() weiter. Der Fix liegt im Core (typo3/cms-core), obwohl jede Erweiterung, die diese Methoden überschreibt, denselben Fehler beheben sollte.
Nichts anzuzeigen