जवाबों:
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 : आप FastCGI (सरल विधि) का उपयोग करके PHP को Apache मॉड्यूल के रूप में या PHP 5.4 के रूप में चलाते हैं:
<?php
$headers = apache_request_headers();
foreach ($headers as $header => $value) {
echo "$header: $value <br />\n";
}
ईएलएसई: किसी भी अन्य मामले में, आप (यूजरलैंड कार्यान्वयन) का उपयोग कर सकते हैं:
<?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 () - (PHP> = 5.4) क्रॉस प्लेटफॉर्म संस्करण apache_request_headers()
apache_response_headers () का उपनाम - सभी HTTP प्रतिसाद शीर्ष लेख प्राप्त करें।
हेडर_लिस्ट () - भेजे जाने वाले हेडर की सूची प्राप्त करें।
$_SERVER['HTTP_X_REQUESTED_WITH']
RFC3875 , 4.1.18:
मेटा-वैरिएबल जिनके नाम की शुरुआत होती है
HTTP_
उनमें क्लाइंट रिक्वेस्ट हेडर फील्ड से पढ़े जाने वाले वैल्यू होते हैं, अगर प्रोटोकॉल HTTP का इस्तेमाल किया जाता है। HTTP हेडर फ़ील्ड नाम अपर केस में बदल जाती है, की सभी घटनाओं की है-
के साथ बदल दिया_
गया है औरHTTP_
मेटा-चर नाम देने के लिए prepended।
$_SERVER
वेरिएबल में डालने की उम्मीद कर सकता हूं ? PHP प्रलेखन php.net/manual/en/reserved.variables.server.php के बारे में स्पष्ट है कि हम इसमें क्या हो सकते हैं।
cache-control
हेडर भेज रहा है, लेकिन मैं इसे कहीं भी नहीं देखता हूं $_SERVER
। मुझे HTTP_
"HTTP_ACCEPT", और "HTTP_UPGRADE_INSECURE_REQUESTS" और "HTTP_USER_AGENT" (कई अन्य लोगों के साथ) सहित कई शीर्ष लेख दिखाई देते हैं । लेकिन "कैश-कंट्रोल" के लिए कुछ भी नहीं "प्रगमा" के लिए कुछ भी नहीं है। यह मामला या HTTP_
उपसर्ग की परवाह किए बिना है । क्या मैं कुछ भूल रहा हूँ?
_SERVER["HTTP_CACHE_CONTROL"] max-age=0
आपको $_SERVER
वैश्विक HTTP में सभी HTTP हेडर को HTTP_
अपरकेस के साथ उपसर्ग और डैश के साथ (-) underscores (_) द्वारा प्रतिस्थापित करना चाहिए।
उदाहरण के लिए 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']
वांछित हेडर को पुनः प्राप्त करने के लिए उपयोग करें।
PHP मैनुअल ऑन $_SERVER
: http://php.net/manual/en/reserved.variables.server.php
parseRequestHeaders()
फ़ंक्शन को पढ़ने से सरल समाधान को हल करने के लिए बहुत आसान नहीं है । यदि इस तरह के साहचर्य सरणी की आवश्यकता होती है, तो IMO एपाचे फ़ंक्शन सबसे अच्छा विकल्प है, क्योंकि यह एक कैमलकेस संस्करण के बजाय प्राप्त हेडर को बिल्कुल वापस करता है। (यह भी ध्यान दें कि PHP 5.4 के रूप में, यह अब केवल अपाचे नहीं है।)
apache_request_headers()
या getallheaders()
जब मैंने परीक्षण किया हैडर के नामों को कैपिटल में नहीं लगता है। वे ठीक वैसे ही लौट रहे हैं जैसे मैं ग्राहक की तरफ से गुजरता हूं। फिर आप इस तरह के प्रतिस्थापन कार्य में हेडर नामों को कैपिटल में क्यों ला रहे हैं?
PHP 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) [...]"
// }
इससे पहले यह फ़ंक्शन केवल तभी काम करता था जब PHP एक Apache / NSAPI मॉड्यूल के रूप में चल रहा था।
strtolower
प्रस्तावित समाधानों में से कई में कमी है, RFC2616 (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.np
नोट: यह फ़ंक्शन प्रोसेस करेगा और सभी हेडर को मेमोरी में लोड करेगा और यह 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' );
अन्य शीर्ष लेख सुपर ग्लोबल एरे $ _SERVER में भी हैं, आप उनके बारे में यहां कैसे पढ़ सकते हैं: http://php.net/manual/en/reserved.variables.server.php
HTTP_
$headerKey
मैं CodeIgniter का उपयोग कर रहा था और इसे प्राप्त करने के लिए नीचे दिए गए कोड का उपयोग किया। भविष्य में किसी के लिए उपयोगी हो सकता है।
$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");
?>
अन्य उत्तरों में दिए गए अधिकांश उदाहरणों की तुलना में यह मुझे बहुत सरल लगता है। यह भी विधि (GET / POST / etc) प्राप्त करता है और URI अनुरोध करता है जब सभी हेडर प्राप्त किए जा सकते हैं जो उपयोगी हो सकते हैं यदि आप इसे लॉगिंग में उपयोग करने का प्रयास कर रहे हैं।
यहाँ उत्पादन है:
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 स्निपेट आपके लिए मददगार हो सकता है:
<?php
foreach($_SERVER as $key => $value){
echo '$_SERVER["'.$key.'"] = '.$value."<br />";
}
?>
function getCustomHeaders()
{
$headers = array();
foreach($_SERVER as $key => $value)
{
if(preg_match("/^HTTP_X_/", $key))
$headers[$key] = $value;
}
return $headers;
}
मैं इस फ़ंक्शन का उपयोग कस्टम हेडर प्राप्त करने के लिए करता हूं, अगर हेडर "HTTP_X_" से शुरू होता है, तो हम सरणी में धकेलते हैं :)
यदि केवल एक कुंजी को पुनः प्राप्त करना आवश्यक है, उदाहरण के लिए "Host"
पते की आवश्यकता है, तो हम उपयोग कर सकते हैं
apache_request_headers()['Host']
ताकि हम लूप से बच सकें और इको आउटपुट को इनलाइन कर सकें
यदि आपके पास अपाचे सर्वर है तो यह काम करता है
PHP कोड:
$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