Muszę ustawić zmienną na wartość domyślną, jeśli nie jest jeszcze ustawiona. Następująca konfiguracja wykonuje zadanie:
if ($foo ~ "^$") {
set $foo default-value;
}
Ale generuje ostrzeżenia w czasie wykonywania:
za pomocą niezainicjowanej zmiennej „foo”
Czy istnieje sposób sprawdzenia, czy zmienna jest ustawiona bez generowania ostrzeżenia i bez globalnego wyłączania ostrzeżenia za pomocą:
uninitialized_variable_warn off;
set_if_empty
na github.com/openresty/set-misc-nginx-moduleuninitialized_variable_warn
nie trzeba go ustawiać globalnie, możesz po prostu ustawić to w miejscu, w którym potrzebujesz użyć potencjalnie niezainicjowanych zmiennych. Używam tego do przekazywania szczegółów SSL do PHP, który będzie pusty, jeśli strona będzie dostępna bez SSL.nginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
uninitialized_variable_warn
jako częściphp.conf
importowanej tylko przez lokalizacje, które obsługują PHP, więc zdecydowanie używam go tylko w tych zakresach, pozostawiając ostrzeżenie wszędzie indziej. Nieuninitialized_variable_warn
ustawiłem jednak żadnego innego zakresu (pozwalając domyślnie natrue
).Odpowiedzi:
Korzystam z poniższych, aby sprawdzić, czy zmienna istnieje:
Jeśli nie zostanie ustawiony przed osiągnięciem tego bloku lokalizacji, ustawi go na pusty ciąg. Równie łatwo możesz dodać ciąg między cytatami. Nie otrzymuję żadnych błędów podczas wykonywania testu konfiguracji przy użyciu tego.
Daj mi znać, jeśli widzisz inaczej.
źródło
$foo ~ "^$"
Wygląda na to, że zachowanie uległo zmianie lub przynajmniej różni się w przypadku wartości parametrów zapytania przy użyciu
$arg_<name>
. W wersji nginx 1.13.6 za pomocą następujących poleceń można sprawdzić, czy istnieje wartość zapytania w zmiennej ngx:nie przechodzi do 404. Używając:
zwraca 404, jeśli parametr zapytania nie istnieje. Przydatne w przypadku nie trafiania w górę, jeśli wymagany parametr zapytania nie istnieje.
źródło
Jeśli
GET QUERY
wykrycie parametrunp.
proxy
variable istnieje zmienna foo.com?proxy Nie używać$arg_proxy
if ($args ~ '(&|^)proxy([&=]|$)' ) { #exists set $port '8080'; }
https://forum.nginx.org/read.php?2,224860,224860źródło
Łatwą opcją, jeśli opcjonalnie ustawiasz zmienną w dołączonym pliku, jest najpierw ustawienie wartości domyślnej.
Druga instrukcja set w pliku conf zastąpi wartość domyślną.
źródło