উত্তর:
IF : আপনার কেবলমাত্র একটি একক শিরোলেখ প্রয়োজন, সমস্ত শিরোনামের পরিবর্তে , দ্রুত পদ্ধতিটি হ'ল:
<?php
// Replace XXXXXX_XXXX with the name of the header you need in UPPERCASE (and with '-' replaced by '_')
$headerStringValue = $_SERVER['HTTP_XXXXXX_XXXX'];
ELSE IF : আপনি অ্যাপাচি মডিউল হিসাবে বা পিএইচপি 5.4 হিসাবে, ফাস্টসিজিআই (সাধারণ পদ্ধতি) ব্যবহার করে চালান:
<?php
$headers = apache_request_headers();
foreach ($headers as $header => $value) {
echo "$header: $value <br />\n";
}
ELSE: অন্য যে কোনও ক্ষেত্রে, আপনি (ইউজারল্যান্ড বাস্তবায়ন) ব্যবহার করতে পারেন:
<?php
function getRequestHeaders() {
$headers = array();
foreach($_SERVER as $key => $value) {
if (substr($key, 0, 5) <> 'HTTP_') {
continue;
}
$header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))));
$headers[$header] = $value;
}
return $headers;
}
$headers = getRequestHeaders();
foreach ($headers as $header => $value) {
echo "$header: $value <br />\n";
}
আরও দেখুন :
getallheaders () - (পিএইচপি> = 5.4) অ্যাপাচি_সেসপন্স_হেডারস () - এর ক্রস প্ল্যাটফর্ম সংস্করণ আলিয়াস - সমস্ত এইচটিটিপি প্রতিক্রিয়া শিরোনাম আনুন। শিরোলেখ_ তালিকা () - প্রেরণের জন্য শিরোনামের একটি তালিকা আনুন।apache_request_headers()
$_SERVER['HTTP_X_REQUESTED_WITH']
আরএফসি 3875 , 4.1.18:
HTTP_
ব্যবহৃত প্রোটোকল যদি এইচটিটিপি হয় তবে ক্লায়েন্টের অনুরোধ শিরোনাম ক্ষেত্রগুলি থেকে পাঠানো মানগুলি সহ নামের সাথে শুরু হওয়া মেটা-ভেরিয়েবলগুলি । এইচটিটিপি শিরোলেখের ক্ষেত্রের নামটি বড় হাতের অক্ষরে রূপান্তরিত হয়, এর-
সাথে প্রতিস্থাপনের সমস্ত উপস্থিতি রয়েছে_
এবংHTTP_
মেটা-ভেরিয়েবলের নাম দিতে প্রস্তুত রয়েছে।
$_SERVER
ভেরিয়েবলের মধ্যে রাখবে ? পিএইচপি ডকুমেন্টেশন php.net/manual/en/reided.variables.server.php এ আমরা কী হবে তা নিশ্চিত হতে পারি সে সম্পর্কে ক্ষোভজনক ।
cache-control
শিরোনাম প্রেরণ করছে , তবে আমি এটি কোথাও দেখতে পাচ্ছি না $_SERVER
। আমি দেখতে পাই HTTP_
"HTTP_ACCEPT", এবং "HTTP_UPGRADE_INSECURE_REQUESTS" এবং "HTTP_USER_AGENT" (অন্য কয়েকজনের মধ্যে) সহ বেশ কয়েকটি শিরোনাম উপস্থাপিত। তবে "ক্যাশে-নিয়ন্ত্রণ" এর জন্য কিছুই "প্রগমা" এর জন্য কিছুই নয়। এটি কেস বা HTTP_
উপসর্গ নির্বিশেষে । আমি কিছু অনুপস্থিত করছি?
_SERVER["HTTP_CACHE_CONTROL"] max-age=0
আপনার সমস্ত HTTP শিরোনামগুলি $_SERVER
গ্লোবাল ভেরিয়েবলের উপরিভাগযুক্ত HTTP_
এবং ড্যাশ (-) দ্বারা আন্ডারস্কোর (_) দ্বারা প্রতিস্থাপিত পাওয়া উচিত।
উদাহরণস্বরূপ আপনার X-Requested-With
পাওয়া যাবে:
$_SERVER['HTTP_X_REQUESTED_WITH']
$_SERVER
ভেরিয়েবল থেকে একটি এসোসিয়েটিভ অ্যারে তৈরি করা সুবিধাজনক হতে পারে । এটি বেশ কয়েকটি শৈলীতে করা যেতে পারে, তবে এখানে একটি ফাংশন রয়েছে যা উটচাপা কীগুলি আউটপুট করে:
$headers = array();
foreach ($_SERVER as $key => $value) {
if (strpos($key, 'HTTP_') === 0) {
$headers[str_replace(' ', '', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))))] = $value;
}
}
এখন কেবল $headers['XRequestedWith']
পছন্দসই শিরোনামটি পুনরুদ্ধার করতে ব্যবহার করুন ।
পিএইচপি ম্যানুয়াল $_SERVER
: http://php.net/manual/en/reided.variables.server.php এ
parseRequestHeaders()
ফাংশনটি পড়া থেকে সহজ সমাধানটি বের করা খুব সহজ নয় । যদি এই জাতীয় কোনও অ্যা্যাসোসিয়েটিভ অ্যারের প্রয়োজন হয়, তবে আইএমও অ্যাপাচি ফাংশন হ'ল সর্বোত্তম বিকল্প, কারণ এটি ম্যাংলেড ক্যামেলকেস সংস্করণের পরিবর্তে হুবহু শিরোনাম প্রদান করে। (আরও মনে রাখবেন যে পিএইচপি ৫.৪ হিসাবে এটি আর কেবল অ্যাপাচি-আর নেই।)
apache_request_headers()
বা getallheaders()
যখন আমি পরীক্ষা করেছি তখন শিরোনামের নামগুলি বড় করে দেখায় না। ক্লায়েন্টের পাশ দিয়ে যাবার সাথে সাথে তারা ঠিক ফিরে আসছে। তারপরে আপনি কেন এমন প্রতিস্থাপন ফাংশনে শিরোনামের নামগুলি মূলধন করছেন?
পিএইচপি 5.4.0 থেকে আপনি getallheaders
ফাংশনটি ব্যবহার করতে পারেন যা সমস্ত অনুরোধ শিরোনামকে সহযোগী অ্যারে হিসাবে ফিরিয়ে দেয়:
var_dump(getallheaders());
// array(8) {
// ["Accept"]=>
// string(63) "text/html[...]"
// ["Accept-Charset"]=>
// string(31) "ISSO-8859-1[...]"
// ["Accept-Encoding"]=>
// string(17) "gzip,deflate,sdch"
// ["Accept-Language"]=>
// string(14) "en-US,en;q=0.8"
// ["Cache-Control"]=>
// string(9) "max-age=0"
// ["Connection"]=>
// string(10) "keep-alive"
// ["Host"]=>
// string(9) "localhost"
// ["User-Agent"]=>
// string(108) "Mozilla/5.0 (Windows NT 6.1; WOW64) [...]"
// }
এর আগে এই ফাংশনটি তখনই কাজ করেছিল যখন পিএইচপি অ্যাপাচি / এনএসএপিআই মডিউল হিসাবে চলছিল।
strtolower
প্রস্তাবিত বেশ কয়েকটি সমাধানের অভাব রয়েছে, আরএফসি 2616 (HTTP / 1.1) শিরোনাম ক্ষেত্রকে কেস-সংবেদনশীল সত্তা হিসাবে সংজ্ঞায়িত করে। পুরো জিনিসটি, কেবল মান অংশ নয়।
সুতরাং শুধুমাত্র HTTP_ এন্ট্রি পার্স করার মতো পরামর্শগুলি ভুল।
এর চেয়ে ভাল হবে:
if (!function_exists('getallheaders')) {
foreach ($_SERVER as $name => $value) {
/* RFC2616 (HTTP/1.1) defines header fields as case-insensitive entities. */
if (strtolower(substr($name, 0, 5)) == 'http_') {
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
$this->request_headers = $headers;
} else {
$this->request_headers = getallheaders();
}
পূর্ববর্তী পরামর্শ সহ সূক্ষ্ম পার্থক্য লক্ষ্য করুন। এখানে ফাংশনটি php-fpm (+ nginx) এও কাজ করে।
Date
শিরোনামে চলে যায় - এবং "প্যারামিটার মানগুলি [সেমিকোলনের পরে বিষয়বস্তুর ধরণের পাঠ্য] কেস-সংবেদনশীল হতে পারে বা নাও হতে পারে"। সুতরাং কেস-সংবেদনশীল মান সহ কমপক্ষে দু'টি শিরোলেখ দেওয়া আছে বলে মনে হয় আপনি ভুল হয়ে গেছেন।
HTTP header fields, which include general-header (section 4.5), request-header (section 5.3), response-header (section 6.2), and entity-header (section 7.1) fields, follow the same generic format as that given in Section 3.1 of RFC 822 [9]. Each header field consists of a name followed by a colon (":") and the field value. Field names are case-insensitive.
সুতরাং আমি অনুমান করি আপনি ভুল বলেছেন।
for
লুপ ব্যবহার না করে এর মান পেতে এই ফাংশনে একটি শিরোনামের নামটি দিন । শিরোনাম পাওয়া না গেলে নাল ফেরায়।
/**
* @var string $headerName case insensitive header name
*
* @return string|null header value or null if not found
*/
function get_header($headerName)
{
$headers = getallheaders();
return isset($headerName) ? $headers[$headerName] : null;
}
দ্রষ্টব্য: এটি কেবল অ্যাপাচি সার্ভারের সাথে কাজ করে, দেখুন: http://php.net/manual/en/function.getallheaders.php
দ্রষ্টব্য: এই ফাংশনটি সমস্ত শিরোলেখকে মেমোরিতে প্রসেস ও লোড করবে এবং এটি for
লুপের চেয়ে কম পারফরম্যান্স ।
জিনিসগুলি সহজ করে তোলার জন্য, এখানে আপনি কীভাবে চান তা পেতে পারেন:
সরল:
$headerValue = $_SERVER['HTTP_X_REQUESTED_WITH'];
বা আপনার যখন একবারে একটি পেতে হবে:
<?php
/**
* @param $pHeaderKey
* @return mixed
*/
function get_header( $pHeaderKey )
{
// Expanded for clarity.
$headerKey = str_replace('-', '_', $pHeaderKey);
$headerKey = strtoupper($headerKey);
$headerValue = NULL;
// Uncomment the if when you do not want to throw an undefined index error.
// I leave it out because I like my app to tell me when it can't find something I expect.
//if ( array_key_exists($headerKey, $_SERVER) ) {
$headerValue = $_SERVER[ $headerKey ];
//}
return $headerValue;
}
// X-Requested-With mainly used to identify Ajax requests. Most JavaScript frameworks
// send this header with value of XMLHttpRequest, so this will not always be present.
$header_x_requested_with = get_header( 'X-Requested-With' );
অন্যান্য শিরোনামগুলি সুপার গ্লোবাল অ্যারে are _SERVER এও রয়েছে, আপনি সেগুলি এখানে কীভাবে পাবেন সে সম্পর্কে আপনি এখানে পড়তে পারেন: http://php.net/manual/en/reided.variables.server.php
HTTP_
$headerKey
আমি কোডআইগনিটার ব্যবহার করছিলাম এবং এটি পেতে নীচের কোডটি ব্যবহার করেছি। ভবিষ্যতে কারও কাজে লাগতে পারে।
$this->input->get_request_header('X-Requested-With');
আমি এটি কিভাবে করছি তা এখানে। যদি $ শিরোনাম_নাম পাস না করা হয় তবে আপনার সমস্ত শিরোনাম পাওয়া দরকার:
<?php
function getHeaders($header_name=null)
{
$keys=array_keys($_SERVER);
if(is_null($header_name)) {
$headers=preg_grep("/^HTTP_(.*)/si", $keys);
} else {
$header_name_safe=str_replace("-", "_", strtoupper(preg_quote($header_name)));
$headers=preg_grep("/^HTTP_${header_name_safe}$/si", $keys);
}
foreach($headers as $header) {
if(is_null($header_name)){
$headervals[substr($header, 5)]=$_SERVER[$header];
} else {
return $_SERVER[$header];
}
}
return $headervals;
}
print_r(getHeaders());
echo "\n\n".getHeaders("Accept-Language");
?>
অন্যান্য উত্তরগুলিতে প্রদত্ত বেশিরভাগ উদাহরণের চেয়ে এটি আমার কাছে অনেক সহজ দেখাচ্ছে। এটি পদ্ধতিটি (জিইটি / পোষ্ট / ইত্যাদি )ও পায় এবং ইউআরআই অনুরোধ করে সমস্ত শিরোলেখ প্রাপ্ত করার সময় যা আপনি যদি লগিনে এটি ব্যবহার করার চেষ্টা করছেন তবে দরকারী হতে পারে।
এখানে ফলাফল:
Array ( [HOST] => 127.0.0.1 [USER_AGENT] => Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0 [ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [ACCEPT_LANGUAGE] => en-US,en;q=0.5 [ACCEPT_ENCODING] => gzip, deflate [COOKIE] => PHPSESSID=MySessionCookieHere [CONNECTION] => keep-alive )
en-US,en;q=0.5
এটি করার একটি সহজ উপায় এখানে।
// echo get_header('X-Requested-With');
function get_header($field) {
$headers = headers_list();
foreach ($headers as $header) {
list($key, $value) = preg_split('/:\s*/', $header);
if ($key == $field)
return $value;
}
}
এই ছোট পিএইচপি স্নিপেট আপনার জন্য সহায়ক হতে পারে:
<?php
foreach($_SERVER as $key => $value){
echo '$_SERVER["'.$key.'"] = '.$value."<br />";
}
?>
যদি কেবল একটি কী পুনরুদ্ধার "Host"
করা প্রয়োজন, উদাহরণস্বরূপ ঠিকানা প্রয়োজন, তবে আমরা ব্যবহার করতে পারি
apache_request_headers()['Host']
যাতে আমরা লুপগুলি এড়াতে পারি এবং এটিকে প্রতিধ্বনির ফলাফলগুলিতে ইনলাইন রাখতে পারি
আপনার যদি অ্যাপাচি সার্ভার থাকে তবে এটি কাজ করে
পিএইচপি কোড:
$headers = apache_request_headers();
foreach ($headers as $header => $value) {
echo "$header: $value <br />\n";
}
ফলাফল:
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0
Host: www.example.com
Connection: Keep-Alive