PHP gibt unsinnigen Fehler aus

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich habe hier bei einer Seite, die bei All-Inkl liegt, ein sehr merkwürdiges Problem.Und zwar wird mir an einer Stelle dieser Fehler ausgegeben:

Fatal error: Uncaught Error: [] operator not supported for strings

Ok, der Fehler an sich ist klar. Ich kann eine String Variable nicht als Array behandeln. Das passiert an der Stelle aber auch nicht.
PHP:
unset($_SESSION['gruppenliste']);
$_SESSION['gruppenliste'] = array();
$_SESSION['gruppenliste'][] = $gruppe;
print_r($_SESSION['gruppenliste']);
Das ist die betroffene Zuweisung. Ursprünglich war die dritte Zeile alleine. Die Sessionvariable ist definitiv bereits ein Array, da eine Ausgabe des Wertes ein Array ergibt. Die Initialisierung in Zeile 2 bringt überhaupt nichts. Auch danach wird immer noch das gefüllte Array ausgegeben. Ich muß ein unset() davor setzen, um ein leeres Array zu erhalten. Das print_r() am Schluß gibt Array ( [0] => 16 ) aus, also alles korrekt. Und dann die Fehlermeldung.
Die PHP Version ist 7.4.

Auf einem lokalem MAMP Server mit PHP 4.7.33 läuft es wunderbar. Ich halte das für ein Problem im PHP selbst. Ist da was bekannt oder liegt es womöglich an All-Inkl?
 
Zeile 3. Die anderen beiden habe ich nur hinzugefügt um absolut sicherzugehen, daß die Sessionvariable tatsächlich ein Array ist. Ich habe mir auch davor den Inhalt ausgeben lassen und auch da war es definitiv ein Array. PHP erkennt scheinbar nicht, daß es sich um ein Array handelt, behandelt es aber trotzdem so. Wie sonst wäre nach Zeile 3 der korrekte Inhalt drin.
 
Nein, denn bisher gab es da ja auch keine Probleme. Das Script ist ja schon Jahre alt. Ich habe auch den Rest durchsucht, aber es wird nirgends der Variablen ein String zugewiesen.

Mit array_push() scheint es zu funktionieren. Stellt sich mir nur die Frage, wieso?
 
Zuletzt bearbeitet:
@Sprint
Ich habe das mal mit php-7.4.30, php-8.2.12 und php-8.3.3 getestet, funktioniert mit allen Versionen

PHP:
<?php
   session_start();
   $gruppe = 1;
   unset($_SESSION['gruppenliste']);
   $_SESSION['gruppenliste'] = array();
   $_SESSION['gruppenliste'][] = $gruppe;
   print_r($_SESSION['gruppenliste']);
?>

Bist du dir sicher, dass du nicht an anderer Stelle die Session manipulierst?
 

Neue Beiträge

Zurück