মধ্যে পার্থক্য কি getenv()
এবং $_ENV
?
উভয় ব্যবহারের মধ্যে কোন বাণিজ্য বন্ধ?
আমি লক্ষ্য করেছি যে মাঝে মাঝে getenv()
আমার যা প্রয়োজন তা দেয়, যখন $_ENV
না হয় (যেমন HOME
)।
মধ্যে পার্থক্য কি getenv()
এবং $_ENV
?
উভয় ব্যবহারের মধ্যে কোন বাণিজ্য বন্ধ?
আমি লক্ষ্য করেছি যে মাঝে মাঝে getenv()
আমার যা প্রয়োজন তা দেয়, যখন $_ENV
না হয় (যেমন HOME
)।
উত্তর:
জেন্তেভ সম্পর্কে পিএইচপি ডকুমেন্টেশন অনুসারে , তারা হুবহু একই, ব্যাতিক্রমটিgetenv
ক্ষেত্রে-সংবেদনশীল উপায়ে পরিবর্তনশীলটির সন্ধান করবে। বেশিরভাগ সময় এটি সম্ভবত কিছু যায় আসে না, তবে ডকুমেন্টেশনের একটি মন্তব্য ব্যাখ্যা করে:
উদাহরণস্বরূপ উইন্ডোজ $ _SERVER ['পাথ'] তে আপনি যেমনটি দেখেন, তেমনই প্রথম অক্ষরকে মূলধন দিয়েছিলেন, 'পাথ' নয় যেমনটি আপনি আশা করতে পারেন।
সে কারণে, আপনি সম্ভবত getenv
পরিবর্তন করতে চাইছেন এমন ভেরিয়েবলের শিরোনামের আবরণ সম্পর্কে নিশ্চিত না হলে আমি সম্ভবত ব্যবহার করতে চাইব ।
getenv()
সুবিধা: আপনার অ্যাক্সেসের আগে isset
/ চেক empty
করার প্রয়োজন নেই। getenv()
নোটিশ ছাড়বে না
আমি জানি যে দস্তাবেজে মন্তব্য বলছেন যে getenv
কেস-অবশ হয়, কিন্তু যে না আচরণ আমি এইজন্য করছি:
> env FOO=bar php -r 'print getenv("FOO") . "\n";'
bar
> env FOO=bar php -r 'print getenv("foo") . "\n";'
> env foo=bar php -r 'print getenv("foo") . "\n";'
bar
> env foo=bar php -r 'print getenv("FOO") . "\n";'
> php --version
PHP 5.4.24 (cli) (built: Jan 24 2014 03:51:25)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
এ খুঁজছি সোর্স কোড জন্য getenv
ফাংশন, এই হল কারণ তিনটি উপায়ে যে পিএইচপি এনভায়রনমেন্ট ভেরিয়েবল আনা পারেন:
sapi_getenv
(যেমন যদি এটি অ্যাপাচি থেকে পরিবেশের পরিবর্তনশীল হয়ে থাকে)GetEnvironmentVariableA
।getenv
থাকে তবে প্রদত্ত ফাংশন থেকে libc
।যতদূর আমি বলতে পারি, একমাত্র সময় যখন এটি কেস-সংবেদনশীল পদ্ধতিতে আচরণ করবে উইন্ডোজে কারণ উইন্ডোজ এনভায়রনমেন্ট ভেরিয়েবল এপিআই আচরণ করে। আপনি যদি লিনাক্স, বিএসডি, ম্যাক ইত্যাদিতে থাকেন তবে getenv
এখনও কেস সংবেদনশীল।
মারিও দ্বারা উল্লিখিত হিসাবে , $_ENV
বিভিন্ন কনফিগারেশনের কারণে সর্বদা পপুলেটেড হয় না variables_order
তাই আপনি $_ENV
যদি সার্ভার কনফিগারেশন নিয়ন্ত্রণ না করেন তবে এড়ানো ভাল best
সুতরাং, সর্বাধিক বহনযোগ্য পিএইচপি কোডের জন্য:
getenv
।উপরন্তু $_ENV
সাধারণত খালি যদি variables_order
does't আছে E
তালিকাভুক্ত। অনেকগুলি সেটআপগুলিতে সম্ভবত এটি সম্ভবত $_SERVER
জনবহুল এবং $_ENV
সিএলআই ব্যবহারের জন্য কঠোর is
অন্যদিকে getenv()
সরাসরি পরিবেশে প্রবেশ করে।
(কেস-স্পষ্টতা সম্পর্কে, একজন আরও সহজভাবে নিয়োগ করতে পারে array_change_key_case()
))
আমি দেখেছি getenv()
একটি এড়াতে দরকারী অদ্ভুত পিএইচপি বাগ যেখানে মাঝে মাঝে $_SERVER
এবং $_ENV
যদি অনির্দিষ্ট ছিল auto_globals_jit
(তৈরি সক্ষম করা ছিল _SERVER এবং _ENV যখন তারা প্রথম ব্যবহার করছি ভেরিয়েবল)। সেই থেকে আমি এটি ব্যবহার শুরু করি।
পিএইচপি ডক্স থেকে নেওয়া :
এই ফাংশনটি দরকারী (তুলনায়
$_SERVER
,$_ENV
) কারণ এটি ar অ্যারে কেস-সংবেদনশীল উপায়ে name বর্ণের কীটি অনুসন্ধান করে। উইন্ডোজ উদাহরণস্বরূপ$_SERVER['Path']
আপনি ক্যাপিটালাইজড দেখতে চান, 'PATH
' হিসাবে আপনি প্রত্যাশা ছিল না। সুতরাং ঠিক:<?php getenv('path') ?>
আমি যুক্ত করব যে জেন্তেভ () আরও ভাল পছন্দ কারণ একটি কার্য হিসাবে এটি পরীক্ষার উদ্দেশ্যে ওভারলোড করা যেতে পারে। অন্যদিকে আপনার _S _SERVER বা $ _ENV ভেরিয়েবলগুলি ওভাররাইট করা টেস্ট ফ্রেমওয়ার্ক এবং অন্যান্য গ্রন্থাগারগুলিতে হস্তক্ষেপ করতে পারে এবং শেষ পর্যন্ত নিরাপদে চালিয়ে যেতে আরও অনেক বেশি কাজ প্রয়োজন।
env পড়ুন এবং তৈরি করুন
<?php
namespace neoistone;
class ns_env {
/**
* env to array file storage
*
* @param $envPath
*/
public static function envToArray(string $envPath)
{
$variables = [];
$mread = fopen($envPath, "r");
$content = fread($mread,filesize($envPath));
fclose($mread);
$lines = explode("\n", $content);
if($lines) {
foreach($lines as $line) {
// If not an empty line then parse line
if($line !== "") {
// Find position of first equals symbol
$equalsLocation = strpos($line, '=');
// Pull everything to the left of the first equals
$key = substr($line, 0, $equalsLocation);
// Pull everything to the right from the equals to end of the line
$value = substr($line, ($equalsLocation + 1), strlen($line));
$variables[$key] = $value;
} else {
$variables[] = "";
}
}
}
return $variables;
}
/**
* Array to .env file storage
*
* @param $array
* @param $envPath
*/
public static function arrayToEnv(array $array, string $envPath)
{
$env = "";
$position = 0;
foreach($array as $key => $value) {
$position++;
// If value isn't blank, or key isn't numeric meaning not a blank line, then add entry
if($value !== "" || !is_numeric($key)) {
// If passed in option is a boolean (true or false) this will normally
// save as 1 or 0. But we want to keep the value as words.
if(is_bool($value)) {
if($value === true) {
$value = "true";
} else {
$value = "false";
}
}
// Always convert $key to uppercase
$env .= strtoupper($key) . "=" . $value;
// If isn't last item in array add new line to end
if($position != count($array)) {
$env .= "\n";
}
} else {
$env .= "\n";
}
}
$mwrite = fopen($envPath, "w");
fwrite($mwrite, $env);
fclose($mwrite);
}
/**
* Json to .env file storage
*
* @param $json
* @param $envPath
*/
public static function JsonToEnv(array $json, string $envPath)
{
$env = "";
$position = 0;
$array = json_decode($json,true);
foreach($array as $key => $value) {
$position++;
// If value isn't blank, or key isn't numeric meaning not a blank line, then add entry
if($value !== "" || !is_numeric($key)) {
// If passed in option is a boolean (true or false) this will normally
// save as 1 or 0. But we want to keep the value as words.
if(is_bool($value)) {
if($value === true) {
$value = "true";
} else {
$value = "false";
}
}
// Always convert $key to uppercase
$env .= strtoupper($key) . "=" . $value;
// If isn't last item in array add new line to end
if($position != count($array)) {
$env .= "\n";
}
} else {
$env .= "\n";
}
}
$mwrite = fopen($envPath, "w");
fwrite($mwrite, $env);
fclose($mwrite);
}
/**
* XML to .env file storage
*
* @param $json
* @param $envPath
*/
public static function XmlToEnv(array $xml, string $envPath)
{
$env = "";
$position = 0;
$array = simplexml_load_string($xml);
foreach($array as $key => $value) {
$position++;
// If value isn't blank, or key isn't numeric meaning not a blank line, then add entry
if($value !== "" || !is_numeric($key)) {
// If passed in option is a boolean (true or false) this will normally
// save as 1 or 0. But we want to keep the value as words.
if(is_bool($value)) {
if($value === true) {
$value = "true";
} else {
$value = "false";
}
}
// Always convert $key to uppercase
$env .= strtoupper($key) . "=" . $value;
// If isn't last item in array add new line to end
if($position != count($array)) {
$env .= "\n";
}
} else {
$env .= "\n";
}
}
$mwrite = fopen($envPath, "w");
fwrite($mwrite, $env);
fclose($mwrite);
}
}
?>
$_ENV
এবং$_SERVER
বিভিন্ন উপায়ে প্রাপ্ত ডেটা দিয়ে জনবহুল।getenv()
ডেটা অ্যাক্সেস করার আরেকটি উপায় যা পিএইচপি আপনাকে সরাসরি অ্যাক্সেস করতে সক্ষম করে না। এটিvariables_order = "G"
কখন$_SERVER
এবং কখন$_ENV
খালি রয়েছে তার সাথেও কাজ করে । কনর ম্যাকডার্মোট্রোয়ের দুর্দান্ত উত্তরটি পড়ুন ।