Nginx ভেরিয়েবল সেট করা থাকলে পরীক্ষা করুন


15

আমার যদি ইতিমধ্যে সেট না করা থাকে তবে একটি ডিফল্ট মানতে আমার একটি ভেরিয়েবল সেট করতে হবে। নিম্নলিখিত কনফিগারেশন কাজ করে:

if ($foo ~ "^$") {
   set $foo default-value;
}

তবে এটি রানটাইম সতর্কতা উত্পন্ন করে:

অবিচ্ছিন্ন "foo" পরিবর্তনশীল ব্যবহার করে

সতর্কবার্তা উত্পন্ন না করে এবং বিশ্বব্যাপী সতর্কতাটি বন্ধ না করে কোনও ভেরিয়েবল সেট করা আছে কিনা তা পরীক্ষা করার কোনও উপায় আছে:

uninitialized_variable_warn off;

github.com/openresty/set-misc-nginx-moduleset_if_empty থেকে চেষ্টা করুন
SaveTheRbtz

2
অনুরূপ কিছু সন্ধান করার জন্য এটি uninitialized_variable_warnসবেমাত্র পাওয়া গেছে, তবে এটি বিশ্বব্যাপী সেট করার দরকার নেই বলে মনে হচ্ছে , যেখানে আপনাকে সম্ভাব্য অবিচ্ছিন্ন ভেরিয়েবলগুলি ব্যবহার করতে হবে সেখানেই আপনি এটি সেট করতে পারেন। আমি পিএইচপি-তে এসএসএল বিবরণ প্রেরণের জন্য এটি ব্যবহার করছি, যা এসএসএল ছাড়াই পৃষ্ঠাটিতে অ্যাক্সেস করা থাকলে খালি হবে।
হারাভিক

@ হারাভিককে দেখে মনে হচ্ছে এটি তেমনটা নয়nginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
n1te

আপনি এখনও এটি অন্য কোথাও সেট আছে? আমি কেবলমাত্র পিএইচপি সমর্থন করে এমন অবস্থানগুলি দ্বারা আমদানি uninitialized_variable_warnকরা অংশ হিসাবে ব্যবহার করছি php.conf, তাই অন্য কোথাও সতর্কতা রেখেই আমি অবশ্যই এটি কেবল সেই স্কোপগুলিতে ব্যবহার করছি। uninitialized_variable_warnযদিও আমি অন্য কোনও স্কোপে সেট করিনি (এটিকে ডিফল্ট হিসাবে দেই true)।
হারাভিক্ক

উত্তর:


11

ভেরিয়েবলের উপস্থিতি আছে কিনা তা পরীক্ষা করতে আমি নিম্নলিখিতটি ব্যবহার করছি:

if ($dir = false) {
    set $dir "";
}

যদি এই অবস্থান ব্লকে পৌঁছানোর আগে এটি সেট না করা হয়, তবে এটি এটিকে ফাঁকা স্ট্রিংয়ে সেট করবে। আপনি উদ্ধৃতিগুলির মধ্যে সহজেই একটি স্ট্রিং যুক্ত করতে পারেন। এটি ব্যবহার করে একটি কনফিগারেশন পরীক্ষা করার সময় আমি কোনও ত্রুটি পাই না।

আপনি অন্যথায় দেখতে পাচ্ছেন কিনা দয়া করে আমাকে জানান।


আমি এনজিনেক্সটি দেখছি: [উত্সাহ] অজানা "দির" পরিবর্তনশীল
অ্যালেক্স বার্কার

1
এই মিথ্যা চেকটি আর কাজ করে না, দয়া করে ব্যবহার করুন$foo ~ "^$"
ভ্যালড্রিনিয়াম

2

ব্যবহারটি ক্যোয়ারী প্যারামিটার মান ব্যবহার করে পরিবর্তিত হয়েছে বা কমপক্ষে ভিন্ন হতে পারে বলে মনে হচ্ছে $arg_<name>। Nginx 1.13.6 এ, এনজিএক্স ভেরিয়েবলের কোনও প্রশ্নের মান বিদ্যমান কিনা তা পরীক্ষা করতে নিম্নলিখিতটি ব্যবহার করে:

if ($arg_test = false) {
    default_type 'text/plain';
    return 404;
}

404 এ পাস হয় না: ব্যবহার করে:

if ($arg_test = '') {
    default_type 'text/plain';
    return 404;
}

কোয়েরি প্যারামিটারটি বিদ্যমান না থাকলে একটি 404 প্রদান করে। কোনও প্রয়োজনীয় ক্যোয়ারী প্যারামিটার উপস্থিত না থাকলে উজানে প্রবাহিত না করার জন্য দরকারী।



0

একটি সহজ বিকল্প, আপনি যদি অন্তর্ভুক্ত ফাইলে বৈকল্পিকভাবে সেট করে থাকেন তবে প্রথমে ডিফল্ট মানটি সেট করা সহজ।

set $value 'default';
include maybe-set-value.conf;

কনফ ফাইলটিতে দ্বিতীয় সেট স্টেটমেন্টটি ডিফল্ট মানটি প্রতিস্থাপন করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.