J'ai besoin de définir une variable sur une valeur par défaut si elle n'est pas déjà définie. La configuration suivante fait le travail:
if ($foo ~ "^$") {
set $foo default-value;
}
Mais il génère des avertissements d'exécution:
en utilisant la variable "foo" non initialisée
Existe-t-il un moyen de tester si une variable est définie sans générer l'avertissement et sans désactiver l'avertissement globalement avec:
uninitialized_variable_warn off;
set_if_empty
sur github.com/openresty/set-misc-nginx-moduleuninitialized_variable_warn
cela ne doive pas être défini globalement, vous pouvez simplement le définir là où vous devez utiliser des variables potentiellement non initialisées. J'utilise ceci pour transmettre des détails SSL à PHP, qui sera vide si la page est accessible sans SSL.nginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
uninitialized_variable_warn
dans le cadre d'unphp.conf
importé uniquement par des emplacements qui prennent en charge PHP, donc je ne l'utilise certainement que dans ces étendues, tout en laissant l'avertissement partout ailleurs. Je n'ai cependantuninitialized_variable_warn
défini aucune autre portée (en le laissant par défauttrue
).Réponses:
J'utilise ce qui suit pour vérifier si une variable existe:
S'il n'est pas défini avant qu'il n'atteigne ce bloc d'emplacement, il le définira sur une chaîne vide. Vous pouvez tout aussi facilement ajouter une chaîne entre les guillemets. Je ne reçois aucune erreur lors d'un test de configuration à l'aide de ceci.
Veuillez me faire savoir si vous voyez le contraire.
la source
$foo ~ "^$"
Le comportement semble avoir changé ou au moins être différent pour les valeurs des paramètres de requête utilisant
$arg_<name>
. Sur nginx 1.13.6, utilisez ce qui suit pour vérifier si une valeur de requête dans la variable ngx existe:ne passe pas au 404. Utilisation:
renvoie un 404, si le paramètre de requête n'existe pas. Utile pour ne pas frapper en amont si un paramètre de requête requis n'existe pas.
la source
Si
GET QUERY
détection de paramètrespar exemple: foo.com?proxy
proxy
variable existe Ne pas utiliser$arg_proxy
if ($args ~ '(&|^)proxy([&=]|$)' ) { #exists set $port '8080'; }
https://forum.nginx.org/read.php?2,224860,224860la source
Une option simple, si vous définissez éventuellement la variable dans un fichier inclus, consiste simplement à définir d'abord la valeur par défaut.
La deuxième instruction set dans le fichier conf remplacera la valeur par défaut.
la source