TL; DR
Sie versuchen, auf stringein Array zuzugreifen, als wäre es ein Array mit einem Schlüssel, der a ist string. stringwerde das nicht verstehen. Im Code können wir das Problem sehen:
"hello"["hello"];
// PHP Warning: Illegal string offset 'hello' in php shell code on line 1
"hello"[0];
// No errors.
array("hello" => "val")["hello"];
// No errors. This is *probably* what you wanted.
In der Tiefe
Lassen Sie uns diesen Fehler sehen:
Warnung: Unzulässiger String-Offset 'Port' in ...
Was sagt es? Es heißt, wir versuchen, die Zeichenfolge 'port'als Offset für eine Zeichenfolge zu verwenden. So was:
$a_string = "string";
// This is ok:
echo $a_string[0]; // s
echo $a_string[1]; // t
echo $a_string[2]; // r
// ...
// !! Not good:
echo $a_string['port'];
// !! Warning: Illegal string offset 'port' in ...
Was verursacht das?
Aus irgendeinem Grund haben Sie eine erwartet array , aber Sie haben eine string. Nur eine Verwechslung. Vielleicht wurde Ihre Variable geändert, vielleicht war es nie eine array, es ist wirklich nicht wichtig.
Was kann getan werden?
Wenn wir wissen, dass wir eine haben sollten array, sollten wir einige grundlegende Fehlerbehebungen durchführen, um festzustellen, warum wir keine haben array. Wenn wir nicht wissen, ob wir ein arrayoder haben werdenstring , werden die Dinge etwas schwieriger.
Was wir tun können , sind alle Arten von Überprüfungen, um sicherzustellen, dass wir keine Hinweise, Warnungen oder Fehler mit Dingen wie is_arrayund issetoder haben array_key_exists:
$a_string = "string";
$an_array = array('port' => 'the_port');
if (is_array($a_string) && isset($a_string['port'])) {
// No problem, we'll never get here.
echo $a_string['port'];
}
if (is_array($an_array) && isset($an_array['port'])) {
// Ok!
echo $an_array['port']; // the_port
}
if (is_array($an_array) && isset($an_array['unset_key'])) {
// No problem again, we won't enter.
echo $an_array['unset_key'];
}
// Similar, but with array_key_exists
if (is_array($an_array) && array_key_exists('port', $an_array)) {
// Ok!
echo $an_array['port']; // the_port
}
Es gibt einige subtile Unterschiede zwischen issetund array_key_exists. Wenn beispielsweise der Wert von $array['key']ist null, wird issetzurückgegeben false. array_key_existsIch werde nur überprüfen, ob der Schlüssel existiert .
$memcachedConfigist das nicht Array. Showvar_dump($memcachedConfig);