the other answer here में सुझाव के रूप में, मैं PHP documentation में टिप्पणी से समारोह का इस्तेमाल किया है, लेकिन पाया कि यह करने से इनकी है, मुश्किल कुछ शीर्षकों के (गैर-अनुरूप) आवरण की तुलना में पढ़ने/बनाए रखने, और पूर्ण करने के लिए नहीं।
तो क्योंकि मैं करने की जरूरत वास्तव में, उस पर भरोसा करने के लिए सक्षम हो मैं इसे और अधिक स्पष्ट हो सकता है और बेहतर रूप में अच्छी तरह अधिक किनारे मामलों को संभालने के लिए recoded - मूल कोड भी कहा गया है "कुछ बुरा स्ट्रिंग जोड़तोड़ बहाल करने के लिए है मूल पत्र केस " और " यह ज्यादातर मामलों में काम करना चाहिए ", जो किसी चीज़ के लिए अच्छा नहीं लगता है जिस पर आप निर्भर होना चाहिए।
यह सही नहीं है, लेकिन मुझे लगता है कि यह अधिक विश्वसनीय है। एक चीज की कमी यह वास्तविक या मूल शीर्षकों पर काम करना है, क्योंकि $_SERVER
में कोई भी संशोधन आउटपुट में दिखाई देगा। परिणाम को स्थिर बनाकर और फ़ंक्शन को प्रत्येक अनुरोध पर पहली चीज़ के रूप में चलाकर इसे कम किया जा सकता है।
<?php
// Drop-in replacement for apache_request_headers() when it's not available
if(!function_exists('apache_request_headers')) {
function apache_request_headers() {
// Based on: http://www.iana.org/assignments/message-headers/message-headers.xml#perm-headers
$arrCasedHeaders = array(
// HTTP
'Dasl' => 'DASL',
'Dav' => 'DAV',
'Etag' => 'ETag',
'Mime-Version' => 'MIME-Version',
'Slug' => 'SLUG',
'Te' => 'TE',
'Www-Authenticate' => 'WWW-Authenticate',
// MIME
'Content-Md5' => 'Content-MD5',
'Content-Id' => 'Content-ID',
'Content-Features' => 'Content-features',
);
$arrHttpHeaders = array();
foreach($_SERVER as $strKey => $mixValue) {
if('HTTP_' !== substr($strKey, 0, 5)) {
continue;
}
$strHeaderKey = strtolower(substr($strKey, 5));
if(0 < substr_count($strHeaderKey, '_')) {
$arrHeaderKey = explode('_', $strHeaderKey);
$arrHeaderKey = array_map('ucfirst', $arrHeaderKey);
$strHeaderKey = implode('-', $arrHeaderKey);
}
else {
$strHeaderKey = ucfirst($strHeaderKey);
}
if(array_key_exists($strHeaderKey, $arrCasedHeaders)) {
$strHeaderKey = $arrCasedHeaders[$strHeaderKey];
}
$arrHttpHeaders[$strHeaderKey] = $mixValue;
}
return $arrHttpHeaders;
}
}
[वर्तमान डॉक्स] (http://www.php.net/manual/en/intro.apache.php) अभी भी है कि 'अपाचे _ *()' कार्य हैं उल्लेख केवल अपाचे मॉड्यूल के रूप में PHP चलाते समय उपलब्ध। 'Apache_request_headers() 'के लिए [विशिष्ट दस्तावेज़] (http://www.php.net/manual/en/function.apache-request-headers.php) कहता है कि यह अब (> = 5.4.0) फास्टसीजीआई के तहत उपलब्ध है , लेकिन मुझे संदेह है कि यह उपलब्ध है * बिना शर्त *, उदाहरण के लिए आईआईएस के तहत? – Benjamin