Ich muss eine Variable auf einen Standardwert setzen, wenn dieser noch nicht festgelegt ist. Folgende Konfiguration erledigt den Job:
if ($foo ~ "^$") {
set $foo default-value;
}
Es werden jedoch Laufzeitwarnungen generiert:
Verwenden einer nicht initialisierten "foo" -Variable
Gibt es eine Möglichkeit zu testen, ob eine Variable gesetzt ist, ohne die Warnung zu generieren und ohne die Warnung global zu deaktivieren?
uninitialized_variable_warn off;
set_if_empty
unter github.com/openresty/set-misc-nginx-moduleuninitialized_variable_warn
, als ich nach etwas Ähnlichem gesucht habe, aber es scheint, als ob es nicht global festgelegt werden muss. Sie können es einfach dort festlegen, wo Sie möglicherweise nicht initialisierte Variablen verwenden müssen. Ich benutze dies, um SSL-Details an PHP zu übergeben, das leer ist, wenn auf die Seite ohne SSL zugegriffen wird.nginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
uninitialized_variable_warn
als Teil einesphp.conf
, das nur von Orten importiert wird, die PHP unterstützen, also benutze ich es definitiv nur in diesen Bereichen, während ich die Warnung an anderer Stelle lasse. Ich habe jedochuninitialized_variable_warn
keinen anderen Bereich festgelegt (Standardeinstellung isttrue
).Antworten:
Ich benutze das Folgende, um zu prüfen, ob eine Variable existiert:
Wenn es nicht gesetzt ist, bevor es diesen Positionsblock erreicht, wird es auf eine leere Zeichenkette gesetzt. Sie können genauso einfach eine Zeichenfolge zwischen die Anführungszeichen einfügen. Ich erhalte keine Fehler, wenn ich einen Konfigurationstest mit dieser Option durchführe.
Bitte lassen Sie mich wissen, wenn Sie etwas anderes sehen.
quelle
$foo ~ "^$"
Das Verhalten scheint sich bei Verwendung von Abfrageparameterwerten geändert zu haben oder zumindest anders zu sein
$arg_<name>
. Verwenden Sie unter nginx 1.13.6 Folgendes, um zu überprüfen, ob ein Abfragewert in der Variablen ngx vorhanden ist:geht nicht auf den 404 über.
Gibt 404 zurück, wenn der Abfrageparameter nicht existiert. Dies ist nützlich, wenn kein Upstream ausgeführt werden soll, wenn ein erforderlicher Abfrageparameter nicht vorhanden ist.
quelle
Wenn
GET QUERY
ParametererkennungzB : foo.com?proxy
proxy
Variable existiert nicht$arg_proxy
if ($args ~ '(&|^)proxy([&=]|$)' ) { #exists set $port '8080'; }
https://forum.nginx.org/read.php?2,224860,224860quelle
Wenn Sie die Variable in einer eingeschlossenen Datei optional festlegen, können Sie einfach zuerst den Standardwert festlegen.
Die zweite set-Anweisung in der conf-Datei ersetzt den Standardwert.
quelle